Você está na página 1de 313

ADVPL I

Versão 1.0 25/07/2011 – Todos direitos reservados

Apostila de ADVPL I

NFT – Núcleo de Formação


i Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 1
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ÍNDICE................................................................................................................................... 2

SIMBOLOGIA......................................................................................................................... 9

SOBRE O AUTOR ................................................................................................................. 10

INTRODUÇÃO ..................................................................................................................... 12

SOBRE A NFT .................................................................................................................... 12

NOSSAS OFERTAS & SOLUÇÕES .......................................................................................... 13

TREINAMENTOS ............................................................................................................... 13
CONSULTORIA EM TREINAMENTOS .................................................................................. 14

OBJETIVO ............................................................................................................................ 15

MERCADO DE TRABALHO ................................................................................................... 16

HISTÓRIA DO ADVPL ........................................................................................................... 17

CAPÍTULO 1 - ESTRUTURA ................................................................................................... 18

INSTRUÇÃO/COMANDO......................................................................................................... 18
FUNÇÃO............................................................................................................................. 18
PROGRAMA ........................................................................................................................ 19
COMPILAÇÃO ...................................................................................................................... 19
RPO ................................................................................................................................. 19
SISTEMA/SOFTWARE............................................................................................................. 19
SERVER .............................................................................................................................. 19
REMOTE ............................................................................................................................ 20
Exercício 1 .................................................................................................................... 22

CAPÍTULO 2 – BY YOU IDE – INTRODUÇÃO ........................................................................ 23

OBJETIVO ........................................................................................................................... 23
ACESSANDO A FERRAMENTA ................................................................................................... 23
CONFIGURANDO O IDE ......................................................................................................... 23

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 2
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
CRIAÇÃO DO PROJETO ........................................................................................................... 24
CRIAÇÃO DO CÓDIGO FONTE ................................................................................................... 27

CAPÍTULO 3 - OPERADORES ................................................................................................ 29

OPERADOR DE ATRIBUIÇÃO SIMPLES ........................................................................................ 29


OPERADOR DE IDENTIFICAÇÃO DE ENTIDADE .............................................................................. 29
OPERADORES MATEMÁTICOS .................................................................................................. 30
OPERADORES LÓGICOS .......................................................................................................... 30
OPERADORES DE STRING ....................................................................................................... 30
OPERADORES RELACIONAIS .................................................................................................... 31
OPERADOR DE ATRIBUIÇÃO COMPOSTA .................................................................................... 32
OPERADOR DE INCREMENTO E DECREMENTO.............................................................................. 32
Exercício 1 .................................................................................................................... 34
Exercício 2 .................................................................................................................... 35

CAPÍTULO 4 - VARIÁVEIS ..................................................................................................... 37

TIPOS DE VARIÁVEIS .............................................................................................................. 38


ESCOPO DAS VARIÁVEIS ......................................................................................................... 40
Exercício 1 .................................................................................................................... 45

CAPÍTULO 5 – MPSDU - INTRODUÇÃO ................................................................................ 46

OBJETIVO ........................................................................................................................... 46
ACESSANDO O MÓDULO ........................................................................................................ 46
UTILIZANDO O MENU ARQUIVOS OU ATALHOS ............................................................................ 47

CAPÍTULO 6 – REGISTROS, ARQUIVOS E TABELAS ............................................................... 50

REGISTRO ........................................................................................................................... 50
ARQUIVOS .......................................................................................................................... 50
TABELAS ............................................................................................................................ 50
FAMÍLIA DE ARQUIVOS .......................................................................................................... 51
ARQUIVOS SX´S ................................................................................................................... 52
ÍNDICE DE ARQUIVOS ............................................................................................................ 53
MODO DE ACESSO ÀS TABELAS ................................................................................................ 55
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 3
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Exercício 1 .................................................................................................................... 58
Exercício 2 .................................................................................................................... 59

CAPÍTULO 7 – CONFIGURADOR - INTRODUÇÃO .................................................................. 60

OBJETIVO ........................................................................................................................... 60
USUÁRIOS .......................................................................................................................... 60
Pasta Superior .............................................................................................................. 63
Pasta restrições de acesso ............................................................................................ 63
Pasta horário................................................................................................................ 63
Pasta Parametrização .................................................................................................. 64
Pasta Impressão ........................................................................................................... 65
Pasta Log de operações ................................................................................................ 66
Pasta vínculo funcional ................................................................................................. 67
Retrições de rotinas do menu ....................................................................................... 67
Exercício 1 .................................................................................................................... 70
DICIONARIO DE DADOS .......................................................................................................... 71
ARQUIVOS .......................................................................................................................... 72
Pasta Campos............................................................................................................... 77
Pasta Informações ........................................................................................................ 79
Pasta opções ................................................................................................................ 80
Pasta Validações .......................................................................................................... 81
Pasta Uso ..................................................................................................................... 82
Pasta módulos .............................................................................................................. 83
Opção Pastas ............................................................................................................... 83
Opção Índices ............................................................................................................... 86
GATILHOS........................................................................................................................... 93
TABELAS GENERICAS ............................................................................................................. 95
Incluindo Tabelas.......................................................................................................... 96
Editando tabelas .......................................................................................................... 97
Excluindo Tabelas ......................................................................................................... 99
Visualizando tabelas ................................................................................................... 100

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 4
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PARAMETROS.................................................................................................................... 102
Pesquisando parâmetros ............................................................................................ 103
Visualizando parâmetros ............................................................................................ 105
Alterando parâmetros ................................................................................................ 108
Incluindo parâmetros customizados ........................................................................... 111
Excluindo parâmetros ................................................................................................. 112
PERGUNTAS ...................................................................................................................... 115
Opção Perguntas ........................................................................................................ 115
CONSULTA PADRÃO. ........................................................................................................... 116
Opção Consulta Padrão .............................................................................................. 116
MENUS............................................................................................................................ 136
Redefindo menu ......................................................................................................... 136

CAPÍTULO 8 - INTERFACE (TELAS)...................................................................................... 149

MSDIALOG ....................................................................................................................... 149


ENCHOICE ........................................................................................................................ 150
MSMGET ........................................................................................................................ 154
MSGETDB........................................................................................................................ 159
MSNEWGETDADOS ........................................................................................................... 163
ENCHOICEBAR ................................................................................................................... 171
MODELO 1 - AXCADASTRO .................................................................................................. 173
MBROWSE ....................................................................................................................... 174
MODELO 2 ....................................................................................................................... 182
MODELO 3 ....................................................................................................................... 196
Exercício 1 .................................................................................................................. 212
Exercício 2 .................................................................................................................. 213
Exercício 3 .................................................................................................................. 214

CAPÍTULO 9 – RELATÓRIOS ............................................................................................... 215

IMPCADAST ...................................................................................................................... 215


SETPRINT ......................................................................................................................... 220

CAPÍTULO 10 – FUNÇÕES .................................................................................................. 237


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 5
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
FUNÇÕES DE VALIDAÇÃO...................................................................................................... 237
ExistChav(cAlias, cConteudo, nIndice) ......................................................................... 237
ExistCpo(cAlias, cConteudo, nIndice) ........................................................................... 237
NaoVazio() ................................................................................................................. 237
Pertence(cString) ........................................................................................................ 237
Negativo() .................................................................................................................. 238
Positivo() .................................................................................................................... 238
Texto()........................................................................................................................ 238
Vazio()........................................................................................................................ 238
Posicione().................................................................................................................. 238
FUNÇÕES DE CONVERSÃO DE DADOS ...................................................................................... 238
CtoD(cData) ............................................................................................................... 238
DtoC(dData) ............................................................................................................... 239
DtoS(dData) ............................................................................................................... 240
StoD(cData)................................................................................................................ 241
Str(nValor).................................................................................................................. 242
StrZero(nValor,nTamanho) ......................................................................................... 243
Val(cValor) ................................................................................................................. 244
FUNÇÕES DE MANIPULAÇÃO DE STRING´S: ............................................................................... 245
Alltrim(cString) ........................................................................................................... 245
Ltrim(cString) ............................................................................................................. 246
Rtrim(cString) ............................................................................................................. 247
Replicate(cCaracter,cNum) ......................................................................................... 248
Substr(cString,nPos1,ncaracteres) .............................................................................. 249
Transform(cExp,cPicture) ............................................................................................ 250
At(cCaracter, cString) ................................................................................................. 251
Len(cString) ................................................................................................................ 252
FUNÇÕES DE MANIPULAÇÃO VARIÁVEIS NUMÉRICAS:.................................................................. 253
Int(nValor) .................................................................................................................. 253
NoRound(nValor, nCasas) ........................................................................................... 253
Round(nValor, nCasas) ............................................................................................... 254

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 6
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
FUNÇÕES DE MANIPULAÇÃO DE DATAS:................................................................................... 255
Day(dData)................................................................................................................. 255
Month(dData) ............................................................................................................ 256
Year(dData)................................................................................................................ 257
Time()......................................................................................................................... 257
ElapTime(cHora1,cHora2) ........................................................................................... 258
FUNÇÕES DE MANIPULAÇÃO DE BASE DE DADOS........................................................................ 259
BOF() .......................................................................................................................... 259
EOF() .......................................................................................................................... 260
DbCloseArea() ............................................................................................................ 261
DbGoTop().................................................................................................................. 261
DbGoBotton() ............................................................................................................. 262
DbSetOrder(nOrdem).................................................................................................. 263
DbOrderNickName(Nickname).................................................................................... 263
DbSeek(cChave,lSoft,lLast).......................................................................................... 264
MsSeek(cChave,lSoft,lLast) ......................................................................................... 265
DbSetFilter(bCondição,cCondição) .............................................................................. 265
Reclock(cAlias,lInclui) ................................................................................................. 267
MsUnlock() ................................................................................................................. 267
DbDelete() .................................................................................................................. 268
Deleted() .................................................................................................................... 269
DBSkip(nRegistros) ..................................................................................................... 270
Recno()....................................................................................................................... 272
DbGoto(nReg) ............................................................................................................ 272
MENSAGENS ..................................................................................................................... 273
MsgAlert(cMensagem,cTitulo) .................................................................................... 273
MsgInfo(cMensagem,cTitulo) ..................................................................................... 274
MsgStop(cMensagem,cTitulo) .................................................................................... 274
MsgYesNo(cMensagem,cTitulo).................................................................................. 274
FUNÇÕES DE PROGRESSO DE PROCESSAMENTO ......................................................................... 277
Processa(bAcao,bMsg) ............................................................................................... 277

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 7
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Setproc(nMax)............................................................................................................ 277
Incproc(cMsg)............................................................................................................. 277
RptStatus(bAcao,bMsg) .............................................................................................. 278
SetRegua(nMax)......................................................................................................... 279
Incregua(cMsg) .......................................................................................................... 279
Static Function CriaSx1() ............................................................................................. 285
Exercício 1 .................................................................................................................. 289

GABARITO......................................................................................................................... 290

CAPÍTULO 1.................................................................................................................... 290


CAPÍTULO 3 ................................................................................................................... 291
CAPÍTULO 4.................................................................................................................... 292
CAPÍTULO 6.................................................................................................................... 293
CAPÍTULO 7.................................................................................................................... 294
CAPÍTULO 8.................................................................................................................... 296
CAPÍTULO 9.................................................................................................................... 302

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 8
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 9
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Claudia Cabral da Silva

Qualificações Mais de 15 anos de experiência em T.I. em diversos ramos de


atividades das empresas, tais como,
Empresas de T.I., indústrias, comércio exterior etc.Mais de 10 anos
de experiência como analista Totvs no
levantamento das necessidades junto ao usuário buscando sempre a
melhor alternativa para o melhor uso do sistema, analisando toda a
necessidade de melhorias para agregar valor ao negócio da
empresa, aumentar a usabilidade, eficiência e eficácia do mesmo,
sempre visando a diminuição dos custos operacionais.
Gerenciamento de departamento de T.I. na área de suporte aos
usuários Microsiga, Dimep, controle da
segurança em T.I., desenvolvimento de documentações e processos
de T.I. .
Histórico Profissional
De Junho/2010 -  HF Consulting - de junho/2010 - atual
Atual (Empresa de pequeno porte no segmento tecnologia e informática)
Consultora em T.I.
Responsável pelo levantamento das necessidades dos clientes, customização do
Sistema e suporte.

De Setembro/2008 a BGH do Brasil Telecomunicações e Serviços Ltda


Fevereiro/2010 (Multinacional no segmento de telecomunicações)

Analista de Sistemas Senior


Responsável pelo ERP Microsiga, analisando toda a
necessidade de melhorias para agregar valor ao negócio da
empresa, aumentar a usabilidade, eficiência e eficácia do
mesmo, sempre visando a diminuição dos custos
operacionais. Desenvolvimento de customizações

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 10
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
necessárias ao ERP e documentação das customizações.
Coordenação de equipe de suporte em Microsiga e infra-
estrutura.

De Abril/2000 a Microsiga Software Ltda


outubro/2007 (Empresa de grande porte no segmento de T.I.)

Analista de Sistemas Pleno


Atuou com as parcerias da Microsiga dando todo apoio
tecnológico no desenvolvimento dos softwares
nas áreas de Comércio Exterior, Gestão de Concessionárias,
Manutenção de Ativos, Medicina e Segurança do Trabalho,
Gestão Hospitalar, para poder fazer toda integração com o
ERP Microsiga. Implantação da ferramenta de automação de
testes Rational Robot para a validação dos softwares
desenvolvidos pela Microsiga, criando toda a integração do
banco de dados Protheus.
Certificações

Experiência 2004 - Workshop Team Test Fundamentals of Functional Testing


Educacional (Rational Robot)
2004 - Sistema de Gestão Ambiental
2005 - Data Warehouse
2006 - Organização Pessoal, Gestão do Tempo e Técnicas de
Priorização
2009 - 2071/2318 - Quering MS SQL Server 2000 with Transact –
SQL
2779/5132 : Implementing a Microsoft SQL Server 2005 Database
2780/5133 - Maintaining a Microsoft SQL Server 2005 Database
ITILF - Fundamentos ITIL v3
2011 - 6231/10142 - Maintaining a Microsoft SQL Server 2008
Database

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 11
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

SOBRE A NFT

Fundada por três irmãos dedicados em suas áreas de negócios - computação


gráfica, ERP SAP e ERP Protheus –, a NFT inicia a sua história de sucesso em
2011, com a visão de ser muito mais do que uma escola. Nossa proposta é ser um
núcleo de formação e troca de informações sobre audiovisual e tecnologia de
negócios em São Paulo, com excelência em ensino, e a meta de se tornar referência
no mercado de cursos tecnológicos até 2014.

Nossa missão é preparar os profissionais de audiovisual e tecnologia que vão


representar o futuro dos negócios, atraindo os olhares do mundo para o Brasil – país
com muito potencial nessas áreas. Acreditamos que cabe à NFT atender a essa
demanda por qualificação profissional.

Representando empresas como Autodesk, Apple, Adobe, SAP e sistema Protheus


nosso foco é direcionado para a qualidade e não para a quantidade. Aqui, pensamos
nos mínimos detalhes, que vão desde os melhores professores até a facilidade de
acesso para os alunos e parceiros de negócios.
Mas, o que significa NFT? É a sigla de Núcleo de Formação Tecnológica. Mais que
uma escola, temos a missão de ser um núcleo: de relacionamento; de futuros
trabalhos; de novidades; de formação e de educação. Enfim, um núcleo que será o
seu o trampolim para uma carreira de sucesso, com trabalhos inovadores.
Trataremos do que há de melhor no mercado e do que esteja na vanguarda da
tecnologia.
Mais do que uma simples escola de computação gráfica e tecnologia de negócios,
somos um núcleo de encontro da arte com os negócios, cuja responsabilidade
envolve a preparação dos profissionais que o século 21 exige.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 12
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

TREINAMENTOS

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 13
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CONSULTORIA EM TREINAMENTOS

Preparaçã
Levantamen Realizaçã
o Inicial
to o
NFT NFT NFT

 Envia  Entrevista  Ministra o


questionário líder da área conteúdo do
Descrição

inicial para a ser curso


conhecer treinada podendo ser:
macro  Avalia  In
processo maturidade Com
Cliente dos alunos pany
 Responde
através de  Na
  
Resultado

Questionário Levantament Certificado


respondido o de todos emitido para
pelo cliente os issues alunos que
servirá de documentad obtiverem

apresentam o pré requisito para a realização do curso ou eles fazem um


curso preliminar ou ficam para outra turma

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 14
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

O objetivo deste curso é dar uma base inicial aos alunos sobre como desenvolver na
linguagem ADVPL utilizada no ERP Protheus. Com este curso básico incial você
será capaz de efetuar algumas customizações no ERP Protheus, mas para isso é
importante que pratique bastante após o curso.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 15
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

A quem se destina: A todos que desejam desenvolver e efetuar manutenção em


software que utiliza linguagem de programação ADVPL.

Mercado de trabalho: O mercado de trabalho é vasto, uma fez que a linguagem


ADVPL é utilizada no ERP Protheus/Totvs, o qual é utilizado por mais de 10.000
clientes.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 16
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

O ADVPL - Advanced Protheus Language surgiu em 1994 devido à necessidade de


se criar uma linguagem que suportasse o padrão xbase para a manutenção de todo
o código existente do sistema ERP Siga Advanced. A ADVPL é uma evolução da
linguagem padrão xbase criada pela Microsiga Software S.A.

O ADVPL além de conter os padrões de comandos, funções, operadores, estruturas


de controle de fluxo e palavras reservadas, conta também com uma infinidade de
comandos, funções, operadores, estruturas de controle de fluxo e palavras
reservadas disponibilizadas pela Microsiga, que a torna uma linguagem completa
para a criação das aplicações ERP prontas para a Internet.
Também é uma linguagem orientada a objetos e eventos permitindo desenvolver
aplicações visuais e criar classes de objetos.
Após compilados, todos os programas tornam-se unidades de inteligência básica,
chamadas APO´s (Advanced Protheus Objects). Os APO´s são mantidos em um
repositório e carregados dinamicamente pelo Protheus server para a
execução.Através do ADVPL pode-se desenvolver programas com interface com o
usuário, sem interface com usuário (job´s), servidor web, RPC (remote procedure
call), Telnet.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 17
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Programa
SERVER Remote
Fatp0001 1-
.prw Compilaçã
Instruçõe o
s do Gera APO 3-Executa
2-Gera Fatp0001.prw
programa e grava no
RPO
... RPO
Lê RPO e 3-Executa
RPO devolve as
4-Lê RPO
Fatp0001.p informaçõ
rw es para o Comr002.prw
Comr002.pr Remote
w

INSTRUÇÃO/COMANDO
São frases que indicam as ações a serem executadas. São compostas de um verbo
no imperativo/infinitivo mais um complemento. Ex. Bata(bater) duas claras em
neve,ligue os faróis, abra a porta.

FUNÇÃO
É um conjunto de comandos para chegar a um objetivo. Função para calcular o
salário de um funcionário.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 18
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

PROGRAMA
Ações de um algoritmo obedecendo à sintaxe de uma linguagem de programação. É
um conjunto de comandos e funções para chegar a um objetivo. Programa de
cálculo da folha de pagamento (utiliza a função de cálculo de salário do funcionário
além de outros comandos e outras funções).

COMPILAÇÃO
É o processo de verificação de erros de sintaxe, os quais verificam se as funções e
comandos foram escritas corretamente. Esse processo é necessário, pois o
Protheus não executa o programa diretamente, somente executa os APO´s
(Advanced Protheus Object´s) contidos no RPO. O RPO é gerado através da
compilação.

RPO
Repositório de objetos que contém todos os programas padrões compilados pela
Microsiga e também todos os programas do usuário (customizações).

Ao atualizar um RPO recebido da Totvs sempre deverá ser compilado todos


os fontes do usuário.

SISTEMA/SOFTWARE
É um conjunto de programas para chegar a vários objetivos. Sistema de folha de
pagamento: calcular folha de pagamento, controlar admissões e demissões, calcular
férias, calcular rescisões etc.

SERVER
É o aplicativo do Protheus responsável pela compilação e execução dos APO´s.
Essa inteligência permite que as rotinas sejam descarregadas dinamicamente do
servidor para os terminais, com isso a perfomance é alta e não requer muitos
recursos da máquina para a execução do servidor.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 19
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

REMOTE
É o aplicativo do Protheus que será utilizado pelo usuário para utilizar o sistema. O
remote requisita o APO ao server, o server carrega o APO do RPO, executa e
devolve o resultado ao remote.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 20
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 21
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

EXERCÍCIO 1

Defina :
Programa
Remote
Server
Apo
RPO

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 22
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

OBJETIVO

O IDE é uma ferramenta de edição, compilação e depuração de erros onde os ERPs


da TOTVS são desenvolvidos. É através do IDE que os desenvolvedores e analistas
da podem criar e manter suas rotinas específicas (customizações).

Existe um curso onde falamos de todas as funcionalidades do IDE, porem neste


curso iremos veremos o básico.

ACESSANDO A FERRAMENTA

Acesse a instalação do Protheus bin \ smartclient \ DevStudio.exe

CONFIGURANDO O IDE

1. Para configurar o ambiente de compilação, acesse Arquivos - Configurações:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 23
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
2. Na tela abaixo, clique em adicionar e informe os dados do ambiente de
configuração a ser configurado, após isso clique em OK:

CRIAÇÃO DO PROJETO

O grupo de projetos é um gerenciador existente no ByYou Development Studio que


permite o usuário manter os arquivos de código-fonte separados por projetos, pastas
e grupos para uma organização lógica, facilitando a compilação dos programas.

O grupo de projetos será utilizado posteriormente para a compilação.

Para criar um projeto acesse Projetos - Novo:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 24
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Na tela abaixo, guia "Gerenciador de projetos", escolha o nome do projeto, do grupo


de projetos e do grupo de fontes:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 25
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Ex.: Nome do projeto "Projeto Principal Empresa", nome do subprojeto "Projeto teste
ByYou",nome do grupo de fontes "Faturamento"

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 26
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CRIAÇÃO DO CÓDIGO FONTE

É nesta fase que será desenvolvido o código fonte (programa) .

Na linguagem AdvPL, existem todos os recursos disponíveis para o desenvolvimento


de rotinas e não é mais uma linguagem interpretada. Desta forma, a performance
das rotinas específicas é dez vezes maior do que era no Rdmakes antigos.

Para a criação de um código fonte é utilizada a opção Arquivo - novo arquivo,


conforme abaixo:

Será aberta uma janela em branco, a qual serve para digitar o código do programa.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 27
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 28
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

São sinais gráficos que atribuem ou modificam valores de variáveis. Servem também
para indicar se um valor é verdadeiro ou falso. Também servem para identificar uma
entidade.

OPERADOR DE ATRIBUIÇÃO SIMPLES

Operador Significado Exemplo


:= Atribuição A := 2 + 5

OPERADOR DE IDENTIFICAÇÃO DE ENTIDADE

Operador Significado Exemplo


-> Identifica a entidade. Quando MEMVAR->SALARIO
Existe uma variável com o Resultado: Retorna o valor do Salário
Mesmo nome de um campo é da
Necessário identificar o que variável de memória
queremos utilizar nomomento, FIELD->SALARIO
pois do contrário o Protheus dará Resultado: Retorna o valor do salário
prioridade ao campo da tabela. do
Serve também para referenciar- Campo da área selecionada
se SRA-> SALARIO
a um campo de uma tabela que Resultado: retorna o valor do salário da
não está aberta na área Tabela SRA.
selecionada

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 29
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

OPERADORES MATEMÁTICOS

Operador Significado Exemplo


+ Adição A := 2 + 5
- Subtração B := A - 3
/ Divisão C := B / 2
* Multiplicação D := C * 10
** ou ^ Exponenciação E := D ** 2
% Módulo (Resto da divisão) F := 10 % 3

OPERADORES LÓGICOS

Operador Significado Exemplo


.AND. E IF A = 1 .AND. B= 2
.OR. OU IF A = 1 .OR. B= 2
.NOT. ou ! NÃO IF ! EOF()

OPERADORES DE STRING

Operador Significado Exemplo


+ União A := "Ana " + "Maria "
Resulta: "Ana Maria"
- Concatenação (retirando espaços de strings B := "Ana " - "Maria"
Intermediárias) Resulta: "AnaMaria"
$ Verificação de "contido em" C := "Ana" $B

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 30
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Resulta: .T.

OPERADORES RELACIONAIS

Operador Significado Exemplo


> Maior A := 2 > 1
Resultado: .T. (verdadeiro
)
< Menor A := 2 < 1
Resultado: .F. (Falso )
= Igual A:= "B" ="B "
Resultado: .T. (verdadeiro
)
== Exatamente igual A:= "B" =="B "
Resultado: .F. (falso )
>= Maior ou igual A := 2 >= 1
Resultado: .T. (verdadeiro
)
<= Menor ou igual A := 1<= 2
Resultado: .T. (verdadeiro
)
<> ou # != Diferente A := 2 <> 1
Resultado: .T. (verdadeiro
)

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 31
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

OPERADOR DE ATRIBUIÇÃO COMPOSTA

Operador Significado Exemplo


+= Soma e atribui A = 2 ; A+= 1 (igual a A:= A + 1)
Resultado: 3
-= Subtrai e atribui A = 2 ; A-= 1 (igual a A:= A - 1)
Resultado: 1
*= Multiplica e atribui A = 2 ; A*= 2 (igual a A:= A* 2)
Resultado: 4
/= Divide e atribui A = 2 ; A/= 2 (igual a A:= A / 2)
Resultado: 1
**= ou ^= Exponenciação e atribui A = 2 ; A^= 2 (igual a A:= A ^ 2)
Resultado:4
%= Módulo e atribui A = 2 ; A%= 2 (igual a A:= A % 2)
Resultado: 0

OPERADOR DE INCREMENTO E DECREMENTO


Operador Significado Exemplo
++ Incremento pré ou pós fixado A = 2 ; A++ + 2
Resultado: 4
A =2 ; ++A + 2
Resultado : 5
-- Decremento pré ou pós A = 2 ; A-- + 2
fixado Resultado: 4
A =2 ; --A + 2
Resultado : 3

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 32
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 33
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 1

Verifique as operações abaixo e assinale a verdadeira:


A:= 5 > 3
A) correto
B) incorreto

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 34
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

EXERCÍCIO 2

Indique o resultado das variáveis abaixo:


A:= 2 * 5
B:= "P" $ "ADVPL"
C:= A < 2
D:= 13 % 2
E:= A++ / 2
F:= ++A - 1

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 35
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 36
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Variável é uma entidade capaz de manifestar diferenças de valor. Diz-se que a


variável possui qualquer valor dentro de um campo determinado, ela atua como uma
"gaveta", onde nessa "gaveta" nós podemos guardar qualquer valor. Cada variável
corresponde a uma posição de memória, cujo conteúdo pode ser alterado ao longo
da execução de um programa.

MEMÓRIA

NQTDE CNOME LEXISTE


NPRECO CSEXO ANOMES
AIDADESEX LENCONTROU

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 37
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

TIPOS DE VARIÁVEIS
Temos basicamente quatro tipo de variáveis: numéricas, alfanuméricas, lógicas e
array.
Numéricas: armazenam exclusivamente números, sendo que os números podem
ser:
Inteiro: números que não possuem casas decimais, apenas a parte inteira e podem
ser positivos ou negativos (ex: 1, 2, 67, 999)
Real: números que possuem casas decimais e também podem ser positivos
Exemplos:
nQtde = 100
nPreco = 250.80

Alfanuméricas: armazenam exclusivamente caracteres ou números.


Exemplos:
cNome="Maria"
cSexo="1-Masculino"

Lógicas: armazenam exclusivamente valores lógicos que podem ser verdadeiro (T)
ou falso (F).
Exemplos:
lExiste =.T.
lEncontrou=.F.

Array: armazenam elementos em linhas e colunas. O ADVPL suporta array


unidimensional (vetor) e bidimensional (matriz). Os elementos são acessados
através de índices iniciados em 1 identificando a linha e coluna para quanta
dimensões existirem.
Um array pode conter qualquer tipo de dado.
Deve-se tomar cuidado ao utilizar array´s, pois os mesmos podem consumir muita
memória se forem muito grande.
Exemplos:
aNomes:= {"Maria","João","José"}
Array de 3 linhas com uma coluna
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 38
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Alert(aNomes[2]) - exibe o segundo elemento do array (João) - segunda linha

aIdadeSex := { {"Maria",30,.t.},{"João",40,.f.}, {"José",25,.f.}


Array de 3 linhas com 3 colunas
Alert(aNomes[3,1]) - exibe a terceira linha, primeira coluna - (José)

ARMÁRIO 1 ARMÁRIO 2 ARMÁRIO 3 ARMÁRIO 4 ARMÁRIO 5 ARMÁRIO 6

NQTDE NPRECO CNOME CSEXO LEXISTE

LENCONTROU

GAVETA 1 GAVETA 2 GAVETA 3

1 -MARIA 1-JOÃO 1- JOSÉ


2 -30 2 - 40 2- 25
3- .T. 3 - .F. 3- .F.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 39
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ESCOPO DAS VARIÁVEIS


Como as variáves estão alocadas em posições de memória, as mesmas estarão ou
não visíveis durante a execução dos algoritmos. Para definir o escopo de visão da
variável é necessário declarar a variável antes de utilizá-la.
As variáveis podem ser: Públicas, privadas, estáticas e locais.

Local: são visíveis apenas no escopo da função em que foram declaradas, ou seja,
outras funções não enxergam essa variável.
Exemplo: Function Teste2()
Function Teste() nC := nA * nB -> Erro de variável não existe
Local nA := 2 .
Local nB := 2 .
Local nC := nA * nB .
. mais comandos
Filha() Return .t.
.
mais comandos Function Filha()
Return .t. nC := nA * nB -> erro de variável não existe
Return .t.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 40
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Estáticas: são visíveis no escopo da função em que foram declaradas e mantém o


seu valor ao término da função. Caso haja uma função filha sendo acessada através
da função em que a variável foi criada, tal variável não está visível.
Exemplo:
Function Teste() Function Teste2() -> executada após a finalização da função teste
Static nA := 2 nC := nA * nB -> Não ocorrerá erro
Static nB := 2 .
Local nC := nA * nB .
. mais comandos
Filha() Return .t.
.
mais comandos Function Filha()
Return .t. nC := nA * nB -> erro de variável não existe
Return .t.
Privadas: são visíveis no escopo da função em que foram declaradas e não
mantém o seu valor ao término da função. Caso haja uma função filha sendo
acessada, a função filha terá acesso ao conteúdo da variável.
Exemplo:
Function Teste() Function Teste2() -> executada após a finalização da função teste
Private nA := 2 nC := nA * nB -> Erro de variável não existe.
Private nB := 2 .
Private nC := nA * nB .
. mais comandos
Filha() Return .t.
.
mais comandos Function Filha()
Return .t. nC := nA * nB -> não ocorrerá erro
Return .t.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 41
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Geralmente o nome das variáveis são padronizados da utilizando um prefixo


com o tipo da variável no início do nome da mesma:
n -> numéricas. Ex. nValor
l -> lógicas. Ex. lAchou
d-> data. Ex. dEntrada
c-> caracter. Ex: cNome
a-> array. Ex: aProdutos
o-> objeto. Ex. oDlg

Públicas: são visíveis no escopo da função e em todos as funções subsequentes a


criação da variável, mantém o seu valor até o término de execução do programa
principal, ou seja, uma vez criada uma variável pública, a mesma somente será
"destruída" quando o sistema for finalizado e não função que a criou.
Exemplo:
Function Teste() Function Teste2() -> executada após a finalização da função teste
Public nA := 2 nC := nA * nB -> não ocorrerá erro.
Public nB := 2 .
Public nC := nA * nB .
. mais comandos
Filha() Return .t.
.
mais comandos Function Filha()
Return .t. nC := nA * nB -> não ocorrerá erro
Return .t.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 42
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No quadro abaixo é demonstrado a escopo das variáveis, levando em consideração


que as mesmas são inicializadas na Função1. Demonstra também onde a mesma
perde o valor. As variáveis que não perdem o valor no fim do sistema, perdem o
valor no fim da função que as criou.

Visibilidade Local Estática Privadas Públicas


Início Sistema
Função 1 Sim Sim Sim Sim
Função Filha Não Não Sim Sim
Função 2 Não Sim Não Sim
Fim do sistema Não Sim e Perde Valor Não Sim e Perde valor

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 43
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 44
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 1

Dada as variáveis abaixo, defina o tipo de cada uma:


a= "Jonas,1"
b= 120
c=.T.
d={1,2}

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 45
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

OBJETIVO

O ByYou MPSDU é uma ferramenta de manutenção na base de dados. É através do


ByYou MPSDU que os desenvolvedores e analistas da fazer manutenções,
consultas e exportações e importações em tabelas.

Existe um curso onde falamos de todas as funcionalidades da ferramenta MPSDU,


porem neste curso veremos somente o básico.

ACESSANDO O MÓDULO
O ByYou - MPSDU permite que escolha-se os ícones da barra de ferramentas a
serem utilizados. Para configurar a barra de ferramenta siga os passos abaixo:
1. Acesse o MPSDU

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 46
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
2. No programa inicial, digite MPSDU e clique no botão OK.
Na tela abaixo, entre com os dados de um usuário que seja administrador do

sistema ( usuário e senha) e clique em

UTILIZANDO O MENU ARQUIVOS OU ATALHOS

É neste menu que abrimos e fechamos os arquivos, verificamos a estrutura do


mesmo , criamos uma estrutura (não utilizado), posicionamos os campos do arquivo
de acordo com a nossa necessidade, importamos arquivos, saimos do APSDU e
verificamos e status do arquivo.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 47
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Abrindo uma tabela - clique no menu Arquivo - abrir ou diretamente na barra de

ferramentas no ícone

Na tela abaixo, selecione o driver desejado :

Escolha Top Connect (TOPCONN) e clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 48
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Será aberta uma janela com as configurações do Top connect - clique no botão

Será aberta uma janela contendo todas as tabelas do sistema, digite o nome da

tabela desejada e clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 49
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

REGISTRO
Um registro pode ser considerado um cadastro de cliente realizado. Significa que no
cadastro de cliente foi registrado um cliente.Caso tenha 2 clientes cadastrados
consideramos 2 registros.

ARQUIVOS
Arquivo é um agrupamento de registros que seguem uma regra estrutural, e que
contém informações (dados) sobre uma área específica, registrados no disco rígido
do computador. Exemplo: arquivos .DBF.

TABELAS
No modelo de dados relacional (SQL, por exemplo), tabela é um conjunto de dados
dispostos em número finito de colunas e número ilimitado de linhas ou registros.
As colunas são tipicamente consideradas os campos da tabela, e caracterizam os
tipos de dados que deverão constar na tabela (numéricos, alfanuméricos, datas etc).
Pode conter linhas idênticas dependendo do objetivo da tabela. A forma de
referenciar inequivocamente uma única linha é a utilização de uma chave primária.
Além dos tipos de dados inerentes a todas as colunas de uma tabela, algumas
podem ter associadas restrições: a unicidade (chave única), delimitação de valores,
proibição de valores etc.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 50
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FAMÍLIA DE ARQUIVOS
O Protheus trabalha com família de arquivos para identificar a quais módulos
pertencem tais arquivos. Abaixo, segue as principais famílias de arquivos do
Protheus:

Prefixo Módulo Prefixo Módulo


SA Cadastros SO Assistência Técnica
SB Estoques SP Ponto Eletrônico
SC Previsões de SQ Recrutamento e
Entrada/Saída Seleção
SD Movimentações de SR Folha de Pagamento
Estoque
SE Financeiro ST Manutenção Industrial
SF Fiscal SU Telemarketing
SG Estruturas SV Concessionárias
SH Carga Máquina SW/SY Comércio Exterior
SI Contábil Q Quality
SJ Estatísticas R Recursos Humanos
SM Diversos SZ/QZ/RZ Customizações
SN Ativo Fixo P Projetos Especiais

Exemplo de arquivos:

Arquivo Descrição
SA1 Cadastro de Clientes
SA2 Cadastro de Fornecedores
SB1 Cadastro de Produtos
SC5 Cabeçalho Pedido de Vendas
SC6 Itens do Pedido de Vendas

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 51
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
SC7 Pedido de Compras
SF1 Cabeçalho da Nota Fiscal de Entrada
SD1 Itens da Nota Fiscal de Entrada
SF2 Cabeçalho da Nota Fiscal de Saída
SD2 Itens da Nota Fiscal de Saída
SI1 Plano de Contas
SI2 Lançamentos Contábeis

ARQUIVOS SX´S
Os arquivos SX´s contém todas as informações padrões e também customizadas de
toda base de dados.
Abaixo temos os principais arquivos SX´s do sistema:

Arquivo Descrição
SX1 Perguntas
SX2 Arquivos
SX3 Dicionário de dados
SX5 Tabelas Genéricas
SX6 Parâmetros
SX7 Gatilhos
SXE/SXF Seqüência de numeração de documentos
SINDEX/SIX Índices

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 52
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ÍNDICE DE ARQUIVOS
Ao gravar dados em um arquivo, as informações são gravadas seqüencialmente, ou
seja, linha após linha. Desta maneira, para ler uma informação do arquivo é
necessário ler linha a linha até achar a informação desejada.

Exemplo para buscar o município "POTIM":

#include "rwmake.ch"
User Function TMun1()
Local cMun := "POTIM"
DbSelectArea("CC2")
DbGoTop()
Do While !Eof()
If CC2->CC2 = cMun
MsgInfo("Municipio Encontrado", "Busca Municipio")
Exit
Endif
DbSkip()
EndDo
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 53
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Essa maneira é muito lenta, pois tem que ler linha a linha do arquivo.
Os índices existem para organizar as informações e tornar a busca mais rápida. O
índice é um ponteiro que indica em que linha o dado está armazenado. O índice é
como o índice de um livro, onde o usuário busca um determinado assunto no índice,
e depois vai até a página indicada no índice para ler o assunto.

Ao criarmos um índice por Município (CC2_MUN), veja como o arquivo muda a


ordem dos registros:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 54
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Com o índice criado podemos agora buscar um município específico diretamente no
arquivo sem ter que ler o arquivo todo.

#include "rwmake.ch"
User Function TMun2()
Local cMun := "POTIM"
DbSelectArea("CC2")
DbSetOrder(2)
If DbSeek(Xfilial("CC2") + cMun)
MsgInfo("Municipio encontrado","Busca municipio")
Else
MsgInfo("Municipio nao encontrado","Busca municipio")
Endif
Return

MODO DE ACESSO ÀS TABELAS


Empresa: O Protheus trabalha com o conceito de Empresa/filiais, podendo ter 99
empresas com até 99 filiais cada.

Para cada empresa são criados seus arquivos:

SX - SXX??0
XX Prefixo do arquivo
?? Empresa
0 fixo

Empresa 99
Dicionário de dados -> SX3990
Cadastro de Clientes -> SA1990

Empresa 03
Dicionário de dados -> SX3030
Cadastro de Clientes -> SA1030

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 55
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Filial : Os dados das filiais ficam armazenados dentro dos arquivos das empresas
no campo ??_FILIAL. Somente o arquivo SM2 não tem o campo filial. Ex.
A1_FILIAL, A2_FILIAL, B1_FILIAL.

Acesso compartilhado: quando o acesso é compartilhado o campo filial não é


gravado (fica em branco).
Ex. Cadastro de municípios compartilhado:

Ex. Cadastro de municípios exclusivo:

Cada thread abre até 512 arquivos.


Embora no SIX os índices acima de 9 estejam com letras: A, B, etc, os mesmos
devem ser utilizados com números no DbSetOrder(). Ex. DbSetOrder(10).
Pode-se utilizar um arquivo sem selecionar a área do mesmo, bastando apenas
utilizar o alias do mesmo. Ex. SB1->B1_COD.
Ao abrir um arquivo o primeiro índice é selecionado automaticamente.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 56
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 57
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 1

Qual a principal vantagem em ter um arquivo compartilhado ?

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 58
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 2

Pode existir arquivo índice sem o campo filial ? Caso a resposta seja
negativa, justifique.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 59
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

OBJETIVO

Existe um curso onde falamos de todas as funcionalidades da ferramenta


configurador, porem neste curso veremos somente o básico.

USUÁRIOS
Esta área é responsavel por cadastrar os usuários com diversas informações e
configurações para que possam utilizar o sistema.

Para cadastrar um usuário - acesse Ambiente - Senhas - Usuários

Ao acessar o cadastro, o sistema exibe a tela abaixo:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 60
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Selecione a opção desejada para ter acesso ao cadastro. Caso o usuário não tenha
muito conhecimento sobre o cadastramento de usuários é recomendado utilizar a

opção para que o sistema faça um backup do cadastro dos usuários


antes da manutenção a ser feita.
Após escolher a opção desejada será exibida a tela abaixo:

Para incluir um usuário, clique na opção "Incluir"

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 61
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Usuário - Informe o código do usuário que será utilizado no (LogOn) processo de


autenticação de acesso.

Nome completo - Informe o nome completo do usuário

Senha - Informe a senha do usuário conforme a politica de segurança definida.

Confirme a senha - Confirme a senha digitada.

Usuário bloqueado - Informe a situação do usuário. Caso o usuário não esteja mais
ativo, coloque "Sim" no campo.

Data de bloqueio (validade) - Informe a data em que o sistema deverá bloquear o


acesso do usuário.

E-mail - Informe o e-mail do usuário. O e-mail do usuário poderá ser utilizado para
autenticação ( LogOn ), para envio de senha em caso de esquecimento e envio de
mensagens do sistema ( relatório, eventos de processamento, workflow, etc... )

Departamento - Informe o departamento no qual o usuário trabalha.

Cargo - Informe o departamento do usuário.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 62
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Troca periódica de senhas a cada n dias - Informe a periodicidade estabelecida na
politica de segurança em que o usuário deve trocar sua senha. Caso o prazo seja
ultrapassado, o usuário será notificado a trocar a senha no primeiro acesso após o
prazo de troca, se mesmo assim não o fizer, o acesso será bloqueado.

Número de dígitos do ano - Informe o número de digitos para o ano que o sistema
irá utilizar na apresentação dos dados do tipo data.

Regras de acesso por grupo - Informe a regra de relacionamento do usuário com o


grupo de usuários que ele possui. Esta informação é relevante, uma vez que
algumas informações de configuração não podem ser adicionadas, apenas
sobrepostas, tais como menu, acessos,etc...

PASTA SUPERIOR
Tecle "F3" e selecione o superior do usuário.

PASTA RESTRIÇÕES DE ACESSO

Número de acessos simultâneos - Informe a quantidade de acessos simultaneos que


o usuário pode realizar, incluindo as janelas da interface MDI.

PASTA HORÁRIO
Para cada dia da semana, informar:
Hora Inicial - Informe a hora inicial em que o acesso é permitido.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 63
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Hora final - Informe a hora final em que o acesso ao sistema é permitido.
No exemplo acima, para Domingo o usuário não terá acesso, pois o horário inicial e
final são iguais.

PASTA PARAMETRIZAÇÃO

Configurar dias da database - Informe se o usuário poderá alterar a data base do


sistema. A data base é utilizada pelo sistema para realizar o registros contabéis e
fiscais e indica ao sistema que determinada operação foi realizada naquela data.
Permitir ao usuário alterar a data base, significa permitir a ele que realize
movimentos futuros ou passados.

Retroceder - Informe a quantidade de dias em que o usuário poderá retroceder a


database do sistema.

Avançar - Informe a quantidade de dias em que o usuário poderá avançar a


database do sistema.

Ativar listner de ligação - utilizada quando houver integração do Protheus Call Center
com uma plataforma de CTI (Computer Telephone Integration). O objetivo é verificar
se o usuário que está acessando o sistema está habilitado a utilizar o Listner de
Ligações e reativar o Remote de monitoração de chamadas.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 64
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Ramal - informar o ramal do usuário.

Restrição de acesso - Informe o nível de acesso global aos campos do dicionário de


dados ( metadado). Esta informação é relevante nos cenários em que o módulo (
ambiente ) não pode ser identificado.

PASTA IMPRESSÃO
Diretório de impressão padrão - Informe o diretório padrão de impressão.

Habilitar acesso a outros diretórios - indica se o usuário terá acesso a outros


diretórios além do diretório padrão.

Tipo de impressão padrão - indique qual será o tipo de impressão padrão: disco, via
windows ou direto na porta.

Formato padrão de impressão - indique o formato padrão de impresão: retrato ou


paisagem.

Ambiente de impressão padrão : indique o ambiente de impressão padrão: servidor


ou cliente.
Nome da impressora padrão: informe o nome da impressora padrão para impressão,
caso a impressão seja direto na porta

Driver da impressora padrão - informe o driver da impressora padrão, caso a


impressão seja direto na porta.

Porta da impressão padrão - informe a porta de impressão padrão, caso a impressão


seja direto na porta.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 65
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PASTA LOG DE OPERAÇÕES

Processo - Informe se o log de inclusão de processos deve ser habilitado. A


utilização deste log pode acarretar perda de performace em alguns ambientes.
Recomendamos que seja utilizado temporariamente.

Inclusão de Registro - Informe se o log de inclusão de registros deve ser habilitado.


A utilização deste log pode acarretar perda de performace em alguns ambientes.
Recomendamos que seja utilizado temporariamente.

Alteração de registro - Informe se o log alteração de registros deve ser habilitado.


A utilização deste log pode acarretar perda de performace em alguns ambientes.
Recomendamos que seja utilizado temporariamente.

Relatórios - Informe se o log de emissão de relatórios deve ser habilitado. A


utilização deste log pode acarretar perda de performace em alguns ambientes.
Recomendamos que seja utilizado temporariamente.

Transações - Informe se o log de transações deve ser habilitado. A utilização deste


log pode acarretar perda de performace em alguns ambientes. Recomendamos que
seja utilizado temporariamente.

E-mail - Informe se o log envio de relatórios por e-mail do sistema deve ser
habilitado. A utilização deste log pode acarretar perda de performace em alguns
ambientes. Recomendamos que seja utilizado.

Resposta de parâmetros - Informe se o log de manutenção de parâmetros deve ser


habilitado. A utilização deste log pode acarretar perda de performace em alguns
ambientes. Recomendamos que seja utilizado temporariamente.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 66
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

PASTA VÍNCULO FUNCIONAL

Grupo de empresas - informe o código do grupo de empresas

Filial do sistema - informe a filial do sistema

Nome do grupo de empresas - Nome do grupo de empresas

Filial da empresa - Nome da filial

Razão social - Razão social da empresa

Matrícula - Informe o código do funcionario (caso seja um funcionário da folha de


pagamento)

Nome do funcionário - Nome do funcionário

RETRIÇÕES DE ROTINAS DO MENU


Para liberar acesso aos módulos aos quais o usuário terá acesso clique em "Ações
relacionadas - Restrição de Rotina de Menu"

Será apresentada a tela abaixo com todos os menus, marque/desmarque os menus


desejados para liberar ou bloquear o acesso:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 67
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Para bloquear, basta desmarcar a caixa de seleção.

Para dar acesso, basta marcar a caixa de seleção e clicar no botão para
definir quais acessos o usuário terá na rotina.

Clique em para confirmar.

Após informar todos os dados do usuário clique em


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 68
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 69
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 1

Cadastre um usuário.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 70
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

DICIONARIO DE DADOS
É um conjunto de tabelas que definem a organização dos dados, tais como estrutura
das tabelas, nomes, características de cada campo, perguntas de parametrização e
outros.
O dicionário pode ser personalizado, conforme necessidade.
As tabelas são gravadas no diretório "\SYSTEM" e são identificadas pelo prefixo
"SX".
A manutenção da maioria das tabelas é feita pelo Configurador, porém outras
tabelas são de uso interno do sistema e devido a isso não é possível fazer
manutenção nas mesmas.

Segue abaixo a relação das tabelas e a função de cada uma:

SIX - Índices dos Arquivos (SX2)


SX1 - Manutenção de Perguntas de parametrização (movimentações, consultas e
relatórios)
SX2 - Manutenção dos Arquivos
SX3 - Manutenção dos Campos
SX4 - Configuração de Agenda de Relatórios e Processos (Schedule)
SX5 - Manutenção de Tabelas
SX6 - Manutenção de Parâmetros
SX7 - Manutenção de Gatilhos de Campos (SX3)
SX9 - Manutenção de Relacionamento entre Arquivos (SX2) - Integridade
Referencial (inibe inconsistências na base de dados)
SXA - Manutenção de Pastas Cadastrais dos Arquivos (SX2)
SXB - Manutenção de Consultas-padrão
SXD - Cadastro de Relatórios e Processos para Agendamento (SX4) (Schedule)
SXE - Controle de numeração (números utilizados)
SXF - Controle de numeração (próximos números)
SXG - Manutenção de Configuração padrão para grupo de campos
SXK - Controle de Perguntas (SX1) por usuário
SXM - Agendamento de Workflow
SXO - Cadastro de Logs por Campo
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 71
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
SXP - Histórico de Logs cadastrados no SXO
SXQ - Cadastro de filtros inteligentes da mbrowse (contém as informações
necessárias para a criação do filtro).
SXR - Cadastro de relacionamento entre programa x filtro (utilizada internamente
pelo Protheus para verificar em quais programas os filtros poderão ser utilizados).
SXS - Cadastro de programas (utilizado na validação para mostrar/inibir os filtros na
execução da mbrowse).
SXT - Tabela de usuários (contém as informações dos usuários que poderão utilizar
os filtros da mbrowse).
SXOffice - Cadastro de relacionamento entre as entidades (tabelas) e as consultas
TOII.

ARQUIVOS
São os dados que constam na tabela SX2.
A rotina de arquivos faz a manutenção dos dados e facilita ao usuário determinar
determinar a localização, nome, descrição e modo de acesso dos arquivos.

Para cada empresa existem arquivos próprios, mas através desta rotina é possível
definir o uso comum de qualquer arquivo após a instalação do Sistema.

O campo "Filial" somente será gravado com brancos quando a Empresa, Unidade de
Negócios e a Filial forem compartilhadas. Em caso de uso exclusivo, este campo
recebe a identificação da Empresa, Unidade de Negócios e Filial conforme a
configuração do Grupo de Empresas. Assim, o usuário tem acesso somente aos
dados da sua Empresa, Unidade de Negócios e Filial.

Os arquivos seguem uma nomenclatura conforme os critérios abaixo:


O nome do arquivo é iniciado com a letra S
1ª posição S de SIGA
2ª posição A a Z define a família do arquivo.
3ª posição 1 a Z seqüência dentro da família.

O nome do arquivo é iniciado com a letra da família


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 72
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
1ª posição A a Z define a família do arquivo.
2ª posição 1 a Z sequência dentro da família.
3ª posição 1 a Z sequência dentro da família.

As famílias estão divididas da seguinte maneira:


Famílias Reservadas - SA e Axx a SY e Yxx
Família Reservada a Customizações - SZ e Zxx

Para incluir um arquivo acesse Base de Dados - Dicionário - Arquivos

Será apresentada a tela abaixo, clique no botão para incluir um arquivo:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 73
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Será aberta a tela abaixo, clique em para ver todas as opções do arquivo:

Prefixo - informe o prefixo da tabela, lembrando das regras de nomenclatura de


tabelas. Automaticamente o sistema preenche o campo "Nome" de acordo com a
empresa utilizada.

Path - Informe a localização do arquivo, isto é, drive, diretório e subdiretório (válido


somente nas versões ADS e Local). Para banco de dados deixe em branco.

Descrição - informe a descrição da tabela, em português.

Desc. Esp. - informe a descrição da tabela, em espanhol.

Desc. Inglês - informe a descrição da tabela, em inglês.

Ac. Filial - Informe se o acesso a tabela será compartilhado ou exclusivo. Ao


modificar o Modo de Acesso, o sistema verifica os vínculos existentes com a tabela
modificada e informa as demais tabelas que terão seu modo de acesso alterado
automáticamente.
É necessário aceitar as condições de alteração para todas as tabelas vinculadas que
forem exibidas, para que seja possível efetuar a alteração.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 74
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Ac. Unidade - Informe se o acesso a tabela será compartilhado ou exclusivo. Ao
modificar o Modo de Acesso, o sistema verifica os vínculos existentes com a tabela
modificada e informa as demais tabelas que terão seu modo de acesso alterado
automáticamente.
É necessário aceitar as condições de alteração para todas as tabelas vinculadas que
forem exibidas, para que seja possível efetuar a alteração.

Ac. Empresa - Informe se o acesso a tabela será compartilhado ou exclusivo. Ao


modificar o Modo de Acesso, o sistema verifica os vínculos existentes com a tabela
modificada e informa as demais tabelas que terão seu modo de acesso alterado
automáticamente.
É necessário aceitar as condições de alteração para todas as tabelas vinculadas que
forem exibidas, para que seja possível efetuar a alteração.

Rotina - nome da rotina que será executada quando o sistema abrir o arquivo.

Display -

Clique no botão para gravar a inclusão do arquivo.

Neste momento o arquivo só foi incluído, mas não foram definidos os campos e
índices o arquivo (estrutura do arquivo) .

Para definir a estrutura do arquivo, vamos editar o arquivo. Estando posicionado no

arquivo, clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 75
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para ver as opções do arquivo.

Clique na opção Campos para incluir os campos da tabela, note que o sistema já
traz o campo Filial, o qual não pode ser alterado.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 76
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para incluir os campos:


PASTA CAMPOS

Campo - Nome do campo de arquivo, respeite o mesmo prefixo que foi criado para o
campo Filial (Z1_FILIAL)

Tipo - Tipo do campo, onde:


N = numérico

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 77
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
C = caractere
D = data
L = lógico

Tamanho - informe o tamanho do campo

Decimal - para campos numéricos, informe o número de casas decimais

Formato - Formato de edição do campo no formato dBase padrão.

Form.Variavel - Formato variável de edição do campo

Contexto - Informe se o campo será real (existirá na base de dados) ou Virtual


(somente existe em tela e não é gravado na base de dados)

Propriedade - informe se o campo poderá ser alterado ou se será visualizado


somente.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 78
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PASTA INFORMAÇÕES

Título - Título do campo. É utilizado em todas as consultas e relatórios baseados


no dicionário de dados, este é o cabeçalho apresentado para o campo.

Tit. Espanhol - título do campo em espanhol

Tit. Inglês - título do campo em inglês

Descrição - descrição genérica do campo em português

Des. Espanhol - descrição genérica do campo em espanhol

Des. Inglês - descrição genérica do campo em inglês

Help - descreva a função do campo. Essa descrição aparecerá quando o usuário


pressionar a tecla F1 para saber a funcionalidade do mesmo.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 79
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PASTA OPÇÕES

Lista Opçoes - campo utilizado para criar campos do tipo Combo


Ex. para criação de Combo de Sim/Nao, preencher com : 1-Sim;2-Nao

Lista Espanhol - combo em espanhol.Ex: 1-Si;2-No

Lista Inglês - combo em inglês.Ex: 1-Yes;2-No

Inic. Padrão - inicializador padrão do campo. Conteúdo que será preenchido quando
o campo for acessado. A função GETSXENUM é usada para criar uma numeração
automática para o campo.

Modo de edição - condição em que o campo será editado. Ex. Caso desejar que o
campo seja editado apenas na inclusão, pode-se incluir neste campo o conteúdo
INCLUI (variável publica do sistema que indica que tipo de manutenção está sendo
feita). Pode-se colocar também uma função, caso a mesma retorne falso (.F.) o
campo não sera acessado pelo usuário.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 80
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
P. Search - Informe se o campo fará parte de pesquisas (search)

Consulta Padrão - Caso o campo esteja amarrado em outra tabela, informe a


consulta padrão. A consulta aparece quando o usuário pressiona a tecla F3.

PASTA VALIDAÇÕES

Val. usuário - informe a validação do campo. Este campo é utilizado para a


validação dos campos customizados. A função NaoVazio() não aceitará o conteúdo
do campo vazio. Pode-se incluir qualquer função nesse campo ou deixá-lo em
branco, caso não haja validação.

Val. Sistema - reservado para Totvs, validação dos campos padrões do sistema.

Nível - Nível de acesso para o campo. Este nível limita o acesso de usuários a
informação contida no campo.Ex. Usuários de nível 5 não verão campos de nível 6.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 81
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PASTA USO

Obrigatório - informe se o preenchimento do campo é obrigatório.


Usado - informe se o campo é utilizado pelo sistema. Se estiver desmarcado esse
item, o campo é considerado com fora de uso e não aparece mais.
Browse - informe se o campo aparecerá no browse.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 82
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
PASTA MÓDULOS

Marque os módulos em que o campo será utilizado, ou escolha "Utilizado por todos
os módulos", caso o mesmo for utilizado por todos os módulos.

Clique no botão para gravar a inclusão.


Proceda desta maneira para incluir tantos campos forem necessários.

OPÇÃO PASTAS
Essa opção é utilizada para organizar os campos do arquivo confor-me o tipo de
informação, por exemplo, o cadastro de clientes possui as pastas: cadastro, fiscais,
vendas etc.
Para criar uma pasta - clique em Pastas

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 83
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para incluir a pasta

Informe as descrições da pasta e depois, clique em a lado esquerdo da tela.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 84
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botçao para incluir o campo

Selecione os campos desejados para a pasta e clique em para gravar


as informações.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 85
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para gravar as informações


Proceda desta maneira para incluir quantas pastas forem necessárias.

OPÇÃO ÍNDICES
Todo arquvo deve ter pelo menos um índice. Os índices são utilizados como chave
de pesquisas nas consultas do sistema.

Para incluir um índice, clique na opção Índices

Clique no botão para incluir o índice:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 86
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Chave - indica a ordem do índice e sempre deverá conter o campo FILIAL como
primeiro campo da chave.

Para informar a chave clique em , e a seguir em CAMPOS

Selecione o campo desejado (Z1_FILIAL) e clique em


Proceda da mesma maneira para incluir o campo Z1_CODIGO

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 87
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Nickname - informe o apelido do índice.

Mostra pesq. - Informe se o índice deverá ser mostrados nas pesquisas do browse.

Clique no botão para gravar as informações.

Clique no botão para confirmar as informações.

Clique no botão para efetivar a criação do arquivo. É necessário acesso


exclusivo ao sistema.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 88
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão

Clique no botão
Aguarde o processamento.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 89
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique em para sair do processo.

Na tela abaixo serão exibidos todos os grupos possíveis de alteração, para alterar o
tamanho, selecione o grupo desejado e clique em . Vamos alterar o grupo
Parcela:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 90
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No campo tamanho digite o tamanho do campo respeitando o limite entre o mínimo


e o máximo.
Ao lado esquerdo da tela na opção Campos, são mostrados todos os campos
referentes ao grupo:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 91
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para gravar as informações.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 92
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

GATILHOS

Os gatilhos são utilizados para o preenchimento de um campo após a digitação de


um outro campo.
Para a criação de um gatilho - clique na opção gatilhos

Serão exibidos os gatilhos existentes no sistema.


Ex.: O cliente deseja que o campo "Nome Fantasia" do fornecedor sempre venha
preenchido com as 20 posições do nome do fornecedor.
Para incluir um novo gatilho clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 93
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Campo - nome do campo origem

Sequencia - preenchido automático pelo sistema

Cnt. dominio - campo que sofrerá a ação do gatilho

Tipo - tipo do gatilho

Regra - O que será gravado no campo. Pode ser qualquer expressão ADVPL.

Posiciona - se deve posicionar na tabela. Utilizado quando o gatilho se baseia em


outra tabela.

Alias - nome da tabela a ser posicionada

Ordem - número do índice do arquivo

Chave - chave de pesquisa do índice

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 94
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Condição - condição em que o gatilho será executado

Clique no botão para gravar as informações.


Verificando o funcionamento do gatilho:
No módulo de compras vampos incluir um fornecedor:
O incluir a Razão Social do fornecedor, automaticamento o sistema preencherá
automaticame o campo N. Fantasia se o mesmo estiver vazio.

Na alteração o gatilho não é executado, devido a condição preenchida no mesmo,


mesmo alterando a Razão Social.

TABELAS GENERICAS

O Microsiga Protheus® disponibiliza de um arquivo de tabelas que permite a


padronização de várias informações utilizadas pelo sistema. As mesmas são
identificadas por códigos e relacionam as possíveis informações que o campo pode
conter.
Durante a operação do sistema, em vários momentos de atualização, as tabelas
podem ser acessadas, pressionando [F3] sobre o campo ou clicando na opção de
Consulta apresentado à direita do campo.
Os ambientes da série 3 não utilizam todas as tabelas apresentadas, pois algumas
delas são pertinentes a opções encontradas somente nos ambientes Microsiga
Protheus® versão "Master".
Ex. Tabela de Tipos de Títulos - Código 05

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 95
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

INCLUINDO TABELAS
As tabelas da Totvs inciam-se com o código 00.
Para incluir uma tabela acesse Ambiente - Cadastros - Tabelas

Clique no botão para incluir uma nova tabela

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 96
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Chave - informe a chave da tabela - deverá se um código não existente.


Descrição - informe a descrição em português da tabela
Descrição Spanish - informe a descrição em espanhol da tabela
Descrição English - informe a descrição em inglês da tabela.

Após completar as informações acima, clique no botão + ao lado da lupa (canto


superior direito da tela). Depois clique em "Itens" para preencher os itens da tabela.

Código - preencha o código do campo da tabela


Preencha a descrição do campo nos três idiomas.
Para inserir novos itens na tabela, pressione a tecla e será criiada uma nova
linha em branco para seja criado o novo item da tabela.

Clique no botão para confirmar a inclusão.

EDITANDO TABELAS
Para editar uma tabela acesse Ambiente - Cadastros - Tabelas
O sistema apresentará todas as tabelas do sistema:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 97
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para pesquisar a tabela a ser alterada.

No canto superior esquerdo, preencha a tabela a ser alterada e clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 98
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Após o sistema posicionar na tabela, clique no botão para editar a tabela.


Proceda da mesma maneira que mostrado na inclusão para fazer as alterações.

Clique no botão para confirmar a alteração.

EXCLUINDO TABELAS
Para excluir uma tabela acesse Ambiente - Cadastros - Tabelas
O sistema apresentará todas as tabelas do sistema:

Clique no botão para pesquisar a tabela a ser alterada.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 99
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No canto superior esquerdo, preencha a tabela a ser alterada e clique no botão

Após o sistema posicionar na tabela, clique no botão para excluir a tabela.

Clique no botão para confirmar a exclusão.

VISUALIZANDO TABELAS
Para visualizar uma tabela acesse Ambiente - Cadastros - Tabelas
O sistema apresentará todas as tabelas do sistema:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 100
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para pesquisar a tabela a ser alterada.

No canto superior esquerdo, preencha a tabela a ser alterada e clique no botão

Após o sistema posicionar na tabela, clique no botão para visualizar a tabela.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 101
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para sair.

PARAMETROS

São variáveis que alteram o processamento de uma rotina. Elas são elementos
chaves na execução das rotinas do sistema. Todos os parâmetros começam com
"MV_".

Os parâmetros podem ser definidos por filiais ou serem comuns para a Empresa.

Em exemplo de parâmetro é o MV_ALIQIRF, o qual define a alíquota paara títulos


com imposto de renda retido na fonte.

Através do help do sistema, dentro da rotina que está sendo utilizada é possível
verificar quais os parâmetros existentes na mesma. Para isso, acesse a rotina
desejada e pressione a tecla F1.

Ao pressionar F1 será aberta a tela de help da rotina

Clique na Pasta "dados técnicos"

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 102
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique em "parâmetros"

O sistema mostrará todos os parâmetros da rotina, Quando o parámetro for


específico para um ambiente o mesmo será mostrado por ambiente, conforme
abaixo:

PESQUISANDO PARÂMETROS
Para pesquisar um parâmetro, acesse Ambiente - Cadastros - Parâmetros -
Pesquisar

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 103
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No canto superior esquerdo digite o nome do parâmetro desejado e clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 104
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

O sistema posicionará no parâmetro procurado, caso não encontre o sistema


posicionará no último parâmetro.

VISUALIZANDO PARÂMETROS
Para visualizar um parâmetro, acesse Ambiente - Cadastros - Parâmetros -
Pesquisar

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 105
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No canto superior esquerdo digite o nome do parâmetro desejado e clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 106
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

O sistema posicionará no parâmetro procurado, caso não encontre o sistema


posicionará no último parâmetro.

Clique no botão para visualizar o parâmetro


Será aberta uma janela com duas abas, uma contendo as informações técnicas do
parâmetro (aba informações), informando, o nome do parâmetro, o tipo do
parâmetro : caractere, numérico, lógico ou data, e o conteúdo do parâmetro. O
conteúdo do parâmetro é a informação que altera o processo da rotina.
Na aba "descrição" contém a descrição da função do parâmetro.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 107
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ALTERANDO PARÂMETROS
Para alterar um parâmetro, acesse Ambiente - Cadastros - Parâmetros - Pesquisar
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 108
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No canto superior esquerdo digite o nome do parâmetro desejado e clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 109
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

O sistema posicionará no parâmetro procurado, caso não encontre o sistema


posicionará no último parâmetro.

Clique no botão para alterar o parâmetro


Será aberta uma janela com duas abas, uma contendo as informações técnicas do
parâmetro (aba informações), informando, o nome do parâmetro, o tipo do
parâmetro : caractere, numérico, lógico ou data, e o conteúdo do parâmetro. O
conteúdo do parâmetro é a informação que altera o processo da rotina.
Na aba "descrição" contém a descrição da função do parâmetro.
Altere as informações desejadas:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 110
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão
INCLUINDO PARÂMETROS CUSTOMIZADOS
Para alterar um parâmetro, acesse Ambiente - Cadastros - Parâmetros

Clique no botão para incluir um novo parâmetro


Será aberta uma janela com as abas vistas anteriormente:
Pasta Informações

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 111
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Filial - Caso o parâmetro seja exclusivo para filial, informe o número da filial, caso
contrário deixe em branco.
Nome da Var - informe o nome do parâmetro
Tipo - informe o tipo do parâmetro
Cont Por - informe o conteúdo do parâmetro em português
Cont Ing - informe o conteúdo do parâmetro em inglês
Cont Esp - informe o conteúdo do parâmetro em espanhol

Pasta descrição

Informe a função do parâmetro.

Clique no botão

EXCLUINDO PARÂMETROS
Para excluir um parâmetro, acesse Ambiente - Cadastros - Parâmetros - Pesquisar

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 112
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

No canto superior esquerdo digite o nome do parâmetro desejado e clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 113
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para excluir

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 114
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para confirmar a exclusão ou no botão para


cancelar a exclusão

PERGUNTAS

OPÇÃO PERGUNTAS
As perguntas são utilizadas nas telas parâmetros de relatório e de processos do
sistema.
Serão exibidos as perguntas existentes no sistema.

Para incluir uma pergunta clique em

Grupo - Nome da pergunta

Pergunta - Nome da pergunta em português

Pergunta Espanhol - Nome da pergunta em português

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 115
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Pergunta Inglês - Nome da pergunta em português

Tipo - tipo da pergunta: caractere, numérico,data ou lógico

Tamanho - tamanho da pergunta

Decimais - decimais da pergunta.

Formato - formatato da pergunta (picture)

Validação - validação da pergunta

Help - help da pergunta - o que deve ser digitado na peprgunta.

Consulta Padrão - consulta da pergunta, quando for o caso.

Clique no botão para gravar as informações

CONSULTA PADRÃO.

OPÇÃO CONSULTA PADRÃO


Consulta padrão
As consultas são pesquisas dos arquivos do sistema. São utilizadas, por exemplo,
para mostrar os Clientes em uma tela de pesquisa, permitindo que se pesquise pelo
código, pelo nome, pelo CNPJ etc. Estas definições são estruturadas nesta rotina.

Para a criação de uma Consulta Padrão clique em Consulta Padrão :

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 116
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Serão exibidas todas as consultas existentes no sistema:

Clique no botão para incluir uma consulta

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 117
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Informe "Consulta Padrão"

Consulta - informe o nome da consulta

Descrição - informe a descrição em português da consulta

Descrição Espanhol - informe a descrição em Espanhol da consulta

Descrição Inglês - informe a descrição em inglês da consulta

Clique em para continuar o cadastro da consulta

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 118
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Procurar por - digite o nome da tabela deseja para consulta

Habilitar inclusão - habilita esse campo, caso desejar que o usuário faça inclusões
através da consulta.

Consulta analítica - Se desejar utilizar um programa próprio (Userfunction) para


uma consulta padrão, informe o seu nome na caixa "Consulta Analítica"

Clique no botão para continuar o cadastro da consulta.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 119
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

1. Ao lado esquerdo da tela (ìndices), clique no botão para inserir o índice


que determinará a orderm da consulta:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 120
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Selecione o índice desejado e clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 121
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

2. Ao lado direito da tela (Colunas), informe os campos que aparecerão para o


índice selecionado.

Para isso clique no botão para inserir os campos:

Clique no botão para inserir o campo:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 122
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Selecione o campo desejado e clique no botão

Clique no botão para gravar o campo

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 123
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Proceda da maneira acima para inserir os campos desejados para a consulta.

Para incluir outros índices, proceda como explicado no item 1 e para amarrar
os campos ao índice proceda como explicado no item 2. Somente após isso siga os
passos abaixo.

Clique no botão para continuar com o cadastro da consulta:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 124
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para informar o retorno da consulta, ou seja, o campo que após
o usuário pressionar F3 será retornado para a tela.

Clique no botão para escolher o campo de retorno

Clique no botão para confirmar.

Clique em para finalizar o cadastro.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 125
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Consulta Específica
É utilizada para trazer uma determinada informação para a consulta, utilizando para
isso um rdmake.

Para a criação de uma Consulta específica clique em Consulta Padrão :

Clique no botão para incluir a consulta específica:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 126
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Tipo de consulta : informe Consulta Específica

Consulta - informe o nome da consulta

Descrição - informe a descrição em português da consulta

Descrição Espanhol - informe a descrição em Espanhol da consulta

Descrição Inglês - informe a descrição em inglês da consulta

Clique em para continuar o cadastro da consulta

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 127
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Tabela - informe o nome da tabela da consulta

Expressão - informe o nome do rdmake que fará o tratamento da consulta

Retorno - informe o nome do rdmake que trará o retorno da consulta (clique no botão

para infomar o retorno).

Clique no botão
Ex.:
#INCLUDE "PROTHEUS.CH"

Static aCodRel := { {"000001","10"},;


{"000002","20"},;
{"000003","30"},;
{"000004","40"},;
{"000005","50"},;

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 128
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
{"000006","60"},;
{"000007","70"},;
{"000008","80"},;
{"000009","90"},;
{"000010","100"} }

USER Function CHKCOR()

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄ¿
//³ Declaracao de Variaveis ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÙ
Local oListBox
Local oPanel

Local aPars := {}

Local cVar := Upper( Alltrim( ReadVar() ) )


Local cConteudo := ""
Local cCodigo := ""

Local nPosList := 0

Local lOk := .T.

If cVar == "M->Z1_CODIGO"
lOk := .F.
cConteudo := &(ReadVar())

If !Empty(cConteudo)
nPosList := ASCAN(aCodRel, {|aVal| aVal[1] == Upper(cConteudo)})
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 129
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EndIf

DEFINE MSDIALOG oDlg FROM 00,00 TO 290,490 PIXEL TITLE


OemToAnsi("Pesquisa")

oPanel := TPanel():New(1,1,'',oDlg,oDlg:oFont, .T., .T.,,,204,140,.T.,.T. )


oPanel:Align := CONTROL_ALIGN_ALLCLIENT

@ 0,0 BITMAP oBmp RESNAME "Pontuacao" Of oDlg SIZE 100,300


NOBORDER When .F. PIXEL
oListBox := TWBrowse():New(
40,05,204,140,,{"Cor","Pontuacao"},,oPanel,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oListBox:SetArray(aCodRel)
oListBox:bLine := { ||{aCodRel[oListBox:nAT][1],aCodRel[oListBox:nAT][2]}}
oListBox:bLDblClick := { ||Eval(oConf:bAction), oDlg:End()}
oListBox:Align := CONTROL_ALIGN_ALLCLIENT

@ 115,05 BUTTON oConf Prompt STR0020 SIZE 45 ,10 FONT oDlg:oFont


ACTION (lOk:=.T.,cCodigo:=aCodRel[oListBox:nAT][1],oDlg:End()) OF oDlg PIXEL
//'Confirma'
@ 115,55 BUTTON oCanc Prompt STR0021 SIZE 45 ,10 FONT oDlg:oFont
ACTION (lOk:=.F.,oDlg:End()) OF oDlg PIXEL //'Cancela'

If nPosList > 0
oListBox:nAT := nPosList
oListBox:bLine := {
||{aCodRel[oListBox:nAT][1],aCodRel[oListBox:nAT][2]}}
oConf:SetFocus()
EndIf

ACTIVATE MSDIALOG oDlg CENTERED

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 130
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
If lOk
M->A1_PONTOS := cCodigo
Else
M->A1_PONTOS:= cConteudo
EndIf
EndIf

Return lOk

User Function RetCor()

Return (M->Z1_CODIGO)

Consulta Usuários
A consulta usuários permite que o campo de uma tabela realize consultas de
campos de outras tabelas, permitindo que o retorno seja vinculado a definidos
usuários.
Para a criação de uma Consulta de usuário clique em Consulta Padrão.

Clique no botão para incluir a consulta de usuário:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 131
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Tipo de consulta : informe Consulta de Usuários

Consulta - informe o nome da consulta - FIXO AC0

Descrição - informe a descrição em português da consulta

Descrição Espanhol - informe a descrição em Espanhol da consulta

Descrição Inglês - informe a descrição em inglês da consulta

Clique em para continuar o cadastro da consulta

Na tela abaixo, selecione os campos de retorno da consulta

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 132
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique em

Consulta Grupo de Usuários


A consulta grupo de usuários é similar a consulta de usuários, porém limita o retorno
dos dados da consulta.
Para a criação de uma Consulta de grupo usuário clique em Consulta Padrão.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 133
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para incluir uma consulta de grupo de usuário

Tipo de consulta : informe Consulta Grupo de Usuários

Consulta - informe o nome da consulta - FIXO AB0

Descrição - informe a descrição em português da consulta

Descrição Espanhol - informe a descrição em Espanhol da consulta

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 134
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Descrição Inglês - informe a descrição em inglês da consulta

Clique em para continuar o cadastro da consulta

Na tela abaixo, selecione os campos de retorno da consulta

Clique em

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 135
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MENUS

Por padrão o Protheus já vem com o menu de cada módulo pronto, porém
geralmente é necessário configurar esse menu de acordo com o perfil de cada
usuário, uma vez que os menus padrão contém todas as opções do sistema e nem
sempre os usuários poderão acessar todas as opções.

Conforme exposto acima os menus podem ter suas opções reformuladas de


maneira que cada usuário possa ter um menu de acesso próprio de acordo com o
tipo de trabalho por ele desenvolvido. É possível criar um único menu a partir de
opções de diversos ambientes do Protheus.

O programa de “Configuração de Menus” deve ser utilizado em conjunto ao


“Configuração de Senhas”.

Neste programa, deve ser definido um menu para cada usuário e na configuração de
senhas, associa-se este menu com a senha do usuário que determinará quais
ambientes, rotinas, empresas e filiais ele poderá acessar.

A configuração de menus parte de um já existente (Menu de Entrada) que ao ser


redefinido irá gerar um novo menu (Menu de Saída).

REDEFINDO MENU
Para redefinir um menu acesse Ambiente - Cadastro - Menus

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 136
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Será exibida uma tela contendo todos os menus padrão do sistema (pasta \system).

Para carregar menus de outros diretórios clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 137
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Após selecionado o diretório, clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 138
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique no botão para adicionar o novo diretório de menus

Clique no botão para sair da rotina.

Marque os menus desejados para manutenção e clique no botão

O sistema apresenta uma tela dividida em dois lados, do lado esquerdo contém os
menus de origem selecionados pelo usuário, do lado esquerdo é apresentada a

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 139
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
estrutura do novo menu, porém vazia. É nessa estrutura que serão inseridos os itens
os quais o usuário terá acesso, para isso necessário proceder da seguinte maneira:

Selecione o item de origem a ser incluido no menu de destino. O menu de destino


deve estar marcado onde sera incluído o item:
Vamos incluir o cadastro de produtos do menu Compras, para isso no destino a
pasta Atualizações deve estar marcada (negrito).

Clique em para inserir o item no menu.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 140
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Caso o usuário desejar organizar as informações, o mesmo pode criar um grupo.

Para isso basta clicar no botão no grupo principal que desejar.


Vamos criar um novo grupo chamado "Entidades" no grupo principal Atualizações

Clique no botão para confirmar

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 141
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Agora vamos inserir itens no grupo Entidades, marque a pasta Entidades. Depois no
menu de origem Compras, vamos selecionar o item Fornecedores e clicar em

Vamos fazer o mesmo para Clientes e contatos

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 142
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Vamos incluir o pedido de vendas do menu Faturamento , vamos criar um grupo


"Pedidos" de depois incluir o Pedido de Vendas.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 143
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Agora vamos adicionar o Pedido de Vendas

Incluindo um menu customizado

Selecione a pasta desejada e clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 144
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Descrição - Nome da nova opção do menu

Status do menu -
 Habilitado - exibe a opção no menu e permite a sua seleção.
 Desabilitado - desativa a opção posicionada, não exibindo-a no menu.
 Inibido - apresenta a opção no menu, porém não permite a sua seleção.

Módulo - Selecione o ambiente cujo tratamento deve ser aplicado à opção, por
exemplo, selecionada a opção “Fornecedores” que deve se comportar como no
Ambiente Compras

Tipo - Indica a tipo da nova opção - essa opção é obrigatória.


 Função Protheus
 Relatório SIGARPM
 Função de Usuário
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 145
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
 Função Template
 Relatório Crystal
 Cons. Genérica Relacional

Rotinas do Browse - Permite definir o acesso às opções dos menus nas telas
browse. O Sistema apresenta 10 opções equivalentes às funções de cada programa
na seqüência em que aparecem. Por exemplo: em um programa de atualização,
temos a opção

1-Pesquisar, 2-Visualizar, 3-Incluir, 4-Alterar, 5-Excluir. As opções restantes variam


de rotina para rotina., é necessário entrar na rotina para verificar o número do botão
(contar os botões da tela).

Tabelas:
Marque as tabelas utilizadas pela rotina.

Clique no botão para gravar.

Agora vamos gerar o menu. Para isso clique no botão

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 146
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Digite o nome do menu do usuário, selecione o diretório e clique no botão

Clique no botão para confirmar a geração do menu.

Clique em para sair.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 147
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique em para finalizar.

O menu foi gravado conforme solicitado.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 148
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MSDIALOG
É uma janela da aplicação.Ela é base para os outros componentes visuais da
aplicação.
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni TO nLiFim,
nColFim OF oObjetoRef UNIDADE

oObjetoDLG - Posição do objeto Say em função da janela em que ele será definido.
cTitulo - Título da janela de diálogo.
nLinIni, nColIni - Posição inicial em linha / coluna da janela.
nLiFim, nColFim -Posição final em linha / coluna da janela.
oObjetoRef - Objeto dialog no qual a janela será definida.
UNIDADE - Unidade de medida das dimensões: PIXEL

Ex: Como montar uma tela utilizando a MsDialog

#include "protheus.ch"
User Function XMDiag()
Local cTitulo := "Teste MsDialog"
// Variaveis para a MsAdvSize
Local lEnchBar := .F. // Se a janela de diálogo possuirá enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padrões do //Protheus
(.T.) ou usar o máximo disponível (.F.)
Local nMinY := 400 // Altura mínima da janela
Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)

DEFINE MSDIALOG oDlg TITLE cTitulo FROM aSize[7],0 to aSize[6],aSize[5] of


oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTERED

Return
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 149
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ENCHOICE
Tela para dilgitação de vários campos com os seus respectivos textos explicativos. É
composta diversos objetos Tsay() e Tget() para visualisar ou editar as informações.
Utilizada geralmente em cadastros ou processos de movimentações simples.
Ex. Enchoice para o cadastro de fornecedores "SA2"

Pode ser utilizada de duas maneiras:

Função Enchoice - mais utilizada. Não retorna um objeto para a função chamadora,

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 150
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Classe MsMGet - classe do objeto Enchoice, permite iniciar diretamente um objeto e
o retorna para a função chamadora.

Enchoice(cAlias, nReg,nOpc,aCra,cLetra,cTexto,aAcho,aPos,aCpos,nModelo,
nColmens, cMensagem, cTudoOk, oWnd, lF3, lMemoria, lColumn, caTela,
lNoFolder, lProperty)
Retorno = Nil

cAlias - que será editada


nReg - Parâmetro não utilizado
nOpc - Número da linha do aRotina que definirá o tipo de edição (Inclusão,
Alteração, Exclusão, Visualização)
aCRA - Parâmetro não utilizado
cLetra - Parâmetro não utilizado
cTexto - Parâmetro não utilizado
aAcho - Vetor com nome dos campos que serão exibidos. Os campos de usuário
sempre serão exibidos se não existir no parâmetro um elemento com a expressão
"NOUSER"
aPos - Vetor com coordenadas para criação da enchoice no formato {<top>, <left>,
<bottom>, <right>}
aCpos - Vetor com nome dos campos que poderão ser editados nModelo Se for
diferente de 1 desabilita execução de gatilhos estrangeiros
nColMens - Parâmetro não utilizado
cMensagem - Parâmetro não utilizado
cTudoOk - Expressão para validação da Enchoice
oWnd Objeto (janela, painel, etc.) onde a enchoice será criada.
lF3 - Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar
variáveis de memória
lMemoria - Indica se a enchoice utilizará variáveis de memória ou os campos da
tabela na edição
lColumn- Indica se a apresentação dos campos será em forma de coluna
caTela - Nome da variável tipo "private" que a enchoice utilizará no lugar da
propriedade aTela
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 151
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
lNoFolder - Indica se a enchoice não irá utilizar as Pastas de Cadastro (SXA)
lProperty - Indica se a enchoice não utilizará as variáveis aTela e aGets,
somente suas propriedades com os mesmos nomes

Ex. Enchoice() para visualizar o cadastro de fornecedores

#include "protheus.ch"

User Function XEnchoi()


Private cCadastro := " Cadastro de Fornecedores"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},{"Visualizar" , "U_MntEnc" , 0, 2},
{"Incluir" , "U_MntEnc" , 0, 3}}
DbSelectArea("SA2")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA2")
Return

User Function MntEnc(cAlias,nReg,nOpc)


Local aCpoEnch := {}
Local aAlter := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 152
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private aTELA[0][0]
Private aGETS[0]
// Calcula as posicoes padrao da tela
Private aSize := MsAdvSize(,.F.,430)
Private aObjects := {}
Private aPosObj := {}
// Devolve o tamanho da tela atualmente no micro do usuario.
Private aSizeAut := MsAdvSize()
Aadd(aObjects, { 100, 70, .T., .T. } )
Aadd(aObjects, { 100, 100, .T., .T. } )

aInfo := { aSizeAut[1], aSizeAut[2], aSizeAut[3], aSizeAut[4], 3, 3 }


aPosObj := MsObjSize(aInfo, aObjects)

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A2_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)
DEFINE MSDIALOG oDlg TITLE cCadastro From aSize[7],0 to aSize[6],aSize[5] of
oMainWnd PIXEL
RegToMemory("SA2", If(nOpc==3,.T.,.F.))
EnChoice( cAliasE, nReg, nOpc,,,,aCpoEnch, aPosObj[1],aAlterEnch , , , , , , , .T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 153
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MSMGET
Classe do objeto Enchoice que inicia um objeto e o retorna para a função
chamadora.
MsMGet():New( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho, aPos, aCpos,
nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3, lMemoria, lColumn,
caTela, lNoFolder, lProperty)

Retorno: oMsMGet - objeto do tipo MsMGet()

cAlias - Tabela que será editada


nReg - Parâmetro não utilizado
nOpc - Número da linha do aRotina que definirá o tipo de edição (Inclusão,
Alteração, Exclusão, Visualização)
aCRA - Parâmetro não utilizado
cLetra - Parâmetro não utilizado
cTexto - Parâmetro não utilizado

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 154
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
aAcho - Vetor com nome dos campos que serão exibidos. Os campos de usuário
sempre serão exibidos se não existir no parâmetro um elemento com a expressão
"NOUSER"
aPos - Vetor com coordenadas para criação da enchoice no formato
{<top>, <left>, <bottom>, <right>}
aCpos - Vetor com nome dos campos que poderão ser editados nModelo Se for
diferente de 1 desabilita execução de gatilhos estrangeiros
nColMens - Parâmetro não utilizado
cMensagem - Parâmetro não utilizado
cTudoOk - Expressão para validação da Enchoice
oWnd Objeto - (janela, painel, etc.) onde a enchoice será criada.
lF3 - Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar
variáveis de memória
lMemoria - Indica se a enchoice utilizará variáveis de memória ou os campos da
tabela na edição
lColumn - Indica se a apresentação dos campos será em forma de coluna
caTela - Nome da variável tipo "private" que a enchoice utilizará no lugar da
propriedade aTela
lNoFolder - Indica se a enchoice não irá utilizar as Pastas de Cadastro (SXA)
lProperty - Indica se a enchoice não utilizará as variáveis aTela e aGets, somente
suas propriedades com os mesmos nomes

Ex. MsMGet() para o cadastro de fornecedores:

#include "protheus.ch"

User Function XMsGet()


Private cCadastro := " Cadastro de Fornecedores"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2},;
{"Incluir" , "U_ModEnc" , 0, 3},;
{"Alterar" , "U_ModEnc" , 0, 4},;
{"Excluir" , "U_ModEnc" , 0, 5}}
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 155
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
DbSelectArea("SA2")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA2")
Return

User Function ModEnc(cAlias,nReg,nOpc)


Local aCpoEnch := {}
Local aAlter := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local lOk := .F.
Local bOk := {|| IF(nOpc == 2 .OR.
OBRIGATORIO(aGets,aTela),(lOk:=.T.,oDlg:End()), )}
Local bCancel := {|| oDlg:End()}
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
// Calcula as posicoes padrao da tela
Private aSize := MsAdvSize(,.F.,430)
Private aObjects := {}
Private aPosObj := {}
// Devolve o tamanho da tela atualmente no micro do usuario.
Private aSizeAut := MsAdvSize()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 156
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Aadd(aObjects, { 100, 70, .T., .T. } )


Aadd(aObjects, { 100, 100, .T., .T. } )

aInfo := { aSizeAut[1], aSizeAut[2], aSizeAut[3], aSizeAut[4], 3, 3 }


aPosObj := MsObjSize(aInfo, aObjects)

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A2_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
IF nOpc == 3 //Incluir
FOR nI:=1 to SA2->(FCOUNT())
M->&(SA2->(FIELDNAME(nI) )) := Criavar(SA2->(FIELDNAME(nI)))
NEXT
ELSEIF nOpc == 2 .OR. nOpc == 4 .OR. nOpc == 5 //outras opções exeto
pesquisar
FOR nI:=1 to SA2->(FCOUNT())
M->&(SA2->(FIELDNAME(nI) )) := SA2->(FIELDGET(nI))
NEXT

IF nOpc == 5
// PODE INCLUIR UM A FUNÇÃO DE VALIDACAO ANTES DE EXCLUIR O
FORNECEDOR
//Return .F. SE A FUNÇÃO FALHAR
ENDIF
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 157
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

IF nOpc == 4
// PODE INCLUIR UM A FUNÇÃO DE VALIDACAO ANTES DE ALTERAR O
FORNECEDOR
//Return .F. SE A FUNCAO FALHAR
ENDIF
ENDIF

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)
RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))
//oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,/*cTexto*/,
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,/*cMensagem*/,
/*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,lNoFolder, lProperty)
oEnch := MsMGet() :New(cAlias, nReg, nOpc, , , , aCpoEnch, PosDlg(oDlg),
aAlterEnch, 3 )

oDlg:lCentered := .T.
ACTIVATE MSDIALOG oDlg ON INIT
ENCHOICEBAR(oDlg,bOk,bCancel)//CENTERED
IF lOk .AND. nOpc <> 2
IF nOpc == 3 .OR. nOpc == 4 //INCLUIR E ALTERAR
BEGIN Transaction
SA2->(DBSETORDER(1))
lInclui := !SA2->(DBSEEK(xFILIAL("SA2")+M->A2_COD))
dbSelectArea("SA2")
SA2->(RECLOCK('SA2',lInclui))
SA2->A2_FILIAL := xFilial("SA2")
FOR nI:=1 to SA2->(FCOUNT())
FIELDPUT(nI,M->&(SA2->(FIELDNAME(nI)) ))
NEXT
SA2->(MSUNLOCK())
END Transaction
ELSEIF nOpc == 5 // Deletar
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 158
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
BEGIN Transaction
SA2->(RECLOCK('SA2',.F.))
SA2->(DBDELETE())
SA2->(MSUNLOCK())
END Transaction
ENDIF
ENDIF
Return

MSGETDB
Grid digitável baseado em uma tabela temporária.
MsGetDB():New(nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk, cTudoOk, IniCpos,
lDelete, aAlter, nFreeze, lEmpty, uPar1, cTRB, cFieldOk, lCondicional, lAppend,
oWnd, lDisparos, uPar2, cDelOk, cSuperDel)
Retorno: oMsGetDB - objeto do tipo MsGetDB()

nTop - Distancia entre a MsGetDB e o extremidade superior do objeto que a


contém.
nLeft - Distancia entre a MsGetDB e o extremidade esquerda do objeto que a
contém.
nBottom - Distancia entre a MsGetDB e o extremidade inferior do objeto
que a contém.
nRight - Distancia entre a MsGetDB e o extremidade direita do objeto que a contém.
nOpc - Posição do elemento do vetor aRotina que a MsGetDB usará como
referência.
cLinhaOk - Função de validação da linha atual do aCols.
cTudoOk - Função de validação de todo aCols da MsGetDB
cIniCpos - Nome dos campos do tipo caracter que utilizarão incremento automático.
Este parâmetro deve ser no formato “+<nome do primeiro campo>+<nome do
segundo campo>+...”.
lDelete - Habilita exclusão de linhas. Valor padrão falso.
aAlter - Vetor contendo os campos que poderão ser alterados.
nFreeze - Indica qual coluna não ficara congelada na exibição.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 159
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
lEmpty - Habilita validação da primeira coluna do aCols, não deixando a mesma
estar vazia Valor padrão falso.
uPar1 - Parâmetro reservado.
cFieldOk - Função executada na validação do campo.
cTRB - Alias da tabela temporária.
lCondicional Reservado
lAppend -Indica se a MsGetDB criará uma linha em branco automaticamente
quando for inclusão.
cDelOk - Função executada para validar a exclusão de uma linha do aCols.
lDisparos - Indica se será utilizado o Dicionário de Dados para consulta padrão,
inicialização padrão e gatilhos.
uPar2 - Parâmetro reservado.
cSuperDel -Função executada quando pressionada as teclas <Ctrl>+<Delete>.
oWnd Objeto no qual a MsGetDB será criada.

Ex. Cadastro customizado de Clientes (ZZ1)

#include "protheus.ch"
User Function XGetDb()
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}
DbSelectArea("SX3")
DbSetOrder(1)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 160
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
DbSeek("ZZ1")
While !Eof() .and. SX3->X3_ARQUIVO == "ZZ1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3-
>X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End
AADD(aStruct,{"FLAG","L",1,0})
cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)
oDlg := MSDIALOG():New(000,000,300,400, "MsGetDB – ZZ1",,,,,,,,,.T.)
oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK",
"+ZZ1_COD", ;
.T.,{"ZZ1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")
oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()
Return
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 161
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

User Function LINHAOK()


MsgInfo("LINHAOK","MsGetDb")
Return .T.

User Function TUDOOK()


MsgInfo("TUDOOK","MsGetDb")
Return .T.

User Function DELOK()


MsgInfo("DELOK","MsGetDb")
Return .T.

User Function SUPERDEL()


MsgInfo("SUPERDEL","MsGetDb")
Return .T.

User Function FIELDOK()


MsgInfo("FIELDOK","MsGetDb")
Return .T.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 162
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MSNEWGETDADOS
Grid digitável baseado em um array.

MsNewGetDados():New(nSuperior, nEsquerda ,nInferior, nDireita,nOpc, cLinOk,


cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk, cSuperDel, cDelOk, oDLG,
aHeader, aCols)
Retorno : objeto do tipo MsNewGetDados()

nSuperior - Distancia entre a MsNewGetDados e o extremidade superior do objeto


que a contem
nEsquerda - Distancia entre a MsNewGetDados e o extremidade esquerda
do objeto que a contem
nInferior - Distancia entre a MsNewGetDados e o extremidade inferior do objeto
que a contem
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 163
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
nDireita - Distancia entre a MsNewGetDados e o extremidade direita do objeto que
a contem
nOpc - Operação em execução: 2- Visualizar, 3- Incluir, 4- Alterar, 5-Excluir
cLinOk - Função executada para validar o contexto da linha atual do aCols
cTudoOk - Função executada para validar o contexto geral da MsNewGetDados
(todo aCols)
cIniCpos - Nome dos campos do tipo caracter que utilizarão incremento automático.
aAlterGDa - Campos alteráveis da GetDados
nFreeze - Campos estáticos na GetDados, partindo sempre da posição inicial da
getdados aonde:
1- Primeiro campo congelado
2- Primeiro e segundo campos congelados...
nMax - Número máximo de linhas permitidas. Valor padrão 99
cFieldOk - Função executada na validação do campo
cSuperDel - Função executada quando pressionada as teclas <Ctrl>+<Delete>
cDelOk - Função executada para validar a exclusão de uma linha do aCols
oDLG - Objeto no qual a MsNewGetDados será criada
aHeader - Array a ser tratado internamente na MsNewGetDados como aHeader
aCols - Array a ser tratado internamente na MsNewGetDados como aCols

Variáveis private:
aRotina - Vetor com as rotinas que serão executadas na MBrowse e que definira o
tipo de operação que esta sendo executada (inclusão, alteração, exclusão,
visualização, pesquisa, ...) no formato:
{cTitulo, cRotina, nOpção, nAcesso}, aonde:
nOpção segue o padrão do ERP Protheus para:
1- Pesquisar
2- Visualizar
3- Incluir
4- Alterar
5- Excluir
aHeader - Vetor com informações das colunas no formato:

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 164
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;cValidação, cReservado,
cTipo, xReservado1, xReservado2}
A tabela temporária utilizada pela MsGetDB deverá ser criada com base no
aHeader mais um último campo tipo lógico que determina se a linha foi excluída.
lRefresh - Variável tipo lógica para uso reservado.

Variáveis públicas:
N - Indica qual a linha posicionada do aCols.

Funções de validação:
cLinhaOk - Função de validação na mudança das linhas da grid. Não pode ser
definida como Static Function.
cTudoOk - Função de validação da confirmação da operação com o grid.
Não pode ser definida como Static Function.

Métodos adicionais:
ForceRefresh() - Atualiza a MsNewGetDados com a tabela e posiciona na primeira
linha.
Hide() - Oculta a MsNewGetDados.
Show() - Mostra a MsNewGetDados.

Ex. Função para cadastro de Pedido de Vendas

#include "protheus.ch"
User Function XNewGetd()
Private aHeader := {}
Private aCols := {}
PRIVATE N := 1
PRIVATE aGEMCVnd := {"",{},{}}
Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 165
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private aSize := MsAdvSize(,.F.,430)
Private aObjects := {}
Private aPosObj := {}
// Devolve o tamanho da tela atualmente no micro do usuario.
Private aSizeAut := MsAdvSize()

Aadd(aObjects, { 100, 70, .T., .T. } )


Aadd(aObjects, { 100, 100, .T., .T. } )

aInfo := { aSizeAut[1], aSizeAut[2], aSizeAut[3], aSizeAut[4], 3, 3 }


aPosObj := MsObjSize(aInfo, aObjects)

DbSelectArea("SC5")
DbSetOrder(1)
MBrowse(6,1,22,75,"SC5")
Return

User Function ModGtd(cAlias,nReg,nOpc)


Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,asize[7]+100,asize[5]}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 166
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Local cAliasGD := "SC6"
Local nSuperior := asize[7] + 110
Local nEsquerda := 000
Local nInferior := aSize[6]
Local nDireita := aSize[5]
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aAlterGDa := {}
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL
.And.X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 167
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterGDa := aClone(aCpoGDa)
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End
If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 168
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
oDlg := MSDIALOG():New(aSize[7],000,aSize[6],aSize[5], cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))
oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,/*cTudoOk*/,
oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)
oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)
oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 169
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 170
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

ENCHOICEBAR
Função para criar uma barra de botões padrão utilizado pelas interfaces de cadastro.
Além disso permite adicionar botões com a utilização do parâmetros aButtons.

EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)

oDlg - Dialog onde irá criar a barra de botões


bOk - Bloco de código a ser executado no botão Ok
bCancel - Bloco de código a ser executado no botão Cancelar
lMsgDel - Exibe dialog para confirmar a exclusão
aButtons - Array contendo botões adicionais.
aArray[n][1] -> Imagem do botão
aArray[n][2] -> bloco de código contendo a ação do botão
aArray[n][3] -> título do botão
nRecno - Registro a ser posicionado após a execução do botão Ok.
cAlias - Alias do registro a ser posicionado após a execução do botão Ok. Se o
parâmetro nRecno for informado, o cAlias passa ser obrigatório.

Ex: Utilização da EnchoiceBar()

#include "protheus.ch"
User Function XEnchBar()
Local oDlg, oBtn
Local aButtons := {}
DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600
PIXEL OF;
oMainWnd
AADD( aButtons, {"USER", {|| U_XUser()}, "Usuario","Usuario",{|| .T.}} )
@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg
ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 171
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
User Function XUser()
MsgInfo("Usuario logado " + Alltrim(cUsuario), "Botao customizado")
Return .T.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 172
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MODELO 1 - AXCADASTRO
Função de cadastro simples, com poucas opções de customizações. não é possível
utilizar o conceito de cabeçalho e itens nessa interface. É composta por um browse
para a apresentação dos dados e possui funções de pesquisa, visualização,
inclusão, alteração e exclusão.
AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)
cAlias - alias do arquivo a ser utilizado
cTitulo - título da janela
cVldExc - função de validação de exclusão
cVldAlt - função de validação de alteração

Ex. Cadastro de Clientes

#include "rwmake.ch"
User Function XCadSA1()
Local cAlias := "SA1"
Local cTitulo := "Cadastro de Clientes"
Local cVldExc := "U_VldSA1"
Local cVldAlt := ".T."
DbSelectArea(cAlias)
DbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return
User Function VldSA1(cAlias,nReg,nOpc)
Local nRet := .T.
Local aArea := GetArea()
SC5->(DbSetOrder(3))
If SC5->(MsSeek (XFilial("SC5") + SA1->A1_COD + SA1->A1_LOJA) )
MsgStop("Cliente nao pode ser excluido, pois tem pedido de
venda","Exclusao de cliente")
lRet:= .F.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 173
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Else
nOpcao := AxExclui(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Exclusão concluída com sucesso!")
Endif
Endif
RestArea(aArea)
Return lRet

MBROWSE
Função de cadastro com mais opções de recursos para manipulação das
informações do que a Axcadastro.
MBrowse(nLin1,nCol1,nLin2,nCol2,cAlias,aFixe,cCpo,nPar08,cfun,nClickDef,aColors
,cTopFun,cBotFun,nPar14,bInitBloc,lNoMnuFilter,lSeeAll,lChgAll)
nLin1 - número da linha inicial
nCol1- número da coluna inicial
nLin2 - número da linha final
nCol2 - número da coluna final
cAlias - nome do arquivo que será visualizado no browse
aFixe - Array bi-dimensional que contém o nome dos campos, ou a definição das
colunas quando a função é utilizada com arquivos de trabalho.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 174
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Utilizando o SX3:
[n] [1] -> descrição do campo
[n] [2] -> nome do campo
Utilizando arquivo de trabalho
[n] [1] -> descrição do campo
[n] [2] -> nome do campo
[n] [3] -> tipo do campo
[n] [4] -> tamanho do campo
[n] [5] -> decimais
[n] [6] -> picture
cCpo - Campo para indicação de status do registro. Quando esse campo é utilizado,
a primeira coluna do browse será um bitmap indicando o status do registro,
conforme as configurações dos parâmetros cCpo, cFun e aColors.
nPar08 - parâmetro reservado.
cFun - Função que deverá retornar um valor lógico para o controle de execução do
status do bitmap. Quando este campo é utilizado o campo cCpo é automaticamente
desconsiderado.
nClickDef - Função que será executada ao ser acionado o duplo click. Por padrão é
executada a rotina de visualização.
aColors - Array bi-dimensional para utilizar diferentes bitmaps de status.
[n] [1] -> função que retornará um valor lógico para a exibição do bitmap
[n] [2] -> nome do bitmap que será exibido quando a função retornar .T.
O nome do bitmap deve ser um resource do repositório.
Quando esse campo é utilizado, os campos cCpo a cFun são
automaticamente desconsiderados.
cTopFun - deve ser utilizado em conjunto com o cBotFun. Função que retornará o
limite superior do filtro. levando em consideração o índice selecionado.
cBotFun - Função que retornará o limite inferior do filtro, levando em consideração o
índice selecionado.
nPar14 - parâmetro reservado
bInitBloc - Bloco de código que será executado no ON INIT da janela do browse.
lNoMnuFilter - Habilita ou não a exibição do filtro no menu. (Somente para
Topconnect)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 175
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
.T. - não exibe o filtro
.F. - padrão - exibe o filtro
lSeeAll -Indica se deve mostrar todas as filiais. Padrão é .F., não mostra todas as
filiais. Ao utilizar os parâmetro cTopfun e cBotFun esse parâmetro e alterado para .F.
automaticamente.
lChgAll - indica se permite alterar registros de outras filiais. Padrão é .F., não
permite alterar registros de outras filiais. Quando alterado para .T. o parâmetro
lSeeAll automaticamente é alterado para .T.

Variáveis privates:
aRotina - array que contém as funções (inclusão, alteração, exclusão etc) a serem
executadas pela mBrowse.
[n] [1] - Título
[n] [2] - Rotina
[n] [3] - Reservado
[n] [4] - 1 ou 2 ou 3 ou 4 ou 5 (1-pesquisa, 2-visualização, 3-inclusão, 4-
alteração, 5-exclusão)

Pode também ser parametrizado com as funções abaixo:


AADD(aRotina, {"Pesquisar" , "AxPesqui", 0 , 1})
AADD(aRotina, {"Visualizar" , "AxVisual" , 0 , 2})
AADD(aRotina, {"Incluir" , "AxInclui" , 0 , 3})
AADD(aRotina, {"Alterar" , "AxAltera" , 0 , 4})
AADD(aRotina, {"Excluir" , "AxDeleta" , 0 , 5})

cCadastro - Título do browse

Informações passadas para as funções doa Rotina:

cAlias - nome do arquivo utilizado pela mBrowse


nReg - número do registro (RECNO) posicionado na mBrowse
nOpc - Posição da opção utilizada na mBrowse de acordo com a ordem do array
aRotina.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 176
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Seguir sempre a ordem abaixo ao montar o array aRotina, pois a posição do


array aRotina define uma variável padrão (nOpc).
1 - Pesquisar
2 - Visualizar
3 - Incluir
4 - Alterar
5 - Excluir

Ex. Cadastro de Bancos

#include "protheus.ch"
User Function XBrwSA6()
Local cAlias := "SA6"
Private cCadastro := "Cadastro de Bancos"
Private aRotina := {}
AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)
Return Nil

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 177
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Ex. Cadastro de Clientes

User Function XBrwSA1()


Local cAlias := "SA1"
Local aCores := {}
Local cFiltra := "A1_FILIAL == '"+xFilial('SA1')+"' .And. A1_EST == 'SP'" // Filtra
clientes no Estado de SP
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}
Private aIndexSA1 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexSA1,@cFiltra) }
AADD(aRotina,{"Pesquisar" ,"PesqBrw" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"U_BAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"U_BDeleta" ,0,5})
AADD(aRotina,{"Legenda" ,"U_BLegenda" ,0,3})

AADD(aCores,{"DDATABASE - A1_ULTCOM <= 30 " ,"BR_VERDE" })

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 178
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
AADD(aCores,{"DDATABASE - A1_ULTCOM > 30 .AND. DDATABASE -
A1_ULTCOM <= 60" ,"BR_AMARELO" })
AADD(aCores,{"DDATABASE - A1_ULTCOM > 60 .AND. DDATABASE -
A1_ULTCOM <= 90" ,"BR_LARANJA" })
AADD(aCores,{"DDATABASE - A1_ULTCOM >= 90 .AND. DDATABASE -
A1_ULTCOM <= 120" ,"BR_PINK" })
AADD(aCores,{"DDATABASE - A1_ULTCOM > 120 .AND. DDATABASE -
A1_ULTCOM <= 365" ,"BR_MARRON" })
AADD(aCores,{"Empty(A1_ULTCOM)" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)
Eval(bFiltraBrw) // GERA O FILTRO
dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)
EndFilBrw(cAlias,aIndexSA1) // LIMPA O FILTRO
Return Nil

User Function BInclui(cAlias,nReg,nOpc)


Local nOpcao := 0
nOpcao := AxInclui(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Inclusão efetuada com sucesso!")
Else
MsgInfo("Inclusão cancelada!")
Endif
Return Nil

User Function BAltera(cAlias,nReg,nOpc)


Local nOpcao := 0
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 179
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

nOpcao := AxAltera(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Alteração efetuada com sucesso!")
Else
MsgInfo("Alteração cancelada!")
Endif
Return Nil

User Function BDeleta(cAlias,nReg,nOpc)


Local nOpcao := 0
If ! Empty(SA1->A1_PRICOM)
MsgInfo("Exclusão cancelada!, ja efetuou compras!")
Else
nOpcao := AxDeleta(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Exclusão efetuada com sucesso!")
EndIf
Endif
Return Nil

User Function BLegenda()


Local aLegenda := {}
AADD(aLegenda,{"BR_VERDE" ,"Compra menor 30 dias" })
AADD(aLegenda,{"BR_AMARELO" ,"Compras entre 30 e 60 dias" })
AADD(aLegenda,{"BR_LARANJA" ,"Compras entre 60 e 90 dias" })
AADD(aLegenda,{"BR_PINK" , "Compras entre 90 e 120 dias" })
AADD(aLegenda,{"BR_MARRON" ,"Compras entre 120 e 365 dias" })
AADD(aLegenda,{"BR_PRETO" ,"Sem compras" })
BrwLegenda(cCadastro, "Legenda", aLegenda)
Return Nil

Note que os clientes são filtrados pelo Estado = "SP"


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 180
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Note que a legenda por data da última compra do cliente

No cadastro de clientes "padrão", todos os clientes são exibidos e não há legendas.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 181
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MODELO 2
É utilizada para manipulação de dados que tratam estrutura de cabeçalho e itens na
mesma tabela.
Pode ser utilizada através da Função Modelo2(), a qual tem como objetivo facilitar a
codificação, mas não trata as regras de visualização, inclusão, exclusão como uma
AxCadastro() ou AxFunction().
Permite utilizar os seguintes componentes visuais:
MsDialog()
Tsay()
Tget()
MsNewGetDados()
EnchoiceBar()
Modelo2([cTitulo],[aCab],[aRoda],[aGrid],[nOpc],[cLinhaOk],[cTudoOk])
cTitulo - título da janela
aCab - array que contém o cabeçalho da Enchoice().
Cab[n][1] (Caractere) := Nome da variável private que será vinculada ao
campo da Enchoice().
aCab[n][2] (Array) := Array com as coordenadas do campo na tela {Linha, Coluna}
aCab[n][3] (Caractere) := Título do campo na tela
aCab[n][4] (Caractere) := Picture de formatação do get() do campo.
aCab[n][5] (Caractere) := Função de validação do get() do campo.
aCab[n][6] (Caractere) := Nome da consulta padrão que será executada
para o campo via tecla F3
aCab[n][7] (Lógico) := Se o campo estará livre para digitação.
aRoda - Array contendo as informações que serão exibidas no cabeçalho na forma
de Enchoice(), no mesmo formato que o aCab.
aGrid - Array contendo as coordenadas da GetDados() na tela. Padrão :=
{44,5,118,315}
nOpc - Opção selecionada na MBrowse, ou que deseje ser passada para controle
da Modelo2, aonde:2 – Visualizar, 3 – Incluir, 4 - Alterar, 5 - Excluir
cLinhaOk - Função para validação da linha na GetDados()
cTudoOk - Função para validação na confirmação da tela de interface da Modelo2().

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 182
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Ex. Cadastro de tabelas SX5 usando a função Modelo2()

#include "protheus.ch"
USER FUNCTION XMOD2()
Local cAlias := "SX5"
Private cCadastro := "Arquivo de Tabelas"
Private aRotina := {}
Private cDelFunc := ".T." // Pode-se utilizar ExecBlock
AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"U_SX5Vis" ,0,2})
AADD(aRotina,{"Incluir" ,"U_SX5Inc" ,0,3})
AADD(aRotina,{"Alterar" ,"U_SX5Alt" ,0,4})
AADD(aRotina,{"Excluir" ,"U_SX5Exc" ,0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return

USER FUNCTION SX5INC(cAlias,nReg,nOpc)


//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no modelo2
- Padrao: {44,5,118,315} // Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts Colunas
: {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F. Cancelou
Local nColuna := 0
// Variaveis para GetDados()
Private aCols := {}
Private aHeader := {}
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 183
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
// Variaveis para campos da Enchoice()
Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)
// Montagem do array de cabeçalho
// AADD(aCab,{"Variável" ,{L,C} ,"Título","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()","","C","","R"})
// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)
// Inicialização do aCols
For nColuna := 1 to Len(aHeader)
If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif
Next nColuna

aCols[1][Len(aHeader)+1] := .F. // Linha não deletada

lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)

IF lRetMod2
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 184
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
For nLinha := 1 to len(aCols)
// Campos de Cabeçalho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Você cancelou a operação","Exclusão Tabela")
ENDIF
Return

USER FUNCTION SX5VIS(cAlias,nReg,nOpc)


Local cTitulo := "Visualizacao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no modelo2
- Padrao: {44,5,118,315}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F. Cancelou
Local nColuna := 0

// Variaveis para GetDados()


Private aCols := {}
Private aHeader := {}
// Variaveis para campos da Enchoice()
Private cX5Filial := SX5->X5_FILIAL //xFilial("SX5")
Private cX5Tabela := SX5->X5_TABELA // SPACE(5)
// Montagem do array de cabeçalho
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 185
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
// AADD(aCab,{"Variável" ,{L,C} ,"Título","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()","","C","","R"})
// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)
// Inicialização do aCols
For nColuna := 1 to Len(aHeader)

If ( aHeader[nColuna][10] != "V")
aCols[Len(aCols)][nColuna] :=
FieldGet(FieldPos(aHeader[nColuna][2]))
Else
aCols[Len(aCols)][nColuna] := CriaVar(aHeader[nColuna][2])
EndIf
Next nColuna
aCols[1][Len(aHeader)+1] := .F. // Linha não deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)
Return

USER FUNCTION SX5EXC(cAlias,nReg,nOpc)


//Local nUsado := 0
Local cTitulo := "Exclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no modelo2
- Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 186
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F. Cancelou
Local nColuna := 0
// Variaveis para GetDados()
Private aCols := {}
Private aHeader := {}
// Variaveis para campos da Enchoice()
Private cX5Filial := SX5->X5_FILIAL //xFilial("SX5")
Private cX5Tabela := SX5->X5_TABELA // SPACE(5)
// Montagem do array de cabeçalho
// AADD(aCab,{"Variável" ,{L,C} ,"Título","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()","","C","","R"})

// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)
// Inicialização do aCols
For nColuna := 1 to Len(aHeader)

If ( aHeader[nColuna][10] != "V")
aCols[Len(aCols)][nColuna] :=
FieldGet(FieldPos(aHeader[nColuna][2]))
Else
aCols[Len(aCols)][nColuna] := CriaVar(aHeader[nColuna][2])
EndIf
Next nColuna
aCols[1][Len(aHeader)+1] := .F. // Linha não deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)
IF lRetMod2
For nLinha := 1 to len(aCols)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 187
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
// Campos de Cabeçalho
Reclock("SX5",.F.)
SX5->(DbDelete())
MsUnLock()
Next nLinha
ELSE
MsgAlert("Você cancelou a operação","Exclusão Tabela")
ENDIF
Return

Ex. Usando o modelo 2 sem utilizar a função Modelo2()

#include "protheus.ch"
User Function xMod2Rec()
Private cCadastro := "Modelo 2 com Recursos"
Private aRotina := {}
AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod2Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod2Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod2Mnt',0,4})

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 188
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
AADD( aRotina, {"Excluir" ,'U_Mod2Mnt',0,5})
dbSelectArea("SX5")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"SX5")
Return

User Function Mod2Inc( cAlias, nReg, nOpc )


Local oDlg
Local oGet

Local oTPanel1
Local oTPAnel2
Local cFilial := SPACE(02)
Private cTabela := SPACE(02)
Private aHeader := {}
Private aCOLS := {}
Private aREG := {}
dbSelectArea( cAlias )
dbSetOrder(1)

Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd
oTPanel1 := TPanel():New(0,0,"",oDlg,NIL,.T. , .F.,NIL,NIL,0,16,.T.,.F.)
oTPanel1:Align := CONTROL_ALIGN_TOP
@ 4, 006 SAY "Filial:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Tabela:" SIZE 70,7 PIXEL OF oTPanel1
@ 3, 026 MSGET cFilial PICTURE "@!" SIZE 030,7 PIXEL OF oTPanel1
@ 3, 080 MSGET cTabela PICTURE "@!" VALID !EMPTY(cTabela) SIZE 78,7
PIXEL OF oTPanel1
oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 189
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",".T.","+X5_CHAVE",.T.)
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT
ACTIVATE MSDIALOG oDlg CENTER ON INIT EnchoiceBar(oDlg,{||
IIF(U_Mod2TOk(), Mod2GrvI(),( oDlg:End(), NIL ) )},{|| oDlg:End() })
Return

User Function Mod2Mnt( cAlias, nReg, nOpc )


Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2
Local cFilial := Space(Len(SX5->X5_FILIAL))
Local cTabela := Space(Len(SX5->X5_TABELA))
Private aHeader := {}
Private aCOLS := {}
Private aREG := {}
dbSelectArea( cAlias )
dbGoTo( nReg )
cFilial := SX5->X5_FILIAL
cTabela := SX5->X5_TABELA
Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd


oTPane1 := TPanel():New(0,0,"",oDlg,NIL,.T.,.F.,NIL,NIL,0,16,.T.,.F.)
oTPane1:Align := CONTROL_ALIGN_TOP
@ 4, 006 SAY "Filial:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Tabela:" SIZE 70,7 PIXEL OF oTPanel1
@ 3, 026 MSGET cFilial When .F. SIZE 30,7 PIXEL OF oTPanel1
@ 3, 080 MSGET cTabela When .F. SIZE 78,7 PIXEL OF oTPanel1
oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 190
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
If nOpc == 4
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",".T.","",.T.)
Else
oGet := MSGetDados():New(0,0,0,0,nOpc)
Endif

oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT
ACTIVATE MSDIALOG oDlg CENTER ON INIT EnchoiceBar(oDlg,{|| ( IIF( nOpc==4,
Mod2GrvA(), IIF( nOpc==5, Mod2GrvE(), oDlg:End() ) ), oDlg:End() ) },{|| oDlg:End()
})

Return

//Montagem do array aHeader


Static Function Mod2aHeader( cAlias )
Local aArea := GetArea()
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek( cAlias )

While !EOF() .And. X3_ARQUIVO == cAlias


If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL .AND. X3_CAMPO <>
"X5_TABELA" .AND. X3_CAMPO <> "X5_FILIAL"
AADD( aHeader, { Trim( X3Titulo()
),X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,X3_USADO,X
3_TIPO,X3_ARQUIVO,X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

//Montagem do array aCols


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 191
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Static Function Mod2aCOLS( cAlias, nReg, nOpc )
Local aArea := GetArea()
Local cChave := SX5->X5_TABELA + SX5->X5_CHAVE
Local nI := 0
If nOpc <> 3
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. SX5->( X5_FILIAL + X5_TABELA + SX5->X5_CHAVE )
== xFilial( cAlias ) + cChave
AADD( aREG, SX5->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 192
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//Efetivação da inclusão
Static Function Mod2GrvI()
Local aArea := GetArea()
Local nI := 0
Local nX := 0
dbSelectArea("SX5")
dbSetOrder(1)
For nI := 1 To Len( aCOLS )
If ! aCOLS[nI,Len(aHeader)+1]
RecLock("SX5",.T.)
SX5->X5_FILIAL := cFilial
SX5->X5_TABELA:= cTabela
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
MsUnLock()
Endif
Next nI
RestArea(aArea)
Return

//Efetivação da alteração
Static Function Mod2GrvA()
Local cTabela := SX5->X5_TABELA
Local aArea := GetArea()
Local nI := 0
Local nX := 0
dbSelectArea("SX5")

For nI := 1 To Len( aREG )


If nI <= Len( aREG )
dbGoTo( aREG[nI] )
RecLock("SX5",.F.)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 193
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
If aCOLS[nI, Len(aHeader)+1]
dbDelete()
Endif
Else
RecLock("SX5",.T.)
Endif
If !aCOLS[nI, Len(aHeader)+1]
SX5->X5_FILIAL := xFilial("SX5")
SX5->X5_TABELA := cTABELA
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
Endif
MsUnLock()
Next nI
RestArea( aArea )
Return

//Efetivação da exclusão
Static Function Mod2GrvE()
Local nI := 0
dbSelectArea("SX5")
For nI := 1 To Len( aCOLS )
dbGoTo(aREG[nI])
RecLock("SX5",.F.)
dbDelete()
MsUnLock()
Next nI
Return

User Function Mod2LOk()


Local lRet := .T.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 194
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Local cMensagem := "Não será permitido linhas sem todas as descricoes
cadastradas"
If !aCOLS[n, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("X5_DESCRI")]) .OR.
Empty(aCOLS[n,GdFieldPos("X5_DESCSPA")]) .OR.
Empty(aCOLS[n,GdFieldPos("X5_DESCENG")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Endif
Endif
Return( lRet )

User Function Mod2TOk()


Local lRet := .T.
Local nI := 0
Local cMensagem := "Não será permitido linhas sem todas as descricoes
cadastradas"
For nI := 1 To Len( aCOLS )
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If !aCOLS[nI, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("X5_DESCRI")]) .OR.
Empty(aCOLS[n,GdFieldPos("X5_DESCSPA")]) .OR.
Empty(aCOLS[n,GdFieldPos("X5_DESCENG")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Exit
Endif
Endif
Next nI
Return( lRet )

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 195
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MODELO 3
É utilizada para manipulação de dados que tratam estrutura de cabeçalho e itens em
tabelas diferentes.
Pode ser utilizada através da Função Modelo3(), a qual tem como objetivo facilitar a
codificação, mas não trata as regras de visualização, inclusão, exclusão como uma
AxCadastro() ou AxFunction().
Permite utilizar os seguintes componentes visuais:
MsDialog()
Enchoice() (a inicialização dos campos utilizados na Enchoice deve ser feito através
da função RegtoMemory())
EnchoiceBar()
MsNewGetDados()

Modelo3([cTitulo],[cAliasE],[cAliasGetD],[aPosE],[cLinOK],[cTudOK],[nOpcE],[nOpcG
],[cFieldOK])
cTitulo - Título da janela
cAliasE - alias da tabela que será utilizado na Enchoice()
cAliasGetD - alias da tabela que será utilizado na GetDados()
aPosE - nome dos campos da Enchoice()
AADD(aCamposE,{nome_campo})
cLinOk - função de validação da GetDados()
cTudOK - função de validação na confirmação da gravação de dados
nOpcE - opção selecionada na Mbrowse, ou que deseja passar como controle para
a Enchoice():
2 - Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
nOpcG - opção selecionada na Mbrowse, ou que deseja passar como controle para
a GetDados():
2 - Visualizar
3 - Incluir
4 - Alterar
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 196
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
5 - Excluir
cFieldOK - validação dos campos da enchoice

Ex. Processo de Pedido de Vendas usando a função Modelo3()

#INCLUDE "protheus.ch"
User Function XMod3()
Private cCadastro := "Modelo 3"
Private aRotina := {}
Private cDelFunc := ".T."
Private cAlias := "ZZ2"
Private bCampo := {|nCPO| Field(nCPO) }
AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})
AADD(aRotina,{ "Visual" ,"U_MntPed" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_MntPed" ,0,3})
AADD(aRotina,{ "Altera" ,"U_MntPed" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_MntPed" ,0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return

User Function MntPed(cAlias,nReg,nOpcx)


Local cTitulo := "Cadastro de Pedidos de Venda"
Local cAliasE := "ZZ2"
Local cAliasG := "ZZ3"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0 , nI := 0, I:= 0

// Opcoes de acesso para a Modelo 3


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 197
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Do Case
Case nOpcx==3
nOpcE:=3
nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4
nOpcE:=3
nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2
nOpcE:=2
nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5
nOpcE:=2
nOpcG:=2 // 5 - "EXCLUIR"
EndCase
// Cria variaveis M->????? da Enchoice
RegToMemory("ZZ2",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
//permite alterar o conteudo das variaveis de memoria

// Cria aHeader e aCols da GetDados


nUsado:=0
dbSelectArea("SX3")
dbSeek("ZZ3")
aHeader:={}
While !Eof().And.(x3_arquivo=="ZZ3")
If Alltrim(x3_campo)=="ZZ3_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 198
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
dbSkip()
End

If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("ZZ3")
dbSetOrder(1)
dbSeek(xFilial()+M->ZZ2_NUM)
While !eof().and.ZZ3_NUM==M->ZZ2_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
If Len(aCols)>0
// Executa a Modelo 3
aCposE := {"ZZ2_NUM","ZZ2_CLIENTE"}
lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk,
cTudOk,nOpcE, nOpcG,cFieldOk)
If lRetMod3

If nOpcX == 3 // Inclusao
RecLock("ZZ2",IIF(inclui,.T.,.F.))
For i := 1 TO FCount()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 199
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
If "FILIAL"$Field(i)
FieldPut(i,xFilial())
Else
FieldPut(i,M->&(EVAL(bCampo,i)))
EndIf
Next i
MsUnLock()
For nx := 1 to len(aCols)
RecLock("ZZ3",.T.)
For ni := 1 to Len(aHeader)
ZZ3->&(aHeader[ni][2]) := aCols[nx][ni]
Next ni
MsUnLock()
Next nx
Endif
Aviso("Pedido","Confirmada operacao!",{"Ok"})
Endif
Endif
Return

Ex. Usando o modelo 3 sem utilizar a função Modelo3()

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 200
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
#Include "Protheus.ch"
User Function xMod3Rec()
Private cCadastro := "Modelo 3 com Recursos"
Private aRotina := {}
Private oCliente
Private oTotal
Private cCliente := ""
Private nTotal := 0
Private bCampo := {|nField| FieldName(nField) }
Private aSize := {}
Private aInfo := {}
Private aObj := {}
Private aPObj := {}
Private aPGet := {}
// Retorna a área útil das janelas Protheus
aSize := MsAdvSize()
// Será utilizado três áreas na janela
// 1ª - Enchoice, sendo 80 pontos pixel
// 2ª - MsGetDados, o que sobrar em pontos pixel é para este objeto
// 3ª - Rodapé que é a própria janela, sendo 15 pontos pixel
AADD( aObj, { 100, 080, .T., .F. })
AADD( aObj, { 100, 100, .T., .T. })
AADD( aObj, { 100, 015, .T., .F. })

aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }


aPObj := MsObjSize( aInfo, aObj )
// dimensões dos objetos MSGET
aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {004, 024, 240, 270} } )
AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod3Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod3Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod3Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod3Mnt',0,5})
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 201
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

dbSelectArea("ZZ3")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"ZZ2")
Return

//Função de Inclusão
User Function Mod3Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
dbSelectArea( cAlias )
dbSetOrder(1)
For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. )
Next nX
Mod3aHeader()
Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM aSize[7],aSize[1] TO
aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])
// Atualização do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL
// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 202
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE "@E 9,999,999,999.99"
SIZE 70,7 OF oDlg PIXEL
oGet :=
MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],nOpc,"U_Mod3LO
k()",".T.","+ZZ3_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,{|| IIF(


Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),NIL) },{||
oDlg:End() })
If nOpcA == 1 .And. nOpc == 3
Mod3Grv( nOpc )
Endif
Return

//Função de Visualização, Alteração e Exclusão


User Function Mod3Mnt( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
Private aREG := {}
dbSelectArea( cAlias )
dbSetOrder(1)
For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := FieldGet( nX )
Next nX
Mod3aHeader()
Mod3aCOLS( nOpc )

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 203
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
DEFINE MSDIALOG oDlg TITLE cCadastro FROM aSize[7],aSize[1] TO
aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])
// Atualização do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL
// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE "@E 9,999,999,999.99"
SIZE 70,7 OF oDlg PIXEL

U_Mod3Cli()
oGet :=
MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],nOpc,"U_Mod3LO
k()",".T.","+ZZ3_ITEM",.T.)
ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,{|| IIF(
Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),NIL ) },{||
oDlg:End() })
If nOpcA == 1 .And. ( nOpc == 4 .Or. nOpc == 5 )
Mod3Grv( nOpc, aREG )
Endif
Return

//Função para montar o vetor aHeader


Static Function Mod3aHeader()
Local aArea := GetArea()
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("ZZ3")
While !EOF() .And. X3_ARQUIVO == "ZZ3"
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 204
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
AADD( aHeader, { Trim( X3Titulo()
),X3_CAMPO,X3_PICTURE,X3_TAMANHO,X3_DECIMAL,X3_VALID,X3_USADO,X
3_TIPO,X3_ARQUIVO,X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

//Função para montar o vetor aCols


Static Function Mod3aCOLS( nOpc )
Local aArea := GetArea()
Local cChave := ""
Local cAlias := "ZZ3"
Local nI := 0

If nOpc <> 3
cChave := ZZ2->ZZ2_NUM
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. ZZ3->( ZZ3_FILIAL + ZZ2_NUM ) == xFilial( cAlias ) +
cChave
AADD( aREG, ZZ3->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 205
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZZ3_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

//Função para atribuir o nome do cliente a variável


User Function Mod3Cli()
cCliente := Posicione( "SA1", 1, xFilial("ZZ2") + M->(ZZ2_CLIENTE +
ZZ2_LOJA),"A1_NREDUZ" )
oCliente:Refresh()
Return(.T.)

User Function Mod3LOk()


Local nI := 0
nTotal := 0
For nI := 1 To Len( aCOLS )
If aCOLS[nI,Len(aHeader)+1]
Loop
Endif
nTotal+=Round(aCOLS[nI,GdFieldPos("ZZ3_QTDVEN")]*aCOLS[nI,GdField
Pos("ZZ3_PRCVEN")],2)
Next nI
oTotal:Refresh()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 206
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Return(.T.)

//Função para validar se todas as linhas estão preenchidas


Static Function Mod3TOk()
Local nI := 0
Local lRet := .T.
For nI := 1 To Len(aCOLS)
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If Empty(aCOLS[nI,GdFieldPos("ZZ3_PRODUT")]) .And. lRet
MsgAlert("Campo produto invalido",cCadastro)
lRet := .F.
exit
Endif
If Empty(aCOLS[nI,GdFieldPos("ZZ3_QTDVEN")]) .And. lRet
MsgAlert("Campo quantidade invalido",cCadastro)
lRet := .F.
exit
Endif
If Empty(aCOLS[nI,GdFieldPos("ZZ3_PRCVEN")]) .And. lRet
MsgAlert("Campo preco unitario invalido",cCadastro)
lRet := .F.
exit
Endif

Next i
Return( lRet )

Static Function Mod3Grv( nOpc, aAltera )


Local nX := 0
Local nI := 0
// Se for inclusão
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 207
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
If nOpc == 3
dbSelectArea("ZZ3")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If !aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( "ZZ3", .T. )
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[nI, 2] )
),aCOLS[nX,nI] )
Next nI
ZZ3->ZZ3_FILIAL := xFilial("ZZ3")
ZZ3->ZZ3_NUM := M->ZZ2_NUM
MsUnLock()
Endif
Next nX
// Grava o Cabeçalho
dbSelectArea( "ZZ2" )
RecLock( "ZZ2", .T. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial( "ZZ2" ) )
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next nX
MsUnLock()
Endif
// Se for alteração
If nOpc == 4
dbSelectArea("ZZ3")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If nX <= Len( aREG )
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 208
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
dbGoto( aREG[nX] )
RecLock("ZZ3",.F.)
If aCOLS[ nX, Len( aHeader ) + 1 ]
dbDelete()
Endif
Else
If !aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( "ZZ3", .T. )
Endif
Endif
If !aCOLS[ nX, Len(aHeader)+1 ]
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),aCOLS[
nX, nI ] )
Next nI
ZZ3->ZZ3_FILIAL := xFilial("ZZ3")
ZZ3->ZZ3_NUM := M->ZZ2_NUM
Endif
MsUnLock()
Next nX
// Grava o Cabeçalho
dbSelectArea("ZZ2")
RecLock( "ZZ2", .F. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial("ZZ2"))
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next
MsUnLock()
Endif

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 209
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
// Se for exclusão
If nOpc == 5
dbSelectArea("ZZ3")
dbSetOrder(1)
dbSeek(xFilial("ZZ3") + M->ZZ2_NUM)
While !EOF() .And. ZZ3->(ZZ3_FILIAL + ZZ3_NUM) == xFilial("ZZ3") + M-
>ZZ2_NUM
RecLock("ZZ3")
dbDelete()
MsUnLock()
dbSkip()
End
// Deleta o Cabeçalho
dbSelectArea("ZZ2")
RecLock("ZZ2",.F.)
dbDelete()
MsUnLock()
Endif
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 210
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 211
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

EXERCÍCIO 1

Monte o cadastro customizado de Clientes (ZZ1) , utilizando a AxCadastro().

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 212
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

EXERCÍCIO 2

Qual a diferença entre as funções Modelo2() e Modelo3() ?

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 213
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 3

Crie um programa para fazer o processo de manutenção do pedido de


vendas customizado (ZZ2 e ZZ3), prevendo todas as situações:
a) inclusão do pedido de vendas
b) alteração do pedido de vendas
d) Confirmar a exclusão do pedido de vendas
e) visualização do pedido de vendas.
f) Filtrar os pedidos de moeda 1 (REAL)
g) Criar uma legenda para pedidos de venda com condição da pagamento a
vista.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 214
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

IMPCADAST
Função para impressão simples de cadastros com opção de parâmetros "de/para".

ImpCadast(cCab1, cCab2, cCab3, cNomeProg, cTam, nLimite, cAlias)

cCab1 - Primeira linha do cabeçalho


cCab2 - Segunda linha do cabeçalho
cCab3 - Terceira linha do cabeçalho
cNomeProg - Nome do programa
cTam - Tamanho do relatório nos formatos “P”, “M” e “G”.
nLimite - Número de colunas do relatório, seguindo o formato especificado no
tamanho, aonde: “P”- 80 colunas, “M”- 132 colunas, “G”- 220 colunas
cAlias - Alias do arquivo de cadastro que será impresso

Retorno: Nenhum .

Roda(uPar01,uPar02,cSize)
uPar01 - nao utilizado
uPar02- nao utilizado
cSize- tamanho do relatorio P, M ou G

Ms_Flush()
Envia o spool de impressão para o dispositivo especificado com a utilização das
funções AVALIMP() ou SETPRINT()

Ex: Impressão do cadastro de bancos.

#Include "PROTHEUS.CH"
User Function XImpCad()

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 215
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Local cReport := "XImpCad" //Nome do Programa
Local cAlias := "SA6" //Alias da tabela
Local cTitle := "Listagem de Bancos"
Local cDesc := "Este relatório apresenta uma relação dos Bancos
cadastrados."
Local lInd := .T. //Retorna Indice SIX

Imprime()

Return

Static Function imprime()


LOCAL nconta,cabec1,cabec2,cabec3,nPos,wnrel
LOCAL tamanho:="M"
LOCAL limite :=132
LOCAL titulo:="Relacao de Bancos"
LOCAL cDesc1:="Emissao do Cadastro de Bancos"
LOCAL cDesc2:="Ira imprimir os dados dos bancos de acordo"
LOCAL cDesc3:="de acordo com a configuracao do usuario."

PRIVATE aReturn := { "Zebrado", 1,"Administracao", 2, 2, 1, "" ,1 }


//"Zebrado"###"Administracao"
PRIVATE aLinha:= { }
PRIVATE nomeprog:="XIMPCAD",nLastKey := 0

nconta := 0
cabec1 := "RELACAO DECADASTRO DE BANCOS"
cabec2 := " "
cabec3 := " "
cString :="SA6"
aOrd := {" Por Codigo "," Alfabetica "}
wnrel :="XIMPCAD"
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 216
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Private AParDef := {}
wnrel:=SetPrint(cString,wnrel,"ParamDef(cAlias)",@Titulo,cDesc1,cDesc2,cDesc3,.T
.,aOrd,,Tamanho)

If nLastKey = 27
dbClearFilter()
Return
Endif

SetDefault(aReturn,cString)

If nLastKey = 27
dbClearFilter()
Return
Endif

RptStatus({|lEnd|
XImp(@lEnd,Cabec1,Cabec2,Cabec3,limite,tamanho,nconta,wnrel)},Titulo)

Return

Static Function XImp(lEnd,Cabec1,Cabec2,Cabec3,limite,tamanho,nconta,wnrel)


LOCAL cbtxt := SPACE(10)
li :=80
m_pag :=1

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄ¿
//³ Monta Array para identificacao dos campos dos arquivos ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÙ
if Len(aReturn) > 8
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 217
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Mont_Dic(cString)
else
Mont_Array(cString)
endif

ImpCadast(Cabec1,Cabec2,Cabec3,NomeProg,Tamanho,Limite,cString,@lEnd)

IF li != 80
roda(nconta,cbtxt,"M")
EndIF

dbSelectArea("SA6")
dbClearFilter()
dbSetOrder(1)

If aReturn[5] = 1
Set Printer TO
dbCommitAll()
ourspool(wnrel)
Endif

MS_FLUSH()

Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 218
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 219
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

SETPRINT
Função para gerar relatórios em formato não gráficos. Este tipo de relatório é
caracterizado por um formato de impressão tipo PostScript®, e permite a geração de
um arquivo em formato texto (.txt), com uma extensão própria da aplicação ERP
(.##R).

PostScript® - é uma linguagem de programação especializada para


visualização de informações, ou uma linguagem de descrição de páginas,
originalmente criada para impressão e posteriormente modificada para o uso com
monitores (em tela).

Através da SetPrint() é criada uma uma interface padrão de impressão para que o
usuário possa fazer a configuração das opções do relatório.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 220
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
SetPrint ( < cAlias > , < cProgram > , [ cPergunte ] , [ cTitle ] , [cDesc1 ] , [ cDesc2 ] ,
[ cDesc3 ] , [ lDic ] , [ aOrd ] , [ lCompres ] , [cSize ] , [ uParm12 ] , [ lFilter ] , [lCrystal
] , [ cNameDrv ] , [uParm16 ] , [ lServer ] , [ cPortPrint ] )

cAlias - Alias do arquivo a ser impresso.


cProgram - Nome do arquivo a ser gerado em disco.
cPergunte - Grupo de perguntas cadastrado no dicionário SX1.
cTitle - Título do relatório.
cDesc1 - Descrição do relatório.
cDesc2 - Continuação da descrição do relatório.
cDesc3 - Continuação da descrição do relatório.
lDic - Utilizado na impressão de cadastro genérico permite a escolha dos campos a
serem impressos. Se o parametro cAlias não for informado o valor padrão assumido
será .F.
aOrd - Ordem(s) de impressão.
lCompres - Se verdadeiro (.T.) permite escolher o formato da impressão, o valor
padrão assumido será .T.
cSize -Tamanho do relatório "P","M" ou "G".
uParm12 Parâmetro reservado
lFilter - Se verdadeiro (.T.) permite a utilização do assistente de filtro, o valor padrão
assumido será .T.
lCrystal - Se verdadeiro (.T.) permite integração com Crystal Report, o valor padrão
assumido será .F.
cNameDrv - Nome de um driver de impressão.
uParm16 -Parâmetro reservado.
lServer - Se verdadeiro (.T.) força impressão no servidor.
cPortPrint - Define uma porta de impressão padrão.

Retorno: Nome do Relatório (Caracter)

Variáveis privates:
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 221
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
m_pag - numérica - utilizada para controlar o número de páginas.
aReturn - array - contém as opções de impressão.

aReturn[1] Caracter, tipo do formulário


aReturn[2] Numérico, opção de margem
aReturn[3] Caracter, destinatário
aReturn[4] Numérico, formato da impressão
aReturn[5] Numérico, dispositivo de impressão
aReturn[6] Caracter, driver do dispositivo de impressão
aReturn[7] Caracter, filtro definido pelo usuário
aReturn[8] Numérico, ordem
aReturn[x] A partir a posição [9] devem ser informados os nomes dos
campos que devem ser considerados no processamento, definidos pelo uso da
opção Dicionário da SetPrint().

Setdefault(< aReturn > , < cAlias > , [ uParm3 ] , [ uParm4 ] ,[cSize] , [ nFormat ])
Configura o ambiente de impressão de acordo com o array aReturn
aReturn - array com as wconfigurações de impressão
cAlias - apelido do arquivo de impressão
uParm3 - reservado
uParm4 - reservado
cSize - tamanho da página a ser impressa: "P", "M" ou "G"
nFormat - orientação da página: 1 - retrato ou 2 - paisagem.

Cabec (cTitulo, cCabec1, cCabec2,cNomeProg, nTamanho, nCompres,


aCustomtext, lPerg, cLogo)
Contém as configurações do relatório e imprime o cabeçalho do mesmo.

cTitulo - Título do relatório


cCabec1 - cabeçalho da primeira linha do relatório
cCabec2 - cabeçalho da segunda linha do relatório
cNomeProg - Nome do programa de impressão do relatório.
nTamanho - número de colunas do relatório (80, 132 ou 220)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 222
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
nCompress - Tipo de comporessão do relatório: 15 - comprimida ou 18 -normal
aCustomText - Texto específico para o cabeçalho, substituindo a estrutura padrão
do sistema.
lPerg - Sumprime a impressão das perguntas do relatório ignorando o parâmetro
MV_IMPSX1, mesmo que o mesmo esteja com “S”
cLogo - Redefine o bitmap que será impresso no relatório, não necessitando que
ele esteja no formato padrão da Microsiga: "LGRL" + SM0->M0_CODIGO +
SM0->M0_CODFIL+".BMP"

Retorno : nenhum
OurSpoos(cArquivo)
Permite a visualização do arquivo de impressao do Protheus (extensão "##R").
cArquivo - nome do arquivo a ser visualizado.

Ex: uso da setprint() para impressão de Código, loja, nome, tipo e data da última
compra do cliente. Opção do usuário escolher a ordem de impressão, em que
dispositivo quer imprimir (disco, tela, e-mail). Opção para gerar arquivo XLS. e abrir
após geração do relatório.

#include "protheus.ch"
User Function XSetPr()
Local cDesc1 := "Este relatório imprimira o cadastro de clientes conforme"
Local cDesc2 := "parâmetros recebidos. Será gerado um arquivo no diretório "
Local cDesc3 := "Spool - CLIENTE_????.XLS, onde ???? e o nome do usuário."
Private cString := "SA1"
Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administração",2,2,1,"",1 }
Private wnrel := "CLIENTE"
Private NomeProg := "CLIENTE"
Private nLastKey := 0
Private Limite := 132
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 223
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private Titulo := "Clientes - ultimas compras "
Private cPerg := "CLIENTE"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
// 1 2 3
//123456789012345678901234567890123456789
Private Cabec1 := "CLIENTE LOJA TIPO ULT.COMPRA NOME"
Private Cabec2 := ""
/*
+----------------------
| Parâmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulário
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatário
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mídia 1-Disco 2=Impressora
aReturn[6] – Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expressão do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/
AADD( aOrd, "Cliente" )
AADD( aOrd, "Nome" )

//Parâmetros de perguntas para o relatório


//+-------------------------------------------------------------+
//| mv_par01 - Cliente de ? 999999 |
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 224
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//| mv_par02 - Cliente ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Ult. Compra de ? 99/99/99 |
//| mv_par06 - Ult. Compra ate ? 99/99/99 |
//| mv_par07 - Abrir planilha excel com o relatorio gerado.

//+-------------------------------------------------------------+
CriaSx1()
//+-------------------------------------------------
//| Disponibiliza para usuário digitar os parâmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,.F. somente carrega as
variáveis
//+---------------------------------------------------
//| Solicita ao usuário a parametrização do relatório.
//+---------------------------------------------------
wnrel := SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F.,
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,cSize,a
Filter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif
//+------------------------------------------------------------------
//| Estabelece os padrões para impressão, conforme escolha do usuário
//+------------------------------------------------------------------
SetDefault(aReturn,cString)
//+-------------------------------------
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 225
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//| Verificar se será reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif
//+-----------------------------------
//| Chama função que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo
dados,aguarde...", .T. )
Return

Static Function ImpRel(lEnd)


Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cPath := AllTrim(GetTempPath())
Local cArqExcel := ""
Local cAliasImp
Local oExcelApp
Titulo += aOrd[aReturn[8]]
#IFNDEF TOP
cAliasImp := "SA1"
cFiltro := "A1_FILIAL == '"+xFilial("SA1")+"' "
cFiltro += ".And. A1_CLIENTE >= '"+mv_par01+"' "
cFiltro += ".And. A1_CLIENTE <= '"+mv_par02+"' "
cFiltro += ".And. A1_TIPO >= '"+mv_par03+"' "
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 226
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cFiltro += ".And. A1_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(A1_ULTCOM) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(A1_ULTCOM) <= '"+Dtos(mv_par06)+"' "
If aReturn[8] == 1 //Codigo
cIndice := "A1_COD + A1_LOJA "
Else aReturn[8] == 2 //Nome
cIndice := "A1_NOME + A1 _LOJA"
Endif
cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()
cQuery := "SELECT "
cQuery += "A1_FILIAL, A1_COD, A1_LOJA , A1_NOME, A1_ULTCOM,
A1_TIPO "
cQuery += "FROM "+RetSqlName("SA1")+" "
cQuery += "WHERE A1_FILIAL = '"+xFilial("SA1")+"' "
cQuery += "AND A1_COD >= '"+mv_par01+"' "
cQuery += "AND A1_COD <= '"+mv_par02+"' "
cQuery += "AND A1_TIPO >= '"+mv_par03+"' "
cQuery += "AND A1_TIPO <= '"+mv_par04+"' "
cQuery += "AND A1_ULTCOM >= '"+Dtos(mv_par05)+"' "
cQuery += "AND A1_ULTCOM <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "
If aReturn[8] == 1 //Codigo
cQuery += "A1_COD + A1_LOJA"
Elseif aReturn[8] == 2 //Nome
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 227
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cQuery += "A1_NOME + A1 _LOJA"
Endif
dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )
dbSelectArea(cAliasImp)
#ENDIF
dbGoTop()
SetRegua(0)
// IMPRESSAO
AADD( aCol, 001 ) //Codigo
AADD( aCol, 009 ) //Loja
AADD( aCol, 014 ) //tipo
AADD( aCol, 019 ) //Ult. compra
AADD( aCol, 031 ) //Nome

While !Eof() .And. !lEnd


If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif
@ Li, aCol[1] PSay (cAliasImp)->A1_COD
@ Li, aCol[2] PSay (cAliasImp)->A1_LOJA
@ Li, aCol[3] PSay (cAliasImp)->A1_TIPO
#IFNDEF TOP
@ Li, aCol[4] PSay DTOC((cAliasImp)->A1_ULTCOM)
#else
@ Li, aCol[4] PSay (cAliasImp)->A1_ULTCOM
#endif
@ Li, aCol[5] PSay (cAliasImp)->A1_NOME
Li ++
(cAliasImp)->(DBSKIP())
End
If lEnd
@ Li, aCol[1] PSay cCancel
Return
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 228
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Endif

If Li <> 80
Roda(cbCont,cbTxt,Tamanho)
Endif
//+----------------------------------------------------------------------
//| Gera arquivo do tipo .DBF com extensão .XLS p/ usuário abrir no Excel
//+----------------------------------------------------------------------
cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS"
Copy To &cArqExcel
#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf
//+------------------------
//| Abrir planilha MS-Excel
//+------------------------
If mv_par07 == 1
CpyS2T( cArqExcel , cPath, .T. )
If ! ApOleClient("MsExcel")
MsgAlert("MsExcel não instalado")
Return
Endif
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 229
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( cPath +
NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" )
oExcelApp:SetVisible(.T.)
Endif
Ms_Flush()
Return

Static Function CriaSx1()


Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}
/******
Parâmetros da função padrão
---------------------------
PutSX1(cGrupo,cOrdem,cPergunt,cPerSpa,cPerEng,cVar,cTipo,nTamanho,nDecima
l,nPresel,cGSC,cValid,cF3,cGrpSxg,cPyme,cVar01,cDef01,cDefSpa1,cDefEng1,cCn
t01,cDef02,cDefSpa2,cDefEng2,
cDef03,cDefSpa3,cDefEng3,
cDef04,cDefSpa4,cDefEng4,
cDef05,cDefSpa5,cDefEng5,
aHelpPor,aHelpEng,aHelpSpa,
cHelp)
Característica do vetor p/ utilização da função SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 230
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
[n,6] --> validação
[n,7] --> F3
[n,8] --> definição 1
[n,9] --> definição 2
[n,10] -> definição 3
[n,11] -> definição 4
[n,12] -> definição 5
***/
AADD(aP,{"Cliente de","C",6,0,"G","","SA1","" ,"" ,"","",""})
AADD(aP,{"Cliente ate","C",6,0,"G","(mv_par02>=mv_par01)","SA1","" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","" ,"" ,"" ,"","",""})
AADD(aP,{"Ult. Compra de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Ult. Compra ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,"" ,"" ,"","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","","Sim","Não","","",""})
AADD(aHelp,{"Código do cliente - inicial.","inicial."})
AADD(aHelp,{"Código do cliente - final.","final."})
AADD(aHelp,{"Tipo de cliente."})
AADD(aHelp,{"Tipo de cliente final."})
AADD(aHelp,{"Digite a data da ultima compra inicial."})
AADD(aHelp,{"Digite a data do ultima compra final."})
AADD(aHelp,{"Abrir planilha Excel com o relatorio gerado ou somente gravar o
arquivo excel."})

For i:=1 To Len(aP)


cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))
PutSx1(cPerg,cSeq,aP[i,1],aP[i,1],aP[i,1],cMvCh,aP[i,2],aP[i,3],aP[i,4],0,aP[i,5
],aP[i,6],aP[i,7],"","",cMvPar,aP[i,8],aP[i,8],aP[i,8],"",aP[i,9],aP[i,9],aP[i,9],aP[i,10],aP[i
,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 231
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
aHelp[i],;
{},;
{},;
"")
Next i
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 232
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 233
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Caso o usuário optar em abrir o Excel, o mesmo será aberto, caso contrário o
mesmo será gravado na pasta de impressão de relatórios.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 234
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 235
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 236
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FUNÇÕES DE VALIDAÇÃO
EXISTCHAV(CALIAS, CCONTEUDO, NINDICE)

cAlias - Alias do arquivo a ser pesquisado


cConteudo - conteúdo a ser pesquisado
nIndice - número do índice a a ser pesquisado.

Retorna .T. ou .F. se o conteúdo especificado existe no alias especificado. Caso


exista será exibido um help de sistema com um aviso informando da ocorrência.
Função utilizada normalmente para verificar se um determinado código já existe no
cadastro

EXISTCPO(CALIAS, CCONTEUDO, NINDICE)

cAlias - Alias do arquivo a ser pesquisado


cConteudo - conteúdo a ser pesquisado
nIndice - número do índice a a ser pesquisado.

Retorna .T. ou .F. se o conteúdo especificado NÃO existe no alias especificado.


Caso NÃO exista será exibido um help de sistema com um aviso informando da
ocorrência.
Função utilizada normalmente para verificar se um determinado código existe
cadastro.

NAOVAZIO()
Retorna .T. ou .F. se o conteúdo do campo posicionado no momento não está vazio.

PERTENCE(CSTRING)
Retorna .T. ou .F. se o conteúdo digitado para o campo está contido na string
definida como parâmetro da função.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 237
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
NEGATIVO()
Retorna .T. ou .F. se o conteúdo digitado para o campo é negativo.

POSITIVO()
Retorna .T. ou .F. se o conteúdo digitado para o campo é positivo.

TEXTO()
Retorna .T. ou .F. se o conteúdo digitado para o campo contém apenas números ou
alfanuméricos.

VAZIO()
Retorna .T. ou .F. se o conteúdo do campo posicionado no momento está vazio.

POSICIONE()
Permite o retorno do conteúdo de um campo de um registro de uma tabela
especificado através de uma chave de busca.

Posicione(cAlias, nOrdem, cChave, cCampo)

cAlias - Alias do arquivo a ser pesquisado


nOrdem - número do índice a a ser pesquisado.
cChave - chave a ser pesquisada
cCampo - campo a ser retornado

FUNÇÕES DE CONVERSÃO DE DADOS


CTOD(CDATA)
Converte uma data em formato caracter ("dd/mm/aaaa") em formato data.
cData - campo caracter contendo a data a ser convertida.

Ex: Aceitar uma data no máximo 90 dias menor que a data do sistema.

#Include "Protheus.ch"
// exemplo para aceitar no maximo uma data 90 dias menor que a data do sistema.
User Function xCtod()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 238
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Local cData := "31/12/2010"
Local dDtLim := dDatabase - 90
If CtoD(cData) < dDtLim
MsgStop("Data maior que 90 dias. Nao permitido","Teste CtoD")
Else
MsgInfo("Data OK","Teste CtoD" )
Endif
Return

DTOC(DDATA)
Converte uma data em formato data (dd/mm/aaaa) em formato caracter.
dData - campo data contendo a data a ser convertida.

Um campo data sempre tem que ser convertido antes de ser mostrado em tela
ou impresso. Para isso utiliza-se a função Dtoc().

Ex: Converter a data do sistema em caracter.

#Include "Protheus.ch"
User Function xDtoC()
MsgInfo(DtoC(dDatabase),"Teste DtoC" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 239
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

DTOS(DDATA)
Converte uma data em formato data (dd/mm/aaaa) em formato caracter, porém no
formato "AAAAMMDD"
dData - campo data contendo a data a ser convertida.

Um campo data em SQL sempre retorna o formato AAAMMDD quando


executada uma quey no Protheus.

Ex: Converter a data do sistema em caracter no formato AAAAMMDD.

#Include "Protheus.ch"
User Function xDtoS()
MsgInfo(DtoS(dDatabase),"Teste DtoS" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 240
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

STOD(CDATA)
Converte uma data em formato caracter ("AAAAMMDD") em formato data.
cData - campo caracter contendo a data a ser convertida.

Ex: Converter a data "20110503" em data.

#Include "Protheus.ch"
User Function xStoD()
Local dData := StoD("20110503")
MsgInfo("A data antiga era 20110503, a nova data e " + DtoC(dData),"Teste StoD" )

Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 241
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

STR(NVALOR)
Converte um número em um caracter colocando espaços à direita
nValor - número a ser convertido.

Um campo numérico sempre tem que ser convertido antes de ser mostrado em
tela ou impresso.

Ex. Mostrar em tela o valor 100.24

#Include "Protheus.ch"
User Function xStr()
Local nValor := 100.24
MsgInfo("O valor e " + Str(nValor),"Teste Str" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 242
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

STRZERO(NVALOR,NTAMANHO)
Converte um número em um caracter colocando zeros à esquerda com um tamanho
específico.
nValor - número a ser convertido.
nTamanho - tamanho do campo.

Ex: Mostrar o número 90 com o formato "000090"

#Include "Protheus.ch"
User Function xStrZero()
Local nValor := 90
MsgInfo("O valor e " + StrZero(nValor,6),"Teste StrZero" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 243
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

´
VAL(CVALOR)
Converte uma informação em caracter em um valor numérico

cValor - informação em caracter a ser convertida em valor numérico.

Ex: Calcular "102.32" X 2

#Include "Protheus.ch"
User Function xVal()
Local cValor := "102.32"
Local nValor := Val(cValor) * 2
MsgInfo("O valor e " + Str(nValor),"Teste Val" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 244
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FUNÇÕES DE MANIPULAÇÃO DE STRING´S:


ALLTRIM (CSTRING)
Retira os espaços à direita e à esquerda de uma string.

cString - string a retirar os espaços

Ex: Retirar os espaços de " NFT "

#Include "Protheus.ch"
User Function xAlltrim()
Local cValor := " NFT "
Local cVal2 := Alltrim(cValor)
MsgInfo("O valor inicial e " + cValor + ", o atual e " + cVal2 ,"Teste Alltrim" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 245
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

LTRIM(CSTRING)
Retira os espaços à esquerda de uma string.

cString - string a retirar os espaços

Ex: Retirar os espaços à esquerda de " NFT "

#Include "Protheus.ch"
User Function xLtrim()
Local cValor := " NFT "
Local cVal2 := Ltrim(cValor)
MsgInfo("O valor inicial e " + cValor + ", o atual e " + cVal2 ,"Teste Ltrim" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 246
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

RTRIM(CSTRING)
Retira os espaços à direita de uma string.

cString - string a retirar os espaços

Ex: Retirar os espaços à direita de " NFT "

#Include "Protheus.ch"
User Function xRtrim()
Local cValor := " NFT "
Local cVal2 := Rtrim(cValor)
MsgInfo("O valor inicial e " + cValor + ", o atual e " + cVal2 ,"Teste Rtrim" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 247
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

REPLICATE(CCARACTER,CNUM)
Replica um caracter de acordo com o número especificado no parâmetro

cCaracter - Caracter as ser replicado


cNum - número de vezes a replicar o caracter

Ex: Montar a string "***** NFT *****"

#Include "Protheus.ch"
User Function xReplicate()
Local cVal1 := " NFT "
Local cVal2 := Replicate("*",5)
Local cVal3 := cVal2 + cVal1 + cVal2
MsgInfo( cVal3 ,"Teste Replicate" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 248
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

SUBSTR(CSTRING,NPOS1,NCARACTERES)
Retorna parte de uma string de acordo com a posição inicial do parâmetro e a
quantidade de caracteres indicada. Quando omitido o parâmetro de quantidade de
caracteres, é assumido até a posição final da string.

cString - String que será


cPos1 - posição inicial da string que se deseja extrair
nCaracteres - quantidades de caracteres a serem extraídos a partir da posição
inicial.

Ex: Extrair "FORMACAO" da string "NUCLEO DE FORMACAO TECNOLOGICA"

#Include "Protheus.ch"
User Function xSubstr()
Local cString := "NUCLEO DE FORMACAO TECNOLOGICA"
Local cVal2 := Substr(cString,11,8)
MsgInfo( cVal2 ,"Teste Substr" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 249
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

TRANSFORM(CEXP,CPICTURE)
Formata campos numéricos, datas, strings com pictures específicadas.

cExp - valor a ser formatado


cPicture - mascará de formatação. Utiliza as mesmas formatações da cláusula
Picture.

Ex: Mostrar o valor 1250.67 no formato 1.250,67

#Include "Protheus.ch"
User Function xTransform()
Local nValor := 1250.67
MsgInfo( Transform(nValor,"@E 9,999.99") ,"Teste Transform" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 250
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

AT(CCARACTER, CSTRING)
Verifica se um caracter existe em uma string, se exitir retorna a posição do mesmo,
do contrário retorna zero.
cCaracter - caracter a ser procurado
cString - string na qual o caracter será procurado

Ex: Buscar o caracter "F" na string " NUCLEO DE FORMACAO TECNOLOGICA"

#Include "Protheus.ch"
User Function xAt()
Local cValor := "NUCLEO DE FORMACAO TECNOLOGICA"
Local nAt := At("F",cValor)
MsgInfo("A posicao e " + Str(nAt),"Teste AT" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 251
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

LEN(CSTRING)
Retorna o tamanho da string.

cString - string a ser verificado o tamanho. Pode ser um campo ou array.

Ex: Verificar o tamanho da string " NUCLEO DE FORMACAO TECNOLOGICA"

#Include "Protheus.ch"
User Function xLen()
Local cValor := "NUCLEO DE FORMACAO TECNOLOGICA"
Local nLen := Len(cValor)
MsgInfo("O tamanho e " + Alltrim(Str(nLen)),"Teste LEN" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 252
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FUNÇÕES DE MANIPULAÇÃO VARIÁVEIS NUMÉRICAS:

INT(NVALOR)
Retorna o valor inteiro de um número

nValor - valor a ser retirada a parte inteira

Ex: Retornar o valor inteiro de 12.44

#Include "Protheus.ch"
User Function xInt()
Local nValor := int(12.44)
MsgInfo( "O inteiro e " + alltrim(STR(nValor)) ,"Teste Int" )
Return

NOROUND(NVALOR, NCASAS)
Retorna o valor truncando as casas decimais de acordo com o número de casas
decimais definida no parâmetro

nValor - valor a ser truncada a casa decimal


nCasas - número de casas decimais

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 253
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Ex: Retornar o valor truncado de 12.4489 em duas casas decimais

#Include "Protheus.ch"
User Function xNoround()
Local nValor := NoRound(12.4489,2)
MsgInfo( "O valor truncado em duas casas e " + alltrim(STR(nValor)) ,"Teste
Noround" )
Return

ROUND(NVALOR, NCASAS)
Retorna o valor arredondando as casas decimais de acordo com o número de casas
decimais definida no parâmetro

nValor - valor a ser arredondado


nCasas - número de casas decimais

Ex: o valor arredondado de 12.4489 em duas casas decimais

#Include "Protheus.ch"
User Function xRound()
Local nValor := Round(12.4489,2)
MsgInfo( "O valor arredondado em duas casas e " + alltrim(STR(nValor)) ,"Teste
Round" )
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 254
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Return

FUNÇÕES DE MANIPULAÇÃO DE DATAS:

DAY(DDATA)
Retorna o dia de uma data

dData - data a ser retornada o dia.

Ex.: retornar o dia de hoje.

#Include "Protheus.ch"
User Function xDay()
Local nValor := Day( dDatabase)
MsgInfo( "O dia e " + alltrim(STR(nValor)) ,"Teste Day" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 255
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MONTH(DDATA)
Retorna o mês de uma data

dData - data a ser retornada o mês.

Ex.: Retornar o mês de hoje.

#Include "Protheus.ch"
User Function xMonth()
Local nValor := Month( dDatabase)
MsgInfo( "O mes e " + alltrim(STR(nValor)) ,"Teste Month" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 256
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
YEAR(DDATA)
Retorna o ano de uma data

dData - data a ser retornada o ano.

Ex.: retornar o ano de hoje.

#Include "Protheus.ch"
User Function xYear()
Local nValor := Year( dDatabase)
MsgInfo( "O ano e " + alltrim(STR(nValor)) ,"Teste Year" )
Return

TIME()
Retorna a hora atual no formato HH:MM:SS

Ex: Retornar a hora atual

#Include "Protheus.ch"
User Function xTime()
Local cValor := Time()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 257
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
MsgInfo( "A hora e " + cValor ,"Teste Time" )
Return

ELAPTIME(CHORA1,CHORA2)
Retorna a diferença entre duas horas no formato HH:MM:SS

cHora1 - hora inicial para o cálculo


cHora2 - hora final para o cálculo

Ex: Retornar a diferença de horas entre as seguintes horas 14:32:20 e 18:45:39

#Include "Protheus.ch"
User Function xElapTime()
Local cValor1 := "14:32:20"
Local cValor2 := "18:45:39"
Local cValor3 := ElapTime(cValor1,cValor2)
MsgInfo( "O tempo passado entre " + cValor1 + " e " + cValor2 + " = " + cValor3
,"Teste Time" )
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 258
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FUNÇÕES DE MANIPULAÇÃO DE BASE DE DADOS

BOF()
Determina se o o começo do arquivo foi encontrado . Ocorre quando tenta-se mover
o ponteiro do registro antes do início do arquivo.

Ex.: Testar se o início do arquivo de Produtos foi encontrado.

#include "rwmake.ch"
User Function xBof()()
DbSelectArea("SB1")

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 259
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
DbGoTop() // Posiciona no primeiro registro
DbSkip(-1) // posiciona o ponteiro do registro 1 registro antes do registro atual.
If Bof()
MsgInfo("Cadastro de produtos esta no inicio", "Teste Bof()")
Endif

Return

EOF()
Determina se o o fim do arquivo foi encontrado . Ocorre quando o tenta-se mover o
ponteiro do registro após o final do arquivo.

Ex.: Testar se o fim do arquivo de Produtos foi encontrado.

#include "rwmake.ch"
User Function xEof()()
DbSelectArea("SB1")
DbGoBottom() // Posiciona no ultimo registro
DbSkip() // posiciona o ponteiro do registro no proximo registro.
If Eof()
MsgInfo("Cadastro de produtos esta no fim", "Teste Eof()")
Endif
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 260
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Return

DBCLOSEAREA()
Fecha a área corrente e libera todos os "lock´s" e gravações pendentes.
Ex. Vide exemplo da SetPrint()

DbSelectArea(nArea ou cArea)
Seleciona a área especificada como sendo a área ativa. Todas as operações
subseqüentes serão referentes a área selecionada a não ser que se referencie a
outra área.
nArea - número do índice da área
cArea - nome do arquivo
Ex. Selecionar o cadastro de clientes
DbSelectArea("SA1")

DBGOTOP()
Posiciona o arquivo no primeiro registro.

Ex. Selecionar o cadastro de clientes e posicionar no primeiro registro

#include "rwmake.ch"
User Function xDbGoTop()
DbSelectArea("SA1")
DbGoTop()
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 261
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
MsgInfo("Primeiro cliente: " + SA1->A1_COD ,"Teste DbGoTop()")
Return

DBGOBOTTON()
Posiciona o arquivo no último registro.
Ex. Selecionar o cadastro de clientes e posicionar no último registro

#include "rwmake.ch"
User Function xDbGoBottom()
DbSelectArea("SA1")
DbGoBottom()
MsgInfo("Ultimo cliente: " + SA1->A1_COD ,"Teste DbGoBottom()")
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 262
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

DBSETORDER(NORDEM)
Seleciona o índice que será utilizado pela área ativa.
nOrdem - número do índice a ser utilizado
Ex. Selecionar o índice 3 do cadastro de clientes
DbSelectArea("SA1")
DbSetOrder(3)

DBORDERNICKNAME(NICKNAME)
Define o indice de usuário a ser utilizado para a tabela.
Nickname - Nome do arquivo índice customizado

Ex.: Utilizar o índice de municípios na tabela de clientes.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 263
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
#include "protheus.ch"

User Function XdborNick()


DbSelectArea("SA1")
DbOrderNickName("Municipio")
MsgInfo("Ordem de " + Indexkey(), "Teste DbOrderNickName()")
Return

DBSEEK(CCHAVE,LSOFT,LLAST)
Posiciona o cursor no registro da área ativa,conforme a chave de busca.
cChave - dado do registro que se deseja localizar de acordo com a chave de busca
indicada pelo comando DbSetOrder().
LSoft - indica se o cursor deve ser posicionado no final próximo registro ou no final
do arquivo caso o registro não seja encontrado. Padrão .F. (posiciona em final de
arquivo caso não encontre)
lLast - define se o cursor se posicionará no primeiro ou último registro quando
existirem intervalos com as mesmas informações. Padrão .F. (posiciona no primeiro)
Retorno: .T. quando encontra o registro ou .F., caso não encontre o registro.

Ex. Buscar o município "POTIM" no cadastro de municípios.


DbSelectArea("CC2")
DbSetOrder(2)
If DbSeek(XFilial("CC2" + "POTIM")
MsgInfo("Municipio encontrado","Teste DbSeek()")
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 264
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Else
MsgInfo("Municipio nao encontrado", "Teste DbSeek()")
Endif

MSSEEK(CCHAVE,LSOFT,LLAST)
Função idêntica ao DbSeek, porém foi desenvolvida pela Microsiga. Essa função
mantém em memória os dados necessários para reposicionar os registros já
localizados pelo DbSeek() de forma que a aplicação não necessita executar
novamente a busca. É mais rápida que o DbSeek().

DBSETFILTER(BCONDIÇÃO,CCONDIÇÃO)
Cria um filtro para a área de trabalho ativa. Pode ser utilizado um bloco de código ou
uma condição simples.
bCondição - bloco de código contendo a expressão do filtro
cCondição - string simples contendo a expressão do filtro

Ex. Criar filtro no cadastro de clientes para códigos entre '00001' e '00010', usando
bloco de código.
Local bCondicao := { || A1_COD >= '00001' .AND. A1_COD <= '000010' }
DbSelectArea("SA1")
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 265
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
DbSetOrder(1)
DbSetFilter(bCondicao)
DbGoBotton()
MsgInfo("Codigo do cliente","Codigo") // deve mostrar um codigo menor igual a
'000010'

Ex. Criar filtro no cadastro de clientes para códigos entre '00001' e '00010', usando
condição simples..
Local cCondicao := "A1_COD >= '00001' .AND. A1_COD <= '000010' "
DbSelectArea("SA1")
DbSetOrder(1)
DbSetFilter(,cCondicao)
DbGoBotton()
MsgInfo("Codigo do cliente","Codigo") // deve mostrar um codigo menor igual a
'000010'

DbClearFilter()
Salva as atualizações na tabela corrente e limpa todas as condições do filtro da área
corrente.

Ex. Criar filtro no cadastro de clientes para códigos entre '00001' e '00010', usando
condição simples..
Local cCondicao := "A1_COD >= '00001' .AND. A1_COD <= '000010' "
DbSelectArea("SA1")
DbSetOrder(1)
DbSetFilter(,cCondicao)
DbGoBotton()
MsgInfo("Codigo do cliente","Codigo") // deve mostrar um codigo menor igual a
'000010'
DbClearFilter()

Select([cAlias])
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 266
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Retorna o número da área de trabalho de um alias.
cAlias - nome do alias o qual deseja saber o número da área. Quando não
especificado é utilizado o alias da área corrente. Quando o alias existe é retornado o
número da área, caso contrário é retornado zero.

Ex. Saber o número da área de trabalho do cadastro de produtos


Local nArea := Select("SB1")
MsgInfo("A area do cadastro de produtos e " + StrZero(nArea,3),"Select")

RECLOCK(CALIAS,LINCLUI)
Trava o registro da área especificada, permitindo a inclusão, alteração o exclusão do
registro.
cAlias - nome do arquivo a ser travado
lInclui - .T. trava o registro e inclui um novo registro em branco. Utilizado para
inclusão
.F. trava o registro corrente para alteração ou exclusão.

Ex. Incluir um novo registro no cadastro de produtos


Local cCodPro := "0090"
DbSelectArea("SB1")
DbSetOrder(1)
If ! MsSeek(XFilial("SB1") + cCodPro)
Reclock("SB1",.T.)
SB1->B1_FILIAL := XFILIAL("SB1")
SB1->B1_COD := cCodPro
MsUnlock()
Else
MsgStop("Codigo ja cadastrado", "Inclusao de Produto")
Endif

MSUNLOCK()
Destrava o registro corrente e efetiva todas as atualizações efetuadas.
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 267
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Ex.vide exemplo do Reclock()

DBDELETE()
Marca o registro corrente como apagado logicamente. Para sua utilização o registro
deve estar travado com o Reclock() e depois deve ser destravado com o
MsUnlock().
Ex. Excluir o cliente "000003"
#include "rwmake.ch"
User Function xDbdel()
Local cCliente := "000003"
DbSelectArea("SA1")
DbSetOrder(1)
If MsSeek(XFilial("SA1") + cCliente)
Reclock("SA1",.F.)
DbDelete()
MsgInfo("Cliente excluido !","Teste DbDelete()")
MsUnlock()
Endif
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 268
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

DELETED()
Retorna o status de exclusão do registro atual.
Retorno = .T. - o registro está marcado para exclusão ou .F., o registro não está
marcado para exclusão.

Ex. Verificar registros deletados no SA1 :

#include "rwmake.ch"
User Function xDeleted()
DbSelectArea("SA1")
DbGoTop()
Set Delete Off // tira o filtro de registros deletados (mostra)
Do While ! SA1->(Eof())
If Deleted()
MsgInfo("Cliente " + SA1->A1_COD + " excluido!","Teste DbDelete()")
Endif
SA1->(DbSkip())
Enddo
Set Delete On // filtra os registros deletados (nao mostra)
Return
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 269
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

DBSKIP(NREGISTROS)
Move o cursor para o próximo registro ou anterior, de acordo com o parâmetro
informado e com o índice ativo.
nRegistros - quantidade de registros a serem deslocados.

Ex. deslocar registros do cadastro de clientes

#include "rwmake.ch"
User Function xDbSkip()
DbSelectArea("SA1")
DbGoTop()
MsgInfo("O Primeiro codigo e : " + SA1->A1_COD , "Teste DbSkip")
Dbskip(2)
MsgInfo("Apos DbSkip(2) o codigo e : " + SA1->A1_COD , "Teste DbSkip")
DbSkip(-1)
MsgInfo("Apos DbSkip(-1) o codigo e : " + SA1->A1_COD , "Teste DbSkip")
DbSkip(-1)
MsgInfo("Apos DbSkip(-1) o codigo e : " + SA1->A1_COD , "Teste DbSkip")
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 270
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 271
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

RECNO()
Retorna a posição do registro onde o ponteiro está selecionado.

DBGOTO(NREG)
Posiciona o ponteiro em um registro especificado.
nReg - número do registro a ser posicionado.

Ex. Guardar a posição atual do cadastro de clientes e depois retorná-la após uma
pesquisa.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 272
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

MENSAGENS
MSG ALERT(CMENSAGEM,CTITULO)
Exibe um alerta para o usuário com a mensagem e o título dos parâmetros enviados.

O ícone mostrado na função MsgAlert é o


cMensagem - mensagem a ser mostrada.
cTitulo - título da mensagem.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 273
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
MSGINFO(CMENSAGEM ,CTITULO)
Exibe informação para o usuário com a mensagem e o título dos parâmetros
enviados.

O ícone mostrado na função MsgInfo é o


cMensagem - mensagem a ser mostrada.
cTitulo - título da mensagem.

MSGSTOP(CMENSAGEM,CTITULO)
Exibe informação para o usuário com a mensagem e o título dos parâmetros
enviados.

O ícone mostrado na função MsgStop é o


cMensagem - mensagem a ser mostrada.
cTitulo - título da mensagem.

MSGYESNO(CMENSAGEM,CTITULO)
Exibe informação para o usuário com a mensagem e o título dos parâmetros
enviados com opção do usuário escolher as opções "Sim" ou "Não".

O ícone mostrado na função MsgStop é o


cMensagem - mensagem a ser mostrada.
cTitulo - título da mensagem.

Retorno - retorna .T. caso o usuário escolha a opção SIM.

Ex: Utilização para mostrar total de registros gravados diferentes de total de


registros lidos.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 274
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 275
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Caso clique em "Sim"

Caso clique em "Não"

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 276
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

FUNÇÕES DE PROGRESSO DE PROCESSAMENTO

PROCESSA(BACAO,BMSG)
Regua de progresso de processamento que contém apenas uma régua indicativa.
bAcao - bloco de código contendo o que deve ser executado.
cMsg - mensagem da régua de progressso

SETPROC(NMAX)
Funçao utilizada em conjunto com a processa e serve para definir o tamanho
máximo da barra de progresso.
cMsg - mensagem da régua de progressso

INCPROC(CMSG)
Funçao utilizada em conjunto com a processa e serve para incrementar a barra de
progresso.
cMsg - mensagem da régua de progressso

Ex. Utilização das funções processa(), setproc() e incproc()


User Function XProcessa()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de regua progresso simples"
Local cDesc1 := "Exemplo da utilizacao das funcoes Processa() "
Local cDesc2 := "Setproc() e Incproc()"
Local cDesc3 := ""
AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )
FormBatch( cTitulo, aSay, aButton )
If nOpc <> 1
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 277
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Return Nil
Endif
Processa( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )
Return Nil

Static Function RunProc(lEnd)


Local nMax := 1000
Local x := 0
ProcRegua(nMax)
For x:= 1 to nMax
IncProc("Contando... "+ alltrim(Str(X)))
If lEnd
MsgInfo(cCancela,"Fim")
Exit
Endif
Next
Return .T.

RPTSTATUS(BACAO,BMSG)
Regua de progresso de processamento que contém apenas uma régua indicativa
utilizada nas rotinas de relatórios que utilizam a função setprint().
bAcao - bloco de código contendo o que deve ser executado.
cMsg - mensagem da régua de progressso

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 278
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
SETREGUA(NMAX)
Funçao utilizada em conjunto com a processa e serve para definir o tamanho
máximo da barra de progresso.
cMsg - mensagem da régua de progressso.

INCREGUA(CMSG)
Funçao utilizada em conjunto com a processa e serve para incrementar a barra de
progresso.
cMsg - mensagem da régua de progressso

Ex. Utilização das funções Rptstastus, setregua, incregua.

#include "protheus.ch"
User Function XSetRegua()
Local cDesc1 := "Este relatório imprimira o cadastro de clientes conforme"
Local cDesc2 := "parâmetros recebidos. Será gerado um arquivo no diretório "
Local cDesc3 := "Spool - CLIENTE_????.XLS, onde ???? e o nome do usuário."
Private cString := "SA1"
Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administração",2,2,1,"",1 }
Private wnrel := "CLIENTE"
Private NomeProg := "CLIENTE"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Clientes - ultimas compras "
Private cPerg := "CLIENTE"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 279
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private nMax := 0
// 1 2 3
//123456789012345678901234567890123456789
Private Cabec1 := "CLIENTE LOJA TIPO ULT.COMPRA NOME"
Private Cabec2 := ""
/*
+----------------------
| Parâmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulário
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatário
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mídia 1-Disco 2=Impressora
aReturn[6] – Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expressão do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/
AADD( aOrd, "Cliente" )
AADD( aOrd, "Nome" )

//Parâmetros de perguntas para o relatório


//+-------------------------------------------------------------+
//| mv_par01 - Cliente de ? 999999 |
//| mv_par02 - Cliente ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Ult. Compra de ? 99/99/99 |
//| mv_par06 - Ult. Compra ate ? 99/99/99 |
//| mv_par07 - Abrir planilha excel com o relatorio gerado.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 280
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//+-------------------------------------------------------------+
CriaSx1()
//+-------------------------------------------------
//| Disponibiliza para usuário digitar os parâmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,.F. somente carrega as
variáveis
//+---------------------------------------------------
//| Solicita ao usuário a parametrização do relatório.
//+---------------------------------------------------
wnrel := SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F.,
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,cSize,a
Filter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif
//+------------------------------------------------------------------
//| Estabelece os padrões para impressão, conforme escolha do usuário
//+------------------------------------------------------------------
SetDefault(aReturn,cString)
//+-------------------------------------
//| Verificar se será reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 281
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Return
Endif
//+-----------------------------------
//| Chama função que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo
dados,aguarde...", .T. )
Return

//Função de processamento e impressão

Static Function ImpRel(lEnd)


Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cAliasImp
Local oExcelApp
Titulo += aOrd[aReturn[8]]
#IFNDEF TOP
cAliasImp := "SA1"
cFiltro := "A1_FILIAL == '"+xFilial("SA1")+"' "
cFiltro += ".And. A1_CLIENTE >= '"+mv_par01+"' "
cFiltro += ".And. A1_CLIENTE <= '"+mv_par02+"' "
cFiltro += ".And. A1_TIPO >= '"+mv_par03+"' "
cFiltro += ".And. A1_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(A1_ULTCOM) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(A1_ULTCOM) <= '"+Dtos(mv_par06)+"' "
If aReturn[8] == 1 //Codigo
cIndice := "A1_COD + A1_LOJA "
Else aReturn[8] == 2 //Nome
cIndice := "A1_NOME + A1 _LOJA"
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 282
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Endif
cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()
cQuery := "SELECT "
cQuery += "A1_FILIAL, A1_COD, A1_LOJA , A1_NOME, A1_ULTCOM,
A1_TIPO "
cQuery += "FROM "+RetSqlName("SA1")+" "
cQuery += "WHERE A1_FILIAL = '"+xFilial("SA1")+"' "
cQuery += "AND A1_COD >= '"+mv_par01+"' "
cQuery += "AND A1_COD <= '"+mv_par02+"' "
cQuery += "AND A1_TIPO >= '"+mv_par03+"' "
cQuery += "AND A1_TIPO <= '"+mv_par04+"' "
cQuery += "AND A1_ULTCOM >= '"+Dtos(mv_par05)+"' "
cQuery += "AND A1_ULTCOM <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "
If aReturn[8] == 1 //Codigo
cQuery += "A1_COD + A1_LOJA"
Elseif aReturn[8] == 2 //Nome
cQuery += "A1_NOME + A1 _LOJA"
Endif
dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )
dbSelectArea(cAliasImp)
#ENDIF
dbGoTop()
DbEval({ || nMax++})
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 283
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
SetRegua(nMax)
// IMPRESSAO
AADD( aCol, 001 ) //Codigo
AADD( aCol, 009 ) //Loja
AADD( aCol, 014 ) //tipo
AADD( aCol, 019 ) //Ult. compra
AADD( aCol, 031 ) //Nome

While !Eof() .And. !lEnd


If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif
@ Li, aCol[1] PSay (cAliasImp)->A1_COD
@ Li, aCol[2] PSay (cAliasImp)->A1_LOJA
@ Li, aCol[3] PSay (cAliasImp)->A1_TIPO
#IFNDEF TOP
@ Li, aCol[4] PSay DTOC((cAliasImp)->A1_ULTCOM)
#else
@ Li, aCol[4] PSay (cAliasImp)->A1_ULTCOM
#endif
@ Li, aCol[5] PSay (cAliasImp)->A1_NOME
Li ++
(cAliasImp)->(DBSKIP())
IncRegua()
End
If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 284
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf
Ms_Flush()
Return

//Função para gerar o grupo de parâmetros no SX1

STATIC FUNCTION CRIASX1()


Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}
/******
Parâmetros da função padrão
---------------------------
PutSX1(cGrupo,cOrdem,cPergunt,cPerSpa,cPerEng,cVar,cTipo,nTamanho,nDecima
l,nPresel,cGSC,cValid,cF3,cGrpSxg,cPyme,cVar01,cDef01,cDefSpa1,cDefEng1,cCn
t01,cDef02,cDefSpa2,cDefEng2,
cDef03,cDefSpa3,cDefEng3,
cDef04,cDefSpa4,cDefEng4,
cDef05,cDefSpa5,cDefEng5,
aHelpPor,aHelpEng,aHelpSpa,
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 285
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cHelp)
Característica do vetor p/ utilização da função SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validação
[n,7] --> F3
[n,8] --> definição 1
[n,9] --> definição 2
[n,10] -> definição 3
[n,11] -> definição 4
[n,12] -> definição 5
***/
AADD(aP,{"Cliente de","C",6,0,"G","","SA1","" ,"" ,"","",""})
AADD(aP,{"Cliente ate","C",6,0,"G","(mv_par02>=mv_par01)","SA1","" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","" ,"" ,"" ,"","",""})
AADD(aP,{"Ult. Compra de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Ult. Compra ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,"" ,"" ,"","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","","Sim","Não","","",""})
AADD(aHelp,{"Código do cliente - inicial.","inicial."})
AADD(aHelp,{"Código do cliente - final.","final."})
AADD(aHelp,{"Tipo de cliente."})
AADD(aHelp,{"Tipo de cliente final."})
AADD(aHelp,{"Digite a data da ultima compra inicial."})
AADD(aHelp,{"Digite a data do ultima compra final."})
AADD(aHelp,{"Abrir planilha Excel com o relatorio gerado ou somente gravar o
arquivo excel."})

For i:=1 To Len(aP)


NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 286
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))
PutSx1(cPerg,cSeq,aP[i,1],aP[i,1],aP[i,1],cMvCh,aP[i,2],aP[i,3],aP[i,4],0,aP[i,5
],aP[i,6],aP[i,7],"","",cMvPar,aP[i,8],aP[i,8],aP[i,8],"",aP[i,9],aP[i,9],aP[i,9],aP[i,10],aP[i
,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 287
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 288
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
EXERCÍCIO 1

Monte um relatório para imprimir os Pedidos de vendas, conforme abaixo:


a) Opções de ordem : Número do pedido, data de emissão ou cliente
b) Campos: Número do pedido, data de emissão, cliente, condição
pagamento, produto, quantidade pedida, quantidade entregue, saldo, preco
unitario, preco total
c) Filtros: Pedido de/até, cliente de/até, emissão de/até, saldo zerado S/N ?,
produto,

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 289
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 1
Exercício 1:
Respostas:
Programa: é onde são escritas todas as instruções, comandos e funções para
montar uma rotina, relatório, consulta, job´s etc.

Remote: É o aplicativo do Protheus que será utilizado pelo usuário para utilizar o
sistema. O remote requisita o APO ao server, o server carrega o APO do RPO,
executa e devolve o resultado ao remote.

Server: É o aplicativo do Protheus responsável pela compilação e execução dos


APO´s. Essa inteligência permite que as rotinas sejam descarregadas
dinamicamente do servidor para os terminais, com isso a perfomance é alta e não
requer muitos recursos da máquina para a execução do servidor.

Apo:Advanced Protheus Objects, são os programas compilados.


RPO: Repositório de objetos que contém todos os programas padrões compilados
pela Microsiga e também todos os programas do usuário (customizações).

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 290
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 3
Exercício 1:
Respostas:
A:= 5 > 3
A) correto

Exercício 2:
Respostas:
a= "Jonas,1" - Alfanumérica
b= 120 - numérica
c=.T. - lógica
d={1,2} – array

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 291
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 4

Exercício 1:
Respostas:
A:= 2 * 5
Resposta A = 10

B:= "P" $ "ADVPL"


Resposta .T.

C:= A < 2
Resposta .F. ( A = 10, 10 < 2)

D:= 13 % 2
Resposta D =1

E:= A++ / 2
Resposta E = 5 , (A=10 , 10 / 2, atribui depois)

F:= ++A - 1
Resposta F = 10, ( A=10 , (10+1) - 1)

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 292
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 6
Exercício 1
Resposta : A principal vantagem é não ter que digitar o mesmo registro para
todas as filiais.

Exercício 2
Resposta: Não pode existir tabela sem o campo filial, pois o mesmo é chave
para identificar de qual filial pertence o registro.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 293
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 7
Exercício 1
Resposta:
1) Acesse Senhas - Usuários

Informe ou quando solicitado se deseja fazer backup


do cadastro de usuários.

Clique em "Incluir" para incluir um novo usuário.


Pasta Usuário - Dados do usuário

Pasta Usuário - Parâmetros

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 294
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

Clique em para gravar as informações.

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 295
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 8
Exercício 1
Resposta:

#include "rwmake.ch"
User Function XCadZZ1()
Local cAlias := "ZZ1"
Local cTitulo := "Cadastro de Clientes"
Local cVldExc := ".T."
Local cVldAlt := ".T."

DbSelectArea(cAlias)
DbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return

Return lRet

Exercício 2
Resposta: A diferença entre a função Modelo 2 e a Modelo3 é que a Modelo
2 é utilizada para ,anipulação de dados que tratam estrutura de cabeçalho e
itens na mesma tabela e a Modelo 3 é utilizada para manipulação de dados
que tratam estrutura de cabeçalho e itens em tabelas diferentes.

Exercício 3
Resposta:
#INCLUDE "protheus.ch"
User Function XEx3Cap6()
Local cFiltra := "ZZ2_FILIAL == '"+xFilial('ZZ2')+"' .And. ZZ2_MOEDA == 1"
Local aCores := {}
Private cCadastro := "Exercicio 3 - Cap 6"
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 296
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private aRotina := {}
Private cDelFunc := ".T."
Private cAlias := "ZZ2"
Private aIndexZZ2 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexZZ2,@cFiltra) }
Private bCampo := {|nCPO| Field(nCPO) }
AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})
AADD(aRotina,{ "Visual" ,"U_MNTZZ2" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_MNTZZ2" ,0,3})
AADD(aRotina,{ "Altera" ,"U_MNTZZ2" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_MNTZZ2" ,0,5})
AADD(aRotina,{ "Legenda","BLegenda" ,0,3})

AADD(aCores,{"ZZ2_CONDPA = '001' " ,"BR_VERDE" })


AADD(aCores,{"ZZ2_CONDPA <> '001'" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)
Eval(bFiltraBrw)
DbGoTop()
mBrowse( 6,1,22,75,cAlias)
EndFilBrw(cAlias,aIndexZZ2)
Return

User Function MntZZ2(cAlias,nReg,nOpcx)


Local cTitulo := "Cadastro de Pedidos de Venda"
Local cAliasE := "ZZ2"
Local cAliasG := "ZZ3"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0 , nI := 0, I:= 0
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 297
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

// Opcoes de acesso para a Modelo 3


Do Case
Case nOpcx==3
nOpcE:=3
nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4
nOpcE:=3
nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2
nOpcE:=2
nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5
nOpcE:=2
nOpcG:=2 // 5 - "EXCLUIR"
EndCase
// Cria variaveis M->????? da Enchoice
RegToMemory("ZZ2",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou
alteracao
//permite alterar o conteudo das variaveis de memoria

// Cria aHeader e aCols da GetDados


nUsado:=0
dbSelectArea("SX3")
dbSeek("ZZ3")
aHeader:={}
While !Eof().And.(x3_arquivo=="ZZ3")
If Alltrim(x3_campo)=="ZZ3_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 298
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo,
x3_picture,x3_tamanho, x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo,
x3_arquivo, x3_context } )
Endif
dbSkip()
End
If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("ZZ3")
dbSetOrder(1)
dbSeek(xFilial()+M->ZZ2_NUM)
While !eof().and.ZZ3_NUM==M->ZZ2_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado

aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
If Len(aCols)>0
// Executa a Modelo 3
aCposE := {"ZZ2_NUM","ZZ2_CLIENTE"}
lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk,
cTudOk,nOpcE, nOpcG,cFieldOk)
If lRetMod3
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 299
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

If nOpcX == 3 // Inclusao ou alteracao


RecLock("ZZ2",IIF(inclui,.T.,.F.)) // a variavel lInclui
indica se e uma inclusao
For i := 1 TO FCount()
If "FILIAL"$Field(i)
FieldPut(i,xFilial())
Else
FieldPut(i,M->&(EVAL(bCampo,i)))
EndIf
Next i
MsUnLock()
For nx := 1 to len(aCols)
RecLock("ZZ3",.T.)
For ni := 1 to Len(aHeader)
ZZ3->&(aHeader[ni][2]) := aCols[nx][ni]
Next ni
MsUnLock()
Next nx
Aviso("Pedido","Confirmada operacao!",{"Ok"})
Elseif nOpcX = 2 // Exclusao
If MsgYesNo("Confirma exclusao ", "Exclusao Pedido")
For nx := 1 to len(aCols)
RecLock("ZZ3",.f.)
ZZ3->(DbDelete())
MsUnLock()
Next nx
RecLock("ZZ2",.T.)
ZZ2->(DbDelete())
MsUnlock()
Endif
Endif

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 300
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Endif
Endif
Return

Static Function BLegenda()


Local aLegenda := {}
AADD(aLegenda,{"BR_VERDE" ,"Pagamento a vista " })
AADD(aLegenda,{"BR_PRETO" ,"Outros pagamentos" })
BrwLegenda(cCadastro, "Legenda", aLegenda)
Return Nil

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 301
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

CAPÍTULO 9
Exercício 1
Resposta:
#include "protheus.ch"
User Function XEx1Cap7()
Local cDesc1 := "Este relatório imprimira os pedidos de venda conforme"
Local cDesc2 := "parâmetros recebidos. "
Local cDesc3 := ""
Private cString := "SC5"
Private Tamanho := "G"
Private aReturn := { "Zebrado",2,"Administração",2,2,1,"",1 }
Private wnrel := "PEDVEN"
Private NomeProg := "PEDVEN"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Saldos de Pedido de Vendas "
Private cPerg := "xPedVen"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
// 1 2 3 4 5 6 7 8 9
10

//1234567890123456789012345678901234567890123456789012345678901
234567890123456789012345678901234567890123456789
Private Cabec1 := "PEDIDO EMISSAO CLIENTE C.PAGTO PRODUTO
QTDE PED. QTDE ENTREGUE SALDO P.UNIT P.TOTAL"
// 99/99/99 9999.999,99 9999.999,99
9999.999,99 999.999.999,99 999.999.999,99
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 302
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Private Cabec2 := ""
/*
+----------------------
| Parâmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulário
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatário
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mídia 1-Disco 2=Impressora
aReturn[6] – Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expressão do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/
AADD( aOrd, "Pedido" )
AADD( aOrd, "Emissao" )
AADD( aOrd, "Cliente" )

//Parâmetros de perguntas para o relatório


//+-------------------------------------------------------------+
//| mv_par01 - Pedido de ? 999999 |
//| mv_par02 - Pedido ate ? 999999 |
//| mv_par03 - Cliente de ? 999999 |
//| mv_par04 - Cliente ate ? 999999 |
//| mv_par05 - Emissao de ? 99/99/99 |
//| mv_par06 - Emissao ate ? 99/99/99 |
//| mv_par07 - Saldo Zerado S/N ?.

//+-------------------------------------------------------------+
CriaSx1()
//+-------------------------------------------------
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 303
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//| Disponibiliza para usuário digitar os parâmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,.F. somente
carrega as variáveis
//+---------------------------------------------------
//| Solicita ao usuário a parametrização do relatório.
//+---------------------------------------------------
wnrel :=
SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F.,
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,
cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif
//+------------------------------------------------------------------
//| Estabelece os padrões para impressão, conforme escolha do usuário
//+------------------------------------------------------------------
SetDefault(aReturn,cString)
//+-------------------------------------
//| Verificar se será reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)
//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 304
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
//+-----------------------------------
//| Chama função que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo
dados,aguarde...", .T. )
Return

//Função de processamento e impressão


Static Function ImpRel(lEnd)
Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cPed := ""
Local cAliasImp
Titulo += aOrd[aReturn[8]]

cAliasImp := GetNextAlias()
cQuery := "SELECT "
cQuery += "C5_FILIAL, C5_NUM, C5_CLIENTE , C5_CONDPAG,
C5_EMISSAO, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN, C6_VALOR,
C6_QTDENT "
cQuery += "FROM "+RetSqlName("SC5")+" SC5, " +
RetSqlName("SC6") + " SC6 "
cQuery += "WHERE C5_FILIAL = '"+xFilial("SC5")+"' "
cQuery += "AND C5_NUM >= '"+mv_par01+"' "
cQuery += "AND C5_NUM <= '"+mv_par02+"' "
cQuery += "AND C5_CLIENTE >= '"+mv_par03+"' "
cQuery += "AND C5_CLIENTE <= '"+mv_par04+"' "
cQuery += "AND C5_EMISSAO >= '"+Dtos(mv_par05)+"' "
cQuery += "AND C5_EMISSAO <= '"+Dtos(mv_par06)+"' "
cQuery += "AND SC5.D_E_L_E_T_ = '' "
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 305
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cQuery += "AND SC6.D_E_L_E_T_ = '' "
cQuery += "AND SC5.C5_NUM = SC6.C6_NUM "
cQuery += "AND SC6.C6_FILIAL = '"+xFilial("SC6")+"' "
IF MV_PAR07 = 2 // NAO IMPRIMIR SALDO ZERADO
cQuery += " AND C6_QTDVEN > C6_QTDENT "
ENDIF
cQuery += "ORDER BY "
If aReturn[8] == 1 //PEDIDO
cQuery += "C5_NUM"
Elseif aReturn[8] == 2 //EMISSAO
cQuery += "C5_EMISSAO"
Else
cQuery += "C5_CLIENTE"
Endif
dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F.
)
dbSelectArea(cAliasImp)

dbGoTop()
SetRegua(0)
// IMPRESSAO
AADD( aCol, 001 ) //PEDIDO
AADD( aCol, 008 ) //EMISSAO
AADD( aCol, 017 ) //CLIENTE
AADD( aCol, 026 ) // CONDICAO PAGAMENTO
AADD( aCol, 034 ) //PRODUTO
AADD( aCol, 051 ) //QTDE PEDIDA
AADD( aCol, 063 ) //QTDE ENTREGUE
AADD( aCol, 077 ) //SALDO
AADD( aCol, 089 ) //PRECO UNITARIO
AADD( aCol, 104 ) //PRECO TOTAL

cPed := "#$%%%"
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 306
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
While !Eof() .And. !lEnd
If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif
If cPed <> (cAliasImp)->C5_NUM
@ Li, aCol[1] PSay (cAliasImp)->C5_NUM
@ Li, aCol[2] PSay right((cAliasImp)->C5_EMISSAO,2) + '/' +
SUBSTR((cAliasImp)->C5_NUM,5,2) + '/' + SUBSTR((cAliasImp)-
>C5_NUM,2,2)
@ Li, aCol[3] PSay (cAliasImp)->C5_CLIENTE
@ Li, aCol[4] PSay (cAliasImp)->C5_CONDPAG
cPed := (cAliasImp)->C5_NUM
ENDIF
@ Li, aCol[5] PSay (cAliasImp)->C6_PRODUTO
@ Li, aCol[6] PSay TRANSFORM((cAliasImp)->C6_QTDVEN,"@E
9999,999.99")
@ Li, aCol[7] PSay TRANSFORM((cAliasImp)->C6_QTDENT,"@E
9999,999.99")
@ Li, aCol[8] PSay TRANSFORM((cAliasImp)->C6_QTDVEN -
(cAliasImp)->C6_QTDENT,"@E 9999,999.99")
@ Li, aCol[9] PSay TRANSFORM((cAliasImp)->C6_PRCVEN,"@E
999,999,999.99")
@ Li, aCol[10] PSay TRANSFORM((cAliasImp)->C6_VALOR,"@E
999,999,999.99")
Li ++
(cAliasImp)->(DBSKIP())
End
If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

If Li <> 80
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 307
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
Roda(cbCont,cbTxt,Tamanho)
Endif
#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf
Ms_Flush()
Return

//Função para gerar o grupo de parâmetros no SX1


Static Function CriaSx1()
Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}
/******
Parâmetros da função padrão
---------------------------
PutSX1(cGrupo,cOrdem,cPergunt,cPerSpa,cPerEng,cVar,cTipo,nTamanho,n
Decimal,nPresel,cGSC,cValid,cF3,cGrpSxg,cPyme,cVar01,cDef01,cDefSpa1
,cDefEng1,cCnt01,cDef02,cDefSpa2,cDefEng2,
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 308
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
cDef03,cDefSpa3,cDefEng3,
cDef04,cDefSpa4,cDefEng4,
cDef05,cDefSpa5,cDefEng5,
aHelpPor,aHelpEng,aHelpSpa,
cHelp)
Característica do vetor p/ utilização da função SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validação
[n,7] --> F3
[n,8] --> definição 1
[n,9] --> definição 2
[n,10] -> definição 3
[n,11] -> definição 4
[n,12] -> definição 5
***/
AADD(aP,{"Pedido de","C",6,0,"G","","SC5","" ,"" ,"","",""})
AADD(aP,{"Pedido ate","C",6,0,"G","(mv_par02>=mv_par01)","SC5","" ,""
,"","",""})
AADD(aP,{"Cliente de","C",6,0,"G","","SA1" ,"" ,"" ,"","",""})
AADD(aP,{"Cliente ate","C",6,0,"G","(mv_par04>=mv_par03)","SA1" ,"" ,""
,"","",""})
AADD(aP,{"Emissao de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Emissao ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,"" ,""
,"","",""})
AADD(aP,{"Saldo zerado" ,"N",1,0,"C","","","Sim","Não","","",""})
AADD(aHelp,{"Código do pedido - inicial.","inicial."})
AADD(aHelp,{"Código do pedido - final.","final."})
AADD(aHelp,{"Código do cliente - inicial.","inicial."})
NFT – Núcleo de Formação Tecnológica
Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 309
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados
AADD(aHelp,{"Código do cliente - final.","final."})
AADD(aHelp,{"Digite a data de emissao inicial."})
AADD(aHelp,{"Digite a data de emissao final."})
AADD(aHelp,{"Imprimir pedidos com saldos zerados ?"})

For i:=1 To Len(aP)


cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))
PutSx1(cPerg,cSeq,aP[i,1],aP[i,1],aP[i,1],cMvCh,aP[i,2],aP[i,3],aP[i,4],
0,aP[i,5],aP[i,6],aP[i,7],"","",cMvPar,aP[i,8],aP[i,8],aP[i,8],"",aP[i,9],aP[i,9],aP[i,
9],aP[i,10],aP[i,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i
Return

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 310
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 311
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 312
ADVPL I
Versão 1.0 25/07/2011 – Todos direitos reservados

NFT – Núcleo de Formação Tecnológica


Rua Teodoro Sampaio, 417 conjunto 94, Pinheiros 313

Você também pode gostar