Programao e CustomizaesAdvPL e Protheus
Evoluo e Arquitetura do Sistema Arquivos Customizaes Case Sistema de Contas Correntes
Aula 1
Evoluo do Sistema da Microsiga 1974 1978 1983 1990 1995 2000 Assembler DBase II Clipper 5 AdvPL Batch Online III, Clipper Summer SIGA Advanced
Natural Adabas
FiveWin/Top/Coencisa, VO, Delphi, SQL Protheus 5 ... 8
Multi-Camada
Windows Linux Browser
Remote (MP8RMT.EXE)
Client (WEB) ActiveX
Client
Windows Linux Unix
RPO (MPDP811.RPO)
Server (MP8SRVWIN.EXE) Monitor
Aplication Server
DBF/CTREE
Top Connect
Windows Linux Unix
SQL Server Sybase
Oracle PostGres
DB2 MySQL
Database Server
Mltiplas configuraes
modem
.. ..
modem
.....
Hub
Hub .....
Servidor Terminal Dados
Protheus ServerCOMPILADOR
Base de Dados
WEB Services
INTERPRETADOR
Repositrio de Objetos
Remote Protheus
Remote Protheus
Remote Protheus
Remote Protheus
Estrutura Protheus
Programa FonteMATA010
SERVER
REMOTE
APO MATA010 Executa MATA010 Executa MATA410 Executa CTBR040
Cad.Produtos
RPOMATA010 MATA410 CTBR040
Ped.Vendas
Balancete Cont.
OBJETO
OBJETO
INSTNCIA INSTNCIA
OBJETO
EXECUO
OBJETO OBJETO OBJETO
SOLICITA O
Repositrio de ObjetosEXECUO
UCP
Protheus
EXECUO
CARGA
Protheus
Memria
SGBD
.
Banco de Dados
Interface de Banco de Dados (Top Connect)
WEB Services
.
Soluo Protheus (Server).
Interface de Apresentao (Remote).
Interface de Software Bsico (acesso ao Hardware)
REDEA PI A PI A PI AP I
IDEIntegrated Development Environment
Repositrio de Objetos
Programa Fonte
Projeto
Aplicativos Protheus Server Protheus Remote Top Connect Monitor
Camada Aplicao
de
Camada de Interface
Camadas ProtheusCamada Dados de
Camada de Repositrio de Objetos
Conjuntos de arquivos RPO BUILD Patch arquivo binrio com os APOs executveis, DLLs e RPO atualizaes do RPO
Remote Windows Linux Hand Held (Palm ou Pocket PC) ActiveX
Terminal Remoto Thin Client Baixo trfego na rede Multi-plataforma Atualizao automtica ASP - Aplication Server Provider Browser Internet (HTML)
Estrutura de pastas do sistemaERP811 APO (RPO) BIN REMOTE SERVER INCLUDE MP_DATA DATA (verso ISAM) SAMPLES SPOOL SYSTEM (Dic.Dados, Menus, ...) SYSTEMLOAD MY PROJECTS
Ao d o u su rio
Pa rm etro s (M P8 1 1 SRV. i n i) Rep o si t ri o d e In d i ca d o p elo atalh o Ob jeto s (M PDP8 1 1 . rp o )
In d i ca d o p elo SERVERSERVER M P8 SRVW IN . ex e
In d i ca d o p elo So u rcePath d o M P8 1 1 SRV. in i In d i ca d o p elo s Ro o tPath e StartPa th d o M P8 1 1 SRV. in i In d i ca d o p elo Ro o tPath d o M P8 1 1 SRV. in i
In d i ca d o p elo Pa rm etro Server d o M P8 1 1 RM T. in i
REM OTE M P8 RM T. ex e
In d i ca d o p elo REM OTE
Ba se d e D ad o s (D BF o u Ctree)
Arq u i vo s d e In d i ca d o p elo atalh o Ao d o u su rio Pa rm etro s (M P8 1 1 RM T. in i) M en u s, Co n fi g u ra es e Cu sto m iz a es (SXs)
Atalhos
Destino: c:\erp811\bin\server\mp811srvwin.exe debug Iniciar em: c:\erp811\bin\serverMP8 Server
Destino: c:\erp811\bin\remote\mp811rmt.exe Iniciar em: c:\erp811\bin\remoteMP8 Remote
MP8SRV.INI
MP8SRV.INI[Environment] SourcePath=C:\ERP811\APO RootPath=C:\ERP811\MP_Data StartPath=\system\ RpoDb=dbf RpoLanguage=portuguese RpoVersion=811 LocalFiles=ads localdbextension=.dbf PictFormat=DEFAULT DateFormat=DEFAULT [Drivers] Active=TCP [TCP] TYPE=TCPIP Port=1234
ERP811 APO BIN REMOTE SERVER INCLUDE MP_DATA DATA SAMPLES SPOOL SYSTEM SYSTEMLOAD MY PROJECTS
SIGACFG
TCP
Environment
MP8SRV.INI[environmentSQL] SourcePath=C:\ERP811\APO RootPath=C:\ERP811\MP_Data StartPath=\system\ RpoVersion=811 RpoDb=Top LocalFiles=ads localdbextension=.dbf RpoLanguage=portuguese PictFormat=DEFAULT DateFormat=DEFAULT [Topconnect] Alias=BASE810 ConType=TCPIP DataBase=MSSQL8 Server=SrvTOP01 [Drivers] Active=TCP [TCP] TYPE=TCPIP Port=1234
MP8RMT.INI
[Config] LastMainProg=sigamdi [Drivers] Active=TCP [TCP] Server=localhost Port=1234
Server e Rem ote em m q u in as sep arad as
OU
Server e Rem ote n a m esm a m q u in a
Protheus ServerRed e In tran et Ex tran et In tern et
Protheus Server Protheus Remote
Protheus Remote
Configurador
SIGACFG
TCP
Environment
Configurador
Senha: admin
Configurador
Configurador
CON FIGURAD OR
Am b ien te . . .
Usu rio . . .
Bases
de
Dad o s. .
Em p resas . . .
Aju d a . . .
Po ssib ilita a d efin io d o fo rm ato d as in terfaces d e acesso ao s m d u lo s d o sistem a, criao e m an u ten o d e m en u s, tab elas, p arm etro s e p erg u n tas
Perm ite o reg istro e a m an u ten o d e u su rio s, em p resas, sen h as e n veis d e acesso s.
Oferece u m co n ju n to co m p leto d e fu n es p ara a criao e m an u ten o d o Dicio n rio d e Dad o s (cam p o s co m su as caractersticas e seu s g atilh o s e valid a es).
Perm ite a criao d e b ases p ara n o vas em p resas e con so lid a tod o s o s fato s o co rrid o s n o sistem a p o r m eio d e co n su lta ao s arq u ivo s d e LOG.
Co n so lid a u m co n ju n to d e d icas so b re o s co n ceito s e u tiliz ao d o p rod u to .
ArquivosPasta \SYSTEMArquivo SX1 SX2 SX3 SX4 SX5 SX6 SX7 SX9 SXA SXB SXD SXE SXF SXG SXK SXO SIX .XNU
Famlia SX
Descrio Perguntas e Respostas Mapeamento de Tabelas Dicionrio de Dados Agenda do Schedule de Processos Tabelas Parmetros Gatilhos Relacionamento entre Tabelas Pastas Cadastrais apontadas no SX3 Consulta por meio da tecla F3 (Consulta Padro) Controle do Schedule de Processos Seqncia de Documentos (+1) Seqncia de Documentos (prximo) Tamanho padro para campos Respostas das Perguntas (SX1) por Usurio Controle de LOGs por Tabela ndices dos Arquivos Menu de Opes dos Mdulos
Famlias de Arquivos de DadosPasta \DATA ou Banco de Dados
SA SB SC SD SE SF SG SH SI SJ SM SN
-
Cadastros Estoques Previses de E/S Mov. De Estoque Financeiro Fiscal Estruturas Carga de Mquina Contbil Estatsticas Miscelneas Ativo Fixo
SO - Assist. Tcnica SP - Ponto Eletrnico SQ - Recr. e Seleo SR - Folha de Pagto ST - Manut. Industrial SU - Telemarketing SV - Concessionrias SW e SY- Export./Import. Q? - Qualidade (Celerina) R? - Recursos Humanos SZ,QZ,RZ - Livres P? - Projetos Especiais
M.E.R. Modelo de Entidades e Relacionamento
Principais Arquivos de DadosPrefixo SA1 SA2 SA3 SB1 SB2 SB5 SC1 SC5 SC6 SC7 SD1 SD2 SD3 SE1 SE2 SF1 SF2 SI1 SI2 Descrio Cadastro de Clientes Cadastro de Fornecedores Cadastro de Vendedores Cadastro de Produtos Saldos dos Produtos por Almoxarifado Dados Complementares de Produtos Solicitaes de Compras Cabealho dos Pedidos de Venda Itens dos Pedidos de Venda Pedidos de Compras Itens das Notas Fiscais de Entrada Itens das Notas Fiscais de Sada Movimentaes Internas de Produtos Ttulos a Receber Ttulos a Pagar Cabealho das Notas Fiscais de Entrada Cabealho das Notas Fiscais de Sada Plano de Contas Lanamentos Contbeis
Arquivos de Dados
por Empresa
O sistema permite controlar at 99 Empresas. Cada Empresa pode ter at 99 Filiais: Empresa 01 Filiais 01 Empresa 02 Filiais 01 02 02 ... ... 99 99
Para cada Empresa criado um jogo de arquivos: SXXnn0 onde: XX = Prefixo do arquivo nn = Empresa
Exemplo: Empresa 99 -> SA1990, SA2990, SB1990...
Arquivos de DadosFiliaisOs dados das Filiais ficam dentro do arquivo de cada Empresa. Todo arquivo, exceto SM2, tem um campo XX_Filial que identifica a Filial:01 01 01 02 02 02
Nomenclatura dos campos:Arquivo SA1: A1_FILIAL A1_COD A1_NOME A1_END SA2: A2_FILIAL A2_COD A2_NOME A2_END SB1: B1_FILIAL B1_COD B1_DESC B1_TIPO QA1: QA1_FILIAL QA1_COD QA1_DESC
Arquivos de DadosModo de Acesso
Compartilhado Exclusivo
registros compartilhados entre as filiais Campo Filial: em branco o registro exclusivo da filial Campo Filial: cdigo da Filial (varivel cFilAnt)
Ex: SA1 - CompartilhadoA1_FILIAL A1_COD 000015 000016 000001 000020 000007 A1_NOME FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP
xFilial( SA1 )
Ex: SC5 - ExclusivoC5_FILIAL 01 01 01 02 02 02 03 03 03 C5_NUM 000001 000005 000007 000001 000005 000007 000001 000005 000007 C5_EMISSAO 01/01/04 01/01/04 20/01/04 01/01/04 01/01/04 20/01/04 01/01/04 01/01/04 20/01/04 C5_CLIENTE 000002 000023 000016 000002 000023 000016 000002 000023 000016 C5_PROD 11.11014 13.13000 15.15140 11.11014 13.13000 15.15140 11.11014 13.13000 15.15140 C5_VALOR 15.000,00 5.600,00 5.600,00 15.000,00 5.600,00 5.600,00 15.000,00 5.600,00 5.600,00
xFilial( SC5 )
cFilAnt
Arquivos de ndicesndices Todo arquivo precisa ter pelo menos um ndice ndice Primrio: acesso direto ao registro verificao de chave duplicada
Ordenao de registros
CHAVE 000001 000007 000015 000016 000020
REGISTRO 03 05 01 02 04
REGISTRO 01 02 03 04 05
A1_FILIAL
A1_COD 000015 000016 000001 000020 000007
A1_NOME FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP
Arquivos de ndicesndices Um arquivo pode ter at 35 ndices (1...9, A...Z) dbSetOrder(n), onde n = 1...35 funo para selecionar o ndice. Alm dos ndices originais, usurios podem incluir seus prprios ndices. Caso a Microsiga inclua novos ndices, os do usurio sero renumerados.
SA1
ndices do Sistema
Usurio ndice ndice do Sistema novo do Usurio ndice do Usurio
1 2 ... 7 8 8 9
A1_TIPO A1_TIPO
NickName: TIPO NickName: TIPO
Nos programas: dbSetOrder(8) dbOrderNickName( TIPO ) XPortanto, ndices de usurio devem sempre ter um NickName. Deve-se usar a funo dbOrderNickName( NICKNAME ) ndices do sistema, nunca tero NickName. Usa-se dbSetOrder().
Customizao Parmetros, Tabelas, Perguntas Frmulas - Expresses em AdvPL / User Function Validaes, Gatilhos, Campos de Arquivos User Function via menu Pontos de Entrada Dicionrio de Dados Ativo SigaRPM, Crystal, Excel
Customizao
CustomizaoParmetros
Parmetros: arquivo SX6 cESTNEG := GetMV(MV_ESTNEG) S N 100 201 100 201 V S .Or. QtdVenda < B2_Saldo F V 200 F 200 If cESTNEG == tratamento normal Else tratamento de erro EndIf
CustomizaoTabelas
Tabelas: arquivo SX5 Tabela 12: Estados do Brasil Tabela 13: CFOP Tabela 33: Estado Civil
CustomizaoPerguntas
Perguntas: arquivo SX1 Do Cliente: At Cliente: Da Data: At Data: 000010 000050 01/03/06 31/03/06
As respostas tambm so gravadas
CustomizaoInsero de Cdigo-Fonte
Exemplo: Um Pedido de Venda includo Na emisso da NF, o preo deve ser reajustado em 25%Programa-fonteMATA460A Emisso NF
Preo 100,00 125,00
SERVER FrmulasAPO MATA460A RPOMATA460A SC6->C6_PRCVEN * 1.25
Preo := SC6->C6_PRCVEN * 1.25 Preo := &Formula
Execuo do MATA460APreo := SC6->C6_PRCVEN * 1.25
Preo := &Formula
Emisso NF
CustomizaoInsero de Cdigo-Fonte
Frmulas: arquivo SM4 - Expresses em AdvPL / Funes MicrosigaEx: Reajuste de preo entre o Pedido e o Faturamento:-No Pedido preenchido o cdigo da frmula de reajuste (campo Tipo Reajuste ) -No Programa de emisso da nota fiscal: Preo := &Formula(Obs: a pergunta Reajuste na mesma NF? precisa estar com SIM)
Frmula 001 - Reajuste fixo: SC6->C6_PRCVEN * 1.25 Frmula 002 - Reajuste se preo em dlar: SC6->C6_PRCVEN * RecMoeda(dDataBase,2) Frmula 003 - Reajuste pelo dlar: SC6->C6_PRCVEN * (RecMoeda(dDataBase,2)/ If(RecMoeda(SC5->C5_EMISSAO,2) 0, RecMoeda(SC5->C5_EMISSAO,2),1))
Tipos de Processamento Run Time ServerMaquina Virtual
Interpretador FONTEDBase, Access
PCodeVisual Basic, AdvPl Abap, Oracle,Java
Executvel + InterpretadorClipper, Visual Objects
Executvel
Delphi, C
Compilao
A=A+B A=5 965534567654
A = A + &BMACRO
A= 75 End 3 23456
37654
CustomizaoValidaes
Validaes: Dicionrio de Dados (SX3) Campo Cd.Cliente: Campo Natureza: Campo Estado: Campo CNPJ: ExistChav(SA1) ExistCpo(SED) ExistCpo(SX5, 12+M->A1_EST) CGC(M->A1_CGC)
CustomizaoGatilhos
Gatilhos: Aciona a rotina ao sair-se de um campo (SX7) Exemplo: na digitao da NF de Compra
Quant.
Vr.Unit.
Total
10
2,00
20,00
Campo: D1_VUNIT Contra-Dominio: D1_TOTAL Regra: Round(M->D1_VUNIT * M->D1_QUANT, 2)
CustomizaoCampos de Arquivos
Campos: Campos dos Lanamentos Padronizados (SI5) Dbito: If(SD3->D3_TIPO=MC, 33201+SD3->D3_CC, 11303)
CustomizaoUser Function Executa uma srie de comandos, retornando um valor; Precisa ser compilado; O resultado um objeto que armazenado no Repositrio. Ex: User Function ContaDeb() Do Case Case SB1->B1_TIPO == MC Conta := 11302 Case SB1->B1_TIPO == ME Conta := 11303 ... EndCase Return (Conta + SD3->D3_CC)
Lanamento Padronizado (SI5) Dbito: u_ContaDeb()
CustomizaoPonto de Entrada
So pontos pr-determinados, onde o usurio pode escrever uma nova rotina em substituio quela existente ou adicionar algum processamento. Cada Ponto de Entrada identificado pelo nome de uma Funo. If ExistBlock(CalcSaldo) u_CalcSaldo() EndIf Para utiliz-lo, deve-se escrever uma funo com este mesmo nome. User Function CalcSaldo() ... Return Os Pontos de Entrada esto descritos no DEM. Exemplo: pode-se alterar a rotina de clculo do ICMS ou do IPI no programa de Preparao de Nota Fiscal de Vendas escrevendo um P.E.
Exemplo de Ponto de Entrada
// PONTO DE ENTRADA NA ALTERAO DO CADASTRO DE PRODUTO #Include RWMake.ch" User Function MT010ALT() If AllTrim(SB1->B1_TIPO) == "MO" // Trata-se dbSelectArea("SB2") // Acessa o dbSetOrder(1) // e custos dbSeek(xFilial()+SB1->B1_COD) If RecLock("SB2", .F.) // Grava em custo mdio o custo standard, // mdio de mo-de-obra. SB2->B2_CM1 := SB1->B1_CUSTD EndIf EndIf Return Nil de mo-de-obra. registro de saldos no SB2.
pois no existe custo
Configurador - SIGACFG Dicionrio de Dados Menus
ExercciosCrie um parmetro (SX6) para o limite mximo por transao: Nome da Var.: Tipo: Contedo: Descrio: MV_VRMAX N 10000 Valor maximo da transacao
SIGACFG: menu Ambiente / Cadastros / Parmetro
Crie uma tabela (SX5) de tipos de transaes: Tabela ZZ D S E J R Depsito Saque Encargos Juros Resgates
SIGACFG: menu Ambiente / Cadastros / Tabelas (tem que preencher os 3 idiomas)
ExerccioCrie uma Frmula (SM4) para reajustar o preo dos produtos da Fbrica de Chaveiros:Cdigo: Descrio: Frmula: 001 REAJUSTE DE PREO SB1->B1_PRV1 * 1.25
SIGACFG: menu Ambiente / Cadastros / Formulas
Crie um Gatilho que apresente o valor total do item:Campo: D1_VUNIT Sequencia: 001 Cnt. Dominio: D1_TOTAL Tipo: Primario Regra: M->D1_QUANT * M->D1_VUNIT Posiciona: NoSIGACFG: menu Base de Dados / Dicionario / Gatilhos
ExerccioInsira a validao no arquivo SI2, campo I2_VALOR:
If(M->I2_Valor < GetMV(MV_VRMAX), .T., .F.)SIGACFG: menu Base de Dados / Dicionario / Base de Dados
Exerccio
Crie um Ponto de Entrada para modificar o clculo do Saldo aps um Saque, considerando apenas 60% do seu valor.
ExerccioLanamento Contbil AutomticoMostrar o lanamento 666 - Requisio
CaseSistema de Contas Correntes
CaseSistema de Contas Correntes
Contas Transaes Consultas Relatrios Excel WorkFlow TXT / XML WebServices AdvPL ASP
CaseSistema de Contas Correntes
Tabelas do sistema
CONTASNome E-Mail E-Mail1 Saldo Tem Refere-se
TRANSAESNome Nmero da Transao Item da Transao Tipo (Depsito ou Saque) Data Histrico Saldo Atual (virtual) Valor Aprovao
ExerccioPrefixo: Path: Nome: Descrio: Desc.Esp.: Desc.Ingls: Modo Acesso: Prefixo: Path: Nome: Descrio: Desc.Esp.: Desc.Ingls: Modo Acesso:
Criao de Arquivos (SX2)SZ1 \DATA\ SZ1990 CONTAS CONTAS CONTAS COMPARTILHADO SZ2 \DATA\ SZ2990 TRANSAES TRANSAES TRANSAES EXCLUSIVO
SIGACFG: menu Base de Dados / Dicionario / Arquivos
Modo de Acesso: Compartilhado Exclusivo Funo xFilial(Alias) Filial = branco Filial = nmero da Filial (var. pblica cFilAnt)
Criao de Campos (SX3)Criao dos campos dos arquivos: SZ1 SZ2 Cadastro de Contas Arquivo de Transaes
SIGACFG: menu Base de Dados / Dicionario / Base de Dados
Ordem faz parte da chave do SX3 O cadastramento de um campo dividido em pastas:Campo Informaes Opes Validaes Uso Mdulo
Criao de Campos (SX3)
Caracter, Numrico, Lgico, Data, Memo
Picture varivel, que pode ser retornada por uma funo Real, Virtual Alterar, Visualizar
Criao de Campos (SX3)
Nome do cliente
Criao de Campos (SX3)
D=Deposito;S=Saque
ComboBox. No campo ser gravada a letra, no exemplo, D ou S.
D
dDataBase
GetSXENum( SZ2 , Z2_NUMERO )
Cadastro de Contas (SZ1)
Campo Z2_Nome
F3
Criao de Campos (SX3)
Exemplo: no Depto. Pessoal Usurios:9 8 7Nvel do Usurio
Gerente Digitador
6
5
4 3 2 1 0 0 1 2
0a9 Define a permisso de acesso ao campo. O Usurio s ter acesso a campos de Campos: nvel igual ou menor que o seu nvel. Nvel dos 9 Exemplo: Usurio com nvel 5 s ter Campos nvel 9 8 Nome do Func. nvel 5 acesso a campos com nvel 7 igual ou menor que 5. 6 nvel 4 nvel 5 Endereo 5 4 3 Salrio nvel 9
Criao de Campos (SX3)
Criao de Campos (SX3)
ExerccioCadastrar os campos do SZ1Campo Campo Z1_NOME Z1_EMAIL Z1_EMAIL1 Z1_SALDO Tipo Car Car Car Num Tam. 20 40 40 12 2 @E 999,999,999.99 Dec. @! Formato Contexto Real Real Real Real Propr. Alt. Alt. Alt. Visual Inform. Ttulo Nome EMail EMail1 Saldo Obrig Uso Usa Brw
Cadastrar Opes e Validaes para estes camposCampo Z1_NOME Opes Lista de Opes Inic.Padro Validaes
ExistChav(SZ1, M->Z1_NOME, 1) ExistCpo(SZ1, M->Z2_NOME, 1) GetSXENum(SZ2, Z2_NUMERO) ExistChav("SZ2", M->Z2_NUMERO+ M->Z2_ITEM, 1) dDataBaseD=Deposito;S=Saque
Z2_NOME Z2_NUMERO Z2_ITEM Z2_DATA Z2_TIPO
D
ExerccioCampos do SZ2 (j esto cadastrados)Campo Campo Z2_NOME Z2_NUMERO Z2_ITEM Z2_DATA Z2_TIPO Z2_HIST Z2_VALOR Z2_SLDATU Z2_APROV Tipo Car Car Car Data Car Car Num Num Car Tam. 20 4 2 8 1 20 12 12 3 2 2 @E 999,999,999.99 @E 999,999,999.99 99 Dec. @! Formato Contexto Real Real Real Real Real Real Real Virtual Real Propr. Alt. Visual Alt. Alt. Alt. Alt. Alt. Visual Visual Inform. Ttulo Nome Numero Item Data Tipo Historico Valor Saldo Aprovado Obrig Uso Usa Brw
ExerccioCriao dos ndices
2
1 3 4
Chave SZ1 SZ2
Nickname
Z1_Filial + Z1_Nome Z2_Filial + Z2_Numero + Z2_Item Z2_Filial + Z2_Nome + Z2_Numero + Z2_Item
NOME NR_IT NOME_NR_IT
ExercciosCrie a Consulta Padro que mostre o arquivo SZ1 e insira-a no campo Z2_NomeSIGACFG: menu Base de Dados / Dicionario / Base de Dados
Faa o Gatilho para atualizar o Z2_SldAtu (virtual) ao digitar-se Z2_Valor: Campo: Cnt. Dominio: Tipo: Regra: Posiciona: Alias: Ordem: Chave: Z2_VALOR Z2_SLDATU Primario IF(M->Z2_TIPO==D, SZ1->Z1_SALDO + M->Z2_VALOR, SZ1->Z1_SALDO - M->Z2_VALOR) Sim SZ1 1 xFilial(SZ1) + M->Z2_NOME
SIGACFG: menu Base de Dados / Dicionario / Gatilhos
ExerccioCrie em ERP o menu do Sistema de Contas CorrentesSIGACFG: menu Ambiente / Cadastro / Menus
Contas Correntes
Consultas AtualizaesPrograma:
RelatriosPrograma:
Con001
Rel001
ContasPrograma:
Transaes
Cad
Modelo 1Programa:
Modelo 2Programa:
Modelo 3Programa:
TranM1
TranM2
TranM3
Programao Comandos e funes Operadores IDE Variveis de memria Array Funes
Aula 2
Programao
Exerccios de LgicaAqurio
3 cestos com bolas pretas e brancas e etiquetas erradas
Preta Branca
Preta Preta
Branca Branca
3 cestos: 1 hiptesePreta Branca Preta Preta Branca Branca
3 cestos: 2 hiptesePreta Branca Preta Preta Branca Branca
RespostaVai na caixa com etiqueta Preta-Branca Saca uma bola Se Branca Conclui-se a outra bola Branca e esta caixa a Branca-Branca a caixa que est etiquetada Preta-Preta Preta-Branca a caixa que est etiquetada Branca-Branca Preta-Preta Se Preta Conclui-se a outra bola Preta e esta caixa a Petra-Preta a caixa que est etiquetada Preta-Preta Branca-Branca a caixa que est etiquetada Branca-Branca Preta-Branca
Cruzamento dos ponteiros do relgio Entre 0 horas e 24 horas quantas vezes os ponteiros se cruzam, contando inclusive o cruzamento das 0 horas e das 24 horas?
Resposta: 23 vezes
Travessia da passarelaQuatro pessoas tem de atravessar uma passarela bamba. H muitos buracos na passarela, que suporta apenas 2 pessoas de cada vez (mais que isso, ela cai). O grupo deve usar uma lanterna para guiar seus passos, caso contrrio acabar caindo no buraco e morrendo. S h uma lanterna. As 4 pessoas andam em velocidades diferentes. Antonio cruza a passarela em 1 minuto. Bernardo em 2 minutos. Carlos leva 5 minutos. O mais lento, Roberto, leva 10 minutos. A passarela vai ruir dentro de exatamente 17 minutos. Como os 4 podem atravess-la?
RespostaVai o 1 e 2 Volta o 1 Vai o 5 e 10 Volta o 2 Vai o 1 e 2 2 3 13 15 17
ProgramaConjunto de Instrues: Comandos e FunesInstrues bsicas de uma Linguagem:Aritmticas: Somar / Subtrair / Multiplicar / Dividir Entrada e Saida: Ler / Gravar / Tela / Impresso / Teclado / Atribuio Lgicas: If...Else...EndIf For...Next While...End Do Case...EndCase
Inicio Armar Despertador Desligar Despertador Repetir 3 vezes Bocejar Sacudir a Esposa Sair da Cama Acender a luzSim Est Escuro ? No Sim Sim
A
Resmungar
A Esposa quer $$ ? No
Dar-lhe R$ 100,00
Casado h mais de 5 anos ? No
Sim
Beijar a esposaCasado h mais de 1 ano ? No
Beijar a esposa Ir at o carro Voltar para peg-lasNo Est Com as Chaves ? Sim
Voltar para a cama Possvel Fim da rotina
Sim Est Frio ? No
Ir ao Banheiro Tomar Caf A
Dirigir-se ao escritrio Fim
OperadoresMatemticos
+
-
*
/
** ou ^
%
x := 10 + 20
nValor := nQtde * nPreco nValor := nValor + (nValor * 18 / 100)
OperadoresRelacionais
==
=
ou # ou !=
If nQtde < nSaldo MsgAlert(Pedido liberado) Else MsgAlert(Pedido bloqueado: estoque insuficiente) EndIf
If nSalario > 1257 nIR := 15 EndIf
OperadoresLgicos
.And.
.Or.
.Not. ou !
If cCredito == OK .And. nQtde < nSaldo Liberar venda EndIf
cCredito == OK V V F F
.And.
nQtde < nSaldo V F V F V F F F
OperadoresLgicos
.And.
.Or.
.Not. ou !
If cEstNeg == "S" .Or. nQtdVenda < nSaldo MsgAlert("OK, pode faturar!") Else MsgAlert("Estoque insuficiente!") EndIf
cEstNeg == S V V F F
.Or.
nQtdeVenda < nSaldo V F V F V V V F
OperadoresLgicos
.And.
.Or.
.Not. ou !
If cCredito == "OK" .And. (cEstNeg == "S" .Or. nQtdVenda < nSaldo) MsgAlert("OK, pode faturar!") Else MsgAlert("Sem credito ou estoque insuficiente!") EndIf
cCredito == OK V V V V F F F F
.And.
( cEstNeg == SV V F F V V F F
.Or.
nQtdVenda < nSaldo ) V F V F V F V F V V V F V V V F
OperadoresLgicos
.And.
.Or.
.Not. ou !
If cCredito == "OK" .And. (cEstNeg == "S" .Or. nQtdVenda < nSaldo) MsgAlert("OK, pode faturar!") Else MsgAlert("Sem credito ou estoque insuficiente!") EndIf
cCredito == OK V V V V F F F F
.And.
( cEstNeg == SV V F F V V F F
.Or.
nQtdVenda < nSaldo ) V F V F V F V F V V V F V V V F V V V F F F F F
OperadoresLgicos
.And.
.Or.
.Not. ou !
If a b ... EndIf
If .Not. a==b ... EndIf
If !a==b ... EndIf
OperadoresAtribuio
:=
+=
-=
*=
/=
^= ou **=
%=
x := 10 x := x + 20 x += 20 nValor := nValor + (nValor * 18 / 100) nValor += (nValor * 18 / 100)
o mesmo que:
o mesmo que:
OperadoresIncremento / Decremento
i++i++
++i
i--
--ii := i + 1
equivale a
i := 1 MsgAlert(i++)
equivale a
i := 1 MsgAlert(i) i := i + 1
mostra 1
i := 1 MsgAlert(++i)
equivale a
i := 1 i := i + 1 MsgAlert(i)
mostra 2
OperadoresStrings
x + y
x - y
x $ y
Concatenao cNome := Joo cSobreNome := Silva cNomeCompleto := cNome + cSobreNome A - B AB
JooSilva
Pertence Silva $ cNomeCompleto SILVA $ cNomeCompleto
.T. .F.
OperadoresEspeciais
( ) { } [ ] & || -> @ ;
Funcao() Array, bloco de cdigo Array Macro Bloco de cdigo Alias de arquivo e var. de memria SA1->A1_Nome M->A1_Nome Parmetros por referncia Quebra de linhaIf cCredito == "OK" .And.; (cEstNeg == "S" .Or. nQtdVenda < nSaldo) MsgAlert("OK, pode faturar!") Else MsgAlert("Sem credito ou estoque insuficiente!") EndIf
:
Objetos
oBotao:cCaption := OK
IDE1. 2. 3. 4. 5. 6. 7.
Primeiro Programa
8.
Criar atalho do IDE (\erp811\bin\remote\mp8ide.exe) Criar um novo projeto Criar um novo arquivo User Function Se() Digitar o primeiro programa Salv-lo na pasta \erp811\My Projects Local nX := 10 Inseri-lo no projeto Compilar: If nX > 5 Usurio: Administrador MsgAlert("Maior") Senha: admin EndIf Executar Return
Ver 010_If.prw / 020_For.prw / 030_While.prw / 040_Case.prw
Organizao dos Programas-Fonte
Projeto (.PRJ) Programa (.PRW) Programa (.PRW) Programa (.PRW)Funo Funo Funo Funo Funo Funo Funo Funo Funo
Variveis de MemriaArmazenamento temporrio de dados
Cadastro Nome: Jos
MemriaNome Jos Valor 1000
A1_NOME Jos D2_VALOR 1000 ICMS = Valor * 18 / 100
CPU
Tipos de Variveis de MemriaNotao Hngara: Caractere Numricas Data Lgicas Casa 1234.56 CtoD(25/10/05) .T. .F. cTexto nValor dData lOkn X := 1nX numrico X numrico
c X := Jos
X agoracaracter cX caracter
n X := n X + 1
Operao matemtica ERRO !
Tipos de Variveis de MemriaNotao Hngara: Caractere Numricas Data Lgicas Casa 1234.56 CtoD(25/10/05) .T. .F.tipo da varivel: C, N, D, L, A, U C N U
cTexto nValor dData lOk
Funo ValType(NomeVar) Exemplo: cNome := Jose nValor := 1000 x := Nil
ValType(cNome) ValType(nValor) ValType(x)
Ver Operadores.PRW Exercicio
Array, Vetor ou MatrizVariveis do tipo Caracter: uma para cada nome cNome1 cNome2 cNome3 cNome4 := := := := Joao Alberto Pedro MariaMemriacNome1 Joao aNomes Joao Alberto Pedro Maria cNome2 Alberto cNome3 Pedro cNome4 Maria
Variveis do tipo Array: todos os nomes numa nica varivel aNomes := {Joao, Alberto, Pedro, Maria} aNomes[1] aNomes[2] aNomes[3] aNomes[4]
Array, Vetor ou MatrizVariveisArmrio 1Joao
Armrio 2Alberto
Armrio 3Pedro
Armrio 4Maria
ArrayArmrioGaveta 1 Joao Gaveta 2 Alberto Gaveta 3 Pedro Gaveta 4 Maria
Array, Vetor ou Matriz
Gaveta 1 Gaveta 2 Gaveta 3 Gaveta 4
Joao Alberto Pedro Maria
Array, Vetor ou MatrizUm array pode conter tipos diferentes de dados aPessoa := {Joao, 25, .T.} Um array pode conter outros arrays: MatrizaMatriz := {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}} aMatriz[1][1] aMatriz[1] aMatriz[1][2] aMatriz[1][3] aMatriz[2] aMatriz[2][1] aMatriz[2][2] aMatriz[2][3]
aMatriz := {{Joao , {Alberto, {Pedro , {Maria ,
25, 18, 40, 33,
.T.},; .F.},; .T.},; .F.}}
Array, Vetor ou MatrizaMatriz := {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}}
aMatriz := {{Joao , {Alberto, {Pedro , {Maria ,
25, 18, 40, 33,
.T.},; .F.},; .T.},; .F.}}
Gaveta 11Joao
Gaveta 23T
Gaveta 33F
Gaveta 43T
225
1Alberto
218
1Pedro
240
1Maria
233
3F
Gaveta 11 2 3Joao 25 T
Gaveta 21 2 3Alberto 18 F
Gaveta 31 2 3Pedro 40 T
Gaveta 41 2 3Maria 33 F
Array, Vetor ou MatrizAdicionar elementos num array vazioaNomes := {} {Joao} Alberto} Pedro} Maria} {Joao, Alberto, Pedro, AAdd(aNomes, Joao) AAdd(aNomes, Alberto) AAdd(aNomes, Pedro) AAdd(aNomes, Maria)
AAdd(aMatriz, AAdd(aMatriz, AAdd(aMatriz, AAdd(aMatriz,
{Joao,25,.T.}) {Alberto,18,.F.}) {Pedro,40,.T.}) {Maria,33,.F.})
aMatriz: {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}}
Array, Vetor ou MatrizFuno Array(n): retorna um array com n elementos nulos aArray := Array(5) aArray {Nil, Nil, Nil, Nil, Nil}
Atribuio de valor aos elementos do array aArray[1] aArray[2] aArray[3] aArray[4] aArray[5] aArrayVer 050_Array.prw Exercicio: fazer o sort de um array
:= := := := :=
A B C D E
{A, B, C, D, E}
FunesConjunto de Comandos
Programa.PRW User Function Teste() Comandos Comandos Comandos Comandos Return
Execuo (chamada) da funo: u_Teste()
FunesRotinas repetitivasUser Function CadCli() Comandos If CGC(cCGC) continua Else abandona EndIf Comandos Comandos Comandos Return Function CGC(cCGC) .T. ou .F. If cCGC OK lOK := .T. Else lOK := .F. EndIf Return lOK .T. ou .F. User Function CadFor() Comandos Comandos Comandos If CGC(cCGC) continua Else abandona EndIf Comandos Return
FunesProgramao Estruturada User Function Relato() u_PreparaImpr() u_LeDados() u_Imprime() Return User Function PreparaImpr() ... Return User Function LeDados() ... Return User Function Imprime() ... Return
FunesPassagem de parmetros User Function Venda() nImposto := u_ICMS(NE, 1000) Return User Function ICMS(cRegiao, nValor) NE 1000 If cRegiao == SE nICMS := nValor * 18 / 100 ElseIf cRegiao == NE nICMS := nValor * 7 / 100 Else nICMS := nValor * 12 / 100 EndIf Return nICMS
Escpo das Varivies LocalVisvel somente na funo em que foi criada
PrivateVisvel na funo em que foi criada e nas funes seguintes
PublicVisvel em todas as funes, a partir do momento em que foi criada
StaticVisvel somente no programa (PRW)
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" Return
LOCAL
Contedo
PRIVATE
Contedo
PUBLIC
Contedo
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" Return
LOCAL cVar
Contedo Func1
PRIVATE
Contedo
PUBLIC
Contedo
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" Return
LOCALcVar cVar1
ContedoFunc2 Func2
PRIVATEcVar2
ContedoPrivate Func2
PUBLICcVar3
ContedoPublic Func2
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" Return
LOCAL
Contedo
PRIVATEcVar2
ContedoABC
PUBLICcVar3
ContedoPublic Func2
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" Return
LOCALcVar cVar1
ContedoFunc2 Func2
PRIVATEcVar2
ContedoABC
PUBLICcVar3
ContedoPublic Func2
Escpo das VariviesUser Function Func1() Local cVar := "Func1" u_Func2() Return User Function Func2() Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2" u_Func3() Return User Function Func3() cVar2 := ABC" ReturnVer 052_EscopoVar.prw
LOCAL cVar
Contedo Func1
PRIVATE
Contedo
PUBLICcVar3
ContedoPublic Func2
Passagem de ParmetrosPor Valor User Function Venda() Local cRegiao := NE Local nValor := 1000 nImposto := ICMS(cRegiao, nValor) NE 1000 Return User Function ICMS(cRegiao, nValor) NE 1000 If cRegiao == SE nICMS := nValor * 18 / 100 ElseIf cRegiao == NE nICMS := nValor * 7 / 100 Else nICMS := nValor * 12 / 100 EndIf Return nICMS
So criadas variveis LOCAIS
Passagem de ParmetrosPor Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x=1 y=2
Passagem de ParmetrosPor Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x=1 y=2
x = 50 y = 100
Passagem de ParmetrosPor Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x=1 y=2
Passagem de ParmetrosPor Referncia User Function Param1() Local x := 1 Local y := 2 u_Param2(@x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x=1 y=2
Passagem de ParmetrosPor Referncia User Function Param1() Local x := 1 Local y := 2 u_Param2(@x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x = 50 y=2
y = 100
Passagem de ParmetrosPor Referncia User Function Param1() Local x := 1 Local y := 2 u_Param2(@x, y) MsgAlert(x+y) Return User Function Param2(x, y) x := 50 y := 100 ReturnVer 060_Param.prw
x = 50 y=2
Funes de Caracteres, Nmeros e DatasManipulao de textos (strings) Converso de nmeros Funes de data e hora Converso de datas
Ver 053_Tratamentos.PRW
Macro Bloco de Cdigo UDC Semforos Arquivos e ndices
Aula 3
Macro-SubstituioUser Function Reajuste() dbSelectArea("SB1") dbGoTop() While !SB1->(Eof()) RecLock("SB1") SB1->B1_Prv1 := SB1->B1_Prv1 * 1.25 MSUnlock() SB1->(dbSkip()) End MsgInfo("Terminou!") Return
Macro-SubstituioUser Function Reajuste() Local cFormula dbSelectArea("SM4") dbSetOrder(1) dbSeek(xFilial("SM4") + "001") cFormula := SB1->B1_Prv1 * 1.25 SM4->M4_FormulaArquivo SM4 - Frmulas M4_FILIAL: 01 M4_CODIGO: 001 M4_FORMULA: SB1->B1_Prv1 * 1.25
dbSelectArea("SB1") dbGoTop() While !SB1->(Eof()) RecLock("SB1") SB1->B1_Prv1 := &(cFormula) * * 1.25) SB1->B1_Prv1 &(SB1->B1_Prv1 1.25 MSUnlock() SB1->(dbSkip()) End MsgInfo("Terminou!") ReturnVer Reajuste.PRW
Macro-SubstituioAplicao de Macros
ValidaesIf(M->I2_Valor < GetMV(MV_VRMAX), .T., .F.)
GatilhosM->D1_QUANT * M->D1_VUNIT
FrmulasSB1->B1_Prv1 * 1.25
Lanamentos Contbeis AutomticosIf(SD3->D3_TIPO=MC, 33201+SD3->D3_CC, 11303)
Bloco de Cdigo
bBloco := {|| 2 * 10} nResult := EVal(bBloco) nResult = 20
bBloco := {|x| x * 2} nResult := EVal(bBloco, 5) nResult = 10
Ver 051_Bloco.prw
Bloco de Cdigo
aNomes := {Joao, Alberto, Pedro, Maria}
AEval(aNomes, {|x| MsgAlert(x)}) DBEval()
Ver AEval em 050_Array.prw
Bloco de CdigoOrdenao de array
aMatriz := { {Joao
,15} , {Pedro ,10} ,{Pedro ,10}, {Maria {Alberto,20} {Alberto,20}
,30} }
ASort(aMatriz,,,{|aX,aY| aX[2] < aY[2]})
.F. .T.
Ver 050_Array.prw
Bloco de CdigoOrdenao de array
{Joao aMatriz := { {Pedro
,15} {Pedro ,10} , {Joao
,10} ,15} ,{Alberto,20}, {Maria
,30} }
ASort(aMatriz,,,{|aX,aY| aX[2] < aY[2]})
.T. .F.
Ver 050_Array.prw
UDC
User Defined Command
Legibilidade e Manutenibilidade do Fonte
Instrues para o Compilador#DEFINE #IFDEF...#ELSE...#ENDIF #IFNDEF #INCLUDE #COMMAND
Ver 080_UDC.prw
SemforosControle de numerao sequencial Obtem o prximo nmero Confirma o nmero Reutiliza o nmero Confirma se o nmero est mesmo disponvel Manuteno do SXE/SXF ou Hardlock
GetSXENum(Alias) ConfirmSX8() RollBackSX8() MayIUseCode(Alias) APCFG110
Arquivos MS: s alias GetSXENum(SC5) Arquivos de usurio: alias e campo GetSXENum(SZ2, Z2_NUMERO)
Exemplo:
001 002 003 004 005
003 004 006 007 008
Exemplos em 120_TranM2
Arquivos
Famlias de Arquivos de DadosSA SB SC SD SE SF SG SH SI SJ SM SN Cadastros Estoques Previses de E/S Mov. De Estoque Financeiro Fiscal Estruturas Carga de Mquina Contbil Estatsticas Miscelneas Ativo Fixo SO - Assist. Tcnica SP - Ponto Eletrnico SQ - Recr. e Seleo SR - Folha de Pagto ST - Manut. Industrial SU - Telemarketing SV - Concessionrias SW e SY- Export./Import. Q? - Qualidade (Celerina) R? - Recursos Humanos SZ,QZ,RZ - Livres P? - Projetos Especiais
M.E.R. Modelo de Entidades e Relacionamento
Principais Arquivos de DadosPrefixo SA1 SA2 SA3 SB1 SB2 SB5 SC1 SC5 SC6 SC7 SD1 SD2 SD3 SE1 SE2 SF1 SF2 SI1 SI2 Descrio Cadastro de Clientes Cadastro de Fornecedores Cadastro de Vendedores Cadastro de Produtos Saldos dos Produtos por Almoxarifado Dados Complementares de Produtos Solicitaes de Compras Cabealho dos Pedidos de Venda Itens dos Pedidos de Venda Pedidos de Compras Itens das Notas Fiscais de Entrada Itens das Notas Fiscais de Sada Movimentaes Internas de Produtos Ttulos a Receber Ttulos a Pagar Cabealho das Notas Fiscais de Entrada Cabealho das Notas Fiscais de Sada Plano de Contas Lanamentos Contbeis
Arquivos de Dados
por Empresa
O sistema permite controlar at 99 Empresas. Cada Empresa pode ter at 99 Filiais: Empresa 01 Filiais 01 Empresa 02 Filiais 01 02 02 ... ... 99 99
Para cada Empresa criado um jogo de arquivos: SXXnn0 onde: XX = Prefixo do arquivo nn = Empresa
Exemplo: Empresa 99 -> SA1990, SA2990, SB1990...
Arquivos de Dados
por Empresa
Os dados das Filiais ficam dentro do arquivo de cada Empresa. Todo arquivo, exceto SM2, tem um campo XX_Filial que identifica a Filial:01 01 01 02 02 02
Nomenclatura dos campos:Arquivo SA1: A1_FILIAL A1_COD A1_NOME A1_END SA2: A2_FILIAL A2_COD A2_NOME A2_END SB1: B1_FILIAL B1_COD B1_DESC B1_TIPO QA1: QA1_FILIAL QA1_COD QA1_DESC
Arquivos de DadosModo de Acesso
Compartilhado Exclusivo
registros compartilhados entre as filiais Campo Filial: em branco o registro exclusivo da filial Campo Filial: cdigo da Filial (varivel cFilAnt)
Ex: SA1 - CompartilhadoA1_FILIAL A1_COD 000015 000016 000001 000020 000007 A1_NOME FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP
xFilial( SA1 )
Ex: SC5 - ExclusivoC5_FILIAL 01 01 01 02 02 02 03 03 03 C5_NUM 000001 000005 000007 000001 000005 000007 000001 000005 000007 C5_EMISSAO 01/01/04 01/01/04 20/01/04 01/01/04 01/01/04 20/01/04 01/01/04 01/01/04 20/01/04 C5_CLIENTE 000002 000023 000016 000002 000023 000016 000002 000023 000016 C5_PROD 11.11014 13.13000 15.15140 11.11014 13.13000 15.15140 11.11014 13.13000 15.15140 C5_VALOR 15.000,00 5.600,00 5.600,00 15.000,00 5.600,00 5.600,00 15.000,00 5.600,00 5.600,00
xFilial( SC5 )
cFilAnt
Arquivos e ndices
ndice: CDIGOCODIGO 000001 000002 000007 000008 000015 000016 000019 000020 000023 000024 000026 000027 000028 000030 000033 REGISTRO 03 09 05 07 01 02 13 04 08 06 10 11 12 15 14 RECNO 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 A1_COD 000015 000016 000001 000020 000007 000024 000008 000023 000002 000026 000027 000028 000019 000033 000030 A1_NOME
Arquivo
FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP JOAO DA SILVA /SP FLORICULTURA FULO DE MARAVILHA /SP PREFEITURA MUNICIPAL DE SAO PAULO /SP ECOSSISTEMA DIGITAL S/A ACTIONVEA IMP. EXP. STARMEAL LEAK S.A. REIZA KERN IMP. EXP. JOAO DE ALMEIDA SILVA /RS DESPACHANTE IMPORTADOR EUA
Arquivos e ndices
ndice: NOMENOME REGISTRO 10 04 03 05 14 09 01 07 15 06 13 08 12 11 02 RECNO 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 A1_COD 000015 000016 000001 000020 000007 000024 000008 000023 000002 000026 000027 000028 000019 000033 000030 A1_NOME
Arquivo
ACTIONVEA.. ARMANDO J.. CLIENTE P.. COMERCIO .. DESPACHAN.. ECOSSISTE.. FABRICA D.. FLORICULT.. IMPORTADO.. JOAO DA S.. JOAO DE A.. PREFEITUR.. REIZA KER.. STARMEAL .. TEX MALHA..
FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP JOAO DA SILVA /SP FLORICULTURA FULO DE MARAVILHA /SP PREFEITURA MUNICIPAL DE SAO PAULO /SP ECOSSISTEMA DIGITAL S/A ACTIONVEA IMP. EXP. STARMEAL LEAK S.A. REIZA KERN IMP. EXP. JOAO DE ALMEIDA SILVA /RS DESPACHANTE IMPORTADOR EUA
Arquivos e ndicesndices CODIGO 000001 000002 000007 000008 000015 000016 000020 000023 000024 000026 REG 3 9 5 7 1 2 4 8 6 10 Arquivo: SA1990 RECNO 1 2 3 4 5 6 7 8 9 10 A1_COD 000015 000016 000001 000020 000007 000024 000008 000023 000002 000026 Alias: SA1 A1_NOME FABRICA DE TINTAS E VERINIZES LTDA /SP TEX MALHAS E CONFECCOES S.A /SP CLIENTE PADRAO ARMANDO JOSE FLORES /SC COMERCIO SOM DO MUNDO /SP JOAO DA SILVA /SP FLORICULTURA FULO DE MARAVILHA /SP PREFEITURA MUNICIPAL DE SAO PAULO /SP ECOSSISTEMA DIGITAL S/A ACTIONVEA IMP. EXP. Cadastro de Clientes
dbSelectArea(SA1)
ndices CODIGO 11.11000 11.11003 11.11014 12.12006 13.13000 13.13001 15.15140 33.03323 REG 2 5 1 3 8 4 6 7
Arquivo: SB1990 RECNO 1 2 3 4 5 6 7 8 B1_COD
Alias: SB1 B1_DESC PROD. DE REVENDA PROD. ACABADO MAT. PRIMA 1 QUALITY CAIXA GRANDE PA MAT. PRIMA ALCOOL ETILICO LUVA CAIXA PEQUENA PA
Cadastro de Produtos B1_TIPO PA PA MP PA MP MC MP PA B1_UM UN UN UN CX UN L UN CX
11.11014 11.11000 12.12006 13.13001 11.11003 15.15140 33.03323 13.13000
dbSelectArea(SB1)
Arquivo: SC5990 RECNO Posicionamento de registro dbSkip() dbSelectArea(SB1) dbSelectArea(SA1) dbSkip() dbSetOrder(1) dbSkip() dbSkip() dbSeek(11.11014) dbSeek(000002) 1 2 3 4 5 C5_NUM 000001 000005 000007 000008 000009
Alias: SC5 C5_EMISSAO 01/01/04 01/01/04 20/01/04 27/01/04 01/01/04 C5_CLIENTE 000002 000023 000016 000024 000008
Pedidos de Venda C5_PROD 11.11014 13.13000 15.15140 13.13001 11.11000 C5_VALOR 15.000,00 5.600,00 5.600,00 1.000,00 3.450,00 dbSelectArea(SC5)
Posicionamento de ArquivosEmpresa: XX Filial: 02 dbGoTop() dbSeek(xFilial(SC5))FILIAL+NUM 01000001 01000005 01000007 01000008 01000009 02000001 02000005 02000007 02000008 02000009 03000001 03000005 03000007 03000008 03000009 REG 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RECNO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 C5_FILIAL 01 01 01 01 01 02 02 02 02 02 03 03 03 03 03 C5_NUM 000001 000005 000007 000008 000009 000001 000005 000007 000008 000009 000001 000005 000007 000008 000009 C5_EMISSAO 01/01/04 01/01/04 20/01/04 27/01/04 01/01/04 01/01/04 01/01/04 20/01/04 27/01/04 01/01/04 01/01/04 01/01/04 20/01/04 27/01/04 01/01/04 C5_CLIENTE 000002 000023 000016 000024 000008 000002 000023 000016 000024 000008 000002 000023 000016 000024 000008 C5_PROD 11.11014 13.13000 15.15140 13.13001 11.11000 11.11014 13.13000 15.15140 13.13001 11.11000 11.11014 13.13000 15.15140 13.13001 11.11000 C5_VALOR 15.000,00 5.600,00 5.600,00 1.000,00 3.450,00 15.000,00 5.600,00 5.600,00 1.000,00 3.450,00 15.000,00 5.600,00 5.600,00 1.000,00 3.450,00
Posicionamento de ArquivosLeitura sequencial
dbGoTop() While !EOF() dbSkip() End
Posiciona no topo do arquivo
Leitura sequencial, registro a registro
FILIAL+NUMERO+ITEM 01000101 01000102 01000103 01000201 01000202 01000301 01000302 01000303 01000401 01000402
REG 1 2 3 4 5 6 7 8 9 10
RECNO 1 2 3 4 5 6 7 8 9 10
Z2_FILIAL 01 01 01 01 01 01 01 01 01 01
Z2_NUMERO 0001 0001 0001 0002 0002 0003 0003 0003 0004 0004
Z2_ITEM 01 02 03 01 02 01 02 03 01 02
EOF() .T.
Posicionamento de ArquivosAcesso direto ao registro
Por chave completa ou parcialdbSeek(xFilial(SZ2)+0003+02) dbSeek(xFilial(SZ2)+0003) Chave completa Chave parcial
FILIAL+NUMERO+ITEM 01000101 01000102 01000103 01000201 01000202 01000301 01000302 01000303 01000401 01000402
REG 1 2 3 4 5 6 7 8 9 10
RECNO 1 2 3 4 5 6 7 8 9 10
Z2_FILIAL 01 01 01 01 01 01 01 01 01 01
Z2_NUMERO 0001 0001 0001 0002 0002 0003 0003 0003 0004 0004
Z2_ITEM 01 02 03 01 02 01 02 03 01 02
Sobre arquivos Nmero mximo de arquivos abertos: 512 (por thread); A navegao nos registros em ordem do ndice selecionado - dbSetOrder(n). Se for selecionado dbSetOrder(0), a navegao ser pela ordem fsica dos registros (Recno); No SIX, os ndices so numerados de 1 a 9 e A, B,... (campo ORDEM). No dbSetOrder(): 1...9, 10, 11...; dbSkip() avana 1 registro; dbSkip(n) ou dbSkip(-n) avana ou retrocede n registros; dbSelectArea(cAlias) seleciona o arquivo. Caso ainda no esteja aberto, abre-o neste momento. A referncia a um campo de arquivo com o seu Alias ( ex.: MsgAlert(SA1->A1_Nome) ), tambm abre o arquivo, caso no esteja aberto, mesmo sem um dbSelectArea() anterior. Na abertura do arquivo, o primeiro ndice selecionado. O ponteiro de registro posicionado no primeiro registro fsico (no pelo ndice). A funo dbGoTop(), posiciona no primeiro registro do ndice selecionado; No Protheus MDI, os arquivos so abertos dentro da thread e fechados no seu encerramento. Na chamada mesma rotina, mesmo em outra thread, concomitante ou no, os arquivos so reabertos e posicionados no topo e com o primeiro ndice selecionado. No Protheus SDI, uma vez abertos, os arquivos permanecem assim, inclusive com o ltimo posicionamento do ponteiro de registro e o ndice selecionado. A funo dbCloseArea() fecha o arquivo. No MDI: a abertura e o posicionamento de um mesmo arquivo em threads diferentes so independentes, ou seja, podem ser selecionados ndices diferentes e o ponteiro de registros podem ser posicionados em registros diferentes tambm. O bloqueio de um mesmo registro comum, ou seja, se o registro for bloqueado por um dos threads, o outro no poder acess-lo para alterao ou excluso.
Aula 4AxCadastro MBrowse Modelo2 Modelo3
Funes de Tratamento de ArquivosAxCadastro,MBrowse,Modelo2,Modelo3
AxCadastro
AxPesqui() AxVisual() AxInclui() AxAltera() AxDeleta()
AxCadastro
AxInclui()
Ver 100_Cad.prw
AxCadastroCadastre algumas contas No campo E-Mail, coloque: [email protected] E no E-Mail1, coloque: [email protected]
MBrowsePermite uma flexibilidade maior que a AxCadastro
Precisa de duas variveis PRIVATE: cCadastro aRotina Ttulo da janela. array onde devem ser incluidos os botes (no mximo, 10). Esses botes podem ser associados a qualquer funo, inclusive AxInclui(), AxAltera(), etc.
Ver 110_TranM1.prw
Sobre variveisNome := Joo
Referncia a uma varivel atribui o de valor?
S
Cria a varivelNome := Joo Cria como privada
Atribui o valor varivelJoo Var. Nome
S
Varive l existe ?
NErro: varivel no existe
NExiste um arquivo aberto ?
NPara no confundir variveis de memria com campos de arquivos, usa-se o ALIAS: M->Z1_Nome SZ1->Z1_NomeArquivo Codigo Descricao
Arquivo Codigo Nome Joo
SExiste campo com este nome ?
Grava o valor no campoJoo Campo Nome
S
N
varivel de memria campo de arquivo
Sobre variveis
JOSE [email protected]
Para cada campo criada uma varivel de memria com o mesmo nome, onde os dados digitados ficam inicialmente armazenados, antes de ser efetivamente gravados no arquivo: M->Z1_NOME M->Z1_EMAIL M->Z1_EMAIL1 M->Z1_SALDOJOSE [email protected]
Estas variveis so usadas em Validaes, Gatilhos, etc. ExistChav( SZ1 , M->Z1_NOME, 1)
Funes de tratamento de arquivosVer FuncMod2 Ver MarkBrow (exemplo do Baile)
Modelo 2 Enchoice
Nmero Nome Data
Variveis de memria
Item
Tipo
Histrico
Valor
aHeader
GetDados
aCols
Modelo 2 Enchoice
Nmero Nome 1 Item Z2_ITEM 2 0 C SZ2 R 2 Tipo Z2_TIPO 1 0 C SZ2 R 3 Histrico Z2_HIST 20 0 C SZ2 R Data 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
Variveis de memria
GetDados
1 2 3 4 5 6 7 8 9 10 1 2 3
aHeader
01 02 03 1
D S S 2
Deposito Saque Saque 3
10.000,00 300,00 2.500,00 4
.F. .F. .F. 5
aCols
Modelo 2
Array aRotina
lRet mBrowse() .T. Monta os parametros: 1. 2. 3. 4. Variveis de memria aHeader aCols Enchoice Incluso 3 nOpc 4 lRet := Modelo2() Alterao 5 Excluso
Ver 120_TranM2.prw
Modelo 2Criao do aCols para Incluso
Modelo 2
Adiciona uma linha no aCols1 Item Z2_ITEM 2 0 C SZ2 R 1 1 Nil
Criao do aCols para Incluso2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil 3 Histrico Z2_HIST 20 0 C SZ2 R Nil Array(?) Array(5) 3 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Nil Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5 Nil
1 2 3 4 5 6 7 8 9 10
aHeader
aCols
// Como cada elemento de aCols sempre contera um elemento a mais que o aHeader, // adiciona em aCols um ARRAY com o "num.elementos de aHeader + 1", ou seja, 5 elementos.
AAdd(aCols, Array(Len(aHeader)+1))
4
Modelo 2
Preenche o aCols de acordo com o Inicializador-Padro1 Item Z2_ITEM 2 0 C SZ2 R 1 1 Nil 2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil D 3 Histrico Z2_HIST 20 0 C SZ2 R 3 Nil
Criao do aCols para Incluso4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Nil Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5 0,00 Nil
1 2 3 4 5 6 7 8 9 10
aHeader
aCols
// Preenche cada elemento desse array, de acordo com o Inicializador-Padrao do Dic.Dados. For i := 1 To Len(aHeader) Z2_ITEM Z2_VALOR Z2_HIST Z2_TIPO aCols[1][i] := CriaVar(aHeader[i][2])
4 3 2 1
4 3 2 1
Next
Modelo 2
Inicializa a ltima coluna com .F.1 Item Z2_ITEM 2 0 C SZ2 R 1 Nil 2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil D
Criao do aCols para Incluso3 Histrico Z2_HIST 20 0 C SZ2 R 3 Nil 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Nil Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
1 2 3 4 5 6 7 8 9 10 1
aHeader
5 0,00 .F. Nil
aCols
// Inicializa a ultima coluna para o controle da GetDados: deletado ou nao. // aCols[1][5] := .F. aCols[1][Len(aHeader)+1] := .F.
4
Modelo 2
Inicializa a coluna do ITEM com 011 Item Z2_ITEM 2 0 C SZ2 R 1 1 01 2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil D
Criao do aCols para Incluso3 Histrico Z2_HIST 20 0 C SZ2 R 3 Nil 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Nil Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
1 2 3 4 5 6 7 8 9 10
aHeader
5 0,00 .F. Nil
aCols
// Inicializa a coluna do ITEM com 01. // aCols[1][1] := "01" Z2_Nome := (cAlias)->Z2_Nome PEDRO M->Z2_Numero := (cAlias)->Z2_Numero 0003 M->Z2_Data := (cAlias)->Z2_Data 30/03/06
Modelo 2
Posiciona no primeiro registro com o nmero 0003
Criao do aCols para Alterao
M->Z2_Nome := (cAlias)->Z2_Nome PEDRO M->Z2_Numero := (cAlias)->Z2_Numero 0003 M->Z2_Data := (cAlias)->Z2_Data 30/03/06 dbSelectArea(cAlias) dbSetOrder(2) // Z2_Filial + Z2_Nome + Z2_Numero + Z2_Item dbSeek(xFilial(cAlias) + M->Z2_Nome + M->Z2_Numero)
01
PEDRO
0003
While !EOF() .And. (cAlias)->(Z2_Filial+Z2_Numero) == xFilial(cAlias) + M->Z2_Numero ... 01 + 0003 01 + 0003 dbSkip() 01 + 0004 End
Modelo 2
Adiciona uma linha no aCols1 Item Z2_ITEM 2 0 C SZ2 R 1 1 Nil
Criao do aCols para Alterao2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil 3 Histrico Z2_HIST 20 0 C SZ2 R 3 Nil 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Nil Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5 Nil
1 2 3 4 5 6 7 8 9 10
aHeader
aCols
// Como cada elemento de aCols sempre contera um elemento a mais que o aHeader, // adiciona em aCols um ARRAY com o "num.elementos de aHeader + 1", ou seja, 5 elementos.
AAdd(aCols, Array(Len(aHeader)+1))
4
Modelo 2
Preenche o aCols com os dados lidos do arquivo1 Item Z2_ITEM 2 0 C SZ2 R 1 1 01 Nil 2 Tipo Z2_TIPO 1 0 C SZ2 R 2 Nil D 3 Histrico Z2_HIST 20 0 C SZ2 R 3 Deposito Nil
Criao do aCols para Alterao4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5
1 2 3 4 5 6 7 8 9 10
aHeader
Nil 500,00 Nil
aCols
For i := 1 To Len(aHeader) If aHeader[i][10] == "R Z2_ITEM Z2_VALOR Z2_HIST Z2_TIPO aCols[nLin][i] := FieldGet(FieldPos(aHeader[i][2]))
Else
1 4 3 2
4 8 7 6
1 3 2 4
aCols[nLin][i] := CriaVar(aHeader[i][2], .T.) EndIf Next
4 Z2_ITEM 01 02 03
6 Z2_TIPO D D S
7 Z2_HIST Deposito Deposito Saque
8 Z2_VALOR 500,00 150,00 90,00
Modelo 2
Inicializa a ltima coluna com .F.1 Item Z2_ITEM 2 0 C SZ2 R 1 1 01 2 Tipo Z2_TIPO 1 0 C SZ2 R 2 D
Criao do aCols para Alterao3 Histrico Z2_HIST 20 0 C SZ2 R 3 Deposito 4 Valor Z2_VALOR @E 999,999,999.99 12 2 N SZ2 R 4 Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
1 2 3 4 5 6 7 8 9 10
aHeader
5 500,00 .F. Nil
aCols
// Inicializa a ultima coluna para o controle da GetDados: deletado ou nao. // aCols[1][5] := .F. aCols[nLin][Len(aHeader)+1] := .F.
4
Modelo 3Similar ao Modelo2
Diferena: Modelo2 Cabealho e Itens so o mesmo arquivo (ex.: SC7 - Ped. Compras) A definio de quais campos ficaro no cabealho e quais ficaro nos itens, feita no programa. Cabealho um arquivo (ex.: SC5 Itens outro arquivo (ex.: SC6 Cabec. Ped. Vendas) Itens do Ped. Vendas)
Modelo3
Ver 130_TranM3.prw
Aula 5Telas Relatrios Reposicionamento de arquivos Integrao com Excel SQL OOP Arquivos TXT e XML
Telas
TelaEnchoiceBar barra de ferramentas com os botes padres aButtons acrescenta botes na EnchoiceBar Define Font cria uma fonte diferente da padro Define MSDialog define a janela principal Say mostra um texto na tela (normal ou como objeto) Get campo para digitao (normal ou como objeto) Radio Button Check Box Botes Folder Activate MSDialog ativa (desenha) a tela Hide e Show esconde e reexibe um objeto Mudana do texto Exerccio: colocar o foco no campo Nome depois de clicado no boto OK oGetNome:SetFocus()Ver 131_Tela.prw
TelaRDDemo e RDDemo2 mais componentes de tela
Relatrios
RelatriosCriar um relatrio pelo Assistente de Cdigo do IDE: IDE: menu Ferramentas / Assistente de Cdigo
Nome Data Numero Item Tipo Historico Valor Para incluir as ordens, digitar no campo Ordem e clicar neste boto
RelatriosAlterar o nome da User Function para: Rel001() Na funo RunReport(), aps a linha nLin := nLin + 1 , que normalmente est na linha 221, incluir os comandos de impresso dos campos: @nLin,00 @nLin,23 @nLin,34 @nLin,41 @nLin,46 @nLin,50 @nLin,73 PSay PSay PSay PSay PSay PSay PSay SZ2->Z2_Nome SZ2->Z2_Data SZ2->Z2_Numero SZ2->Z2_Item SZ2->Z2_Tipo SZ2->Z2_Hist SZ2->Z2_Valor Picture "@E 999,999,999.99"
Compilar e executar
RelatriosPerguntas
Arquivo SX1 Funo Pergunte(): l as perguntas e cria as variveis correspondentes cada pergunta: MV_PAR01, MV_PAR02, etc. Estas variveis so Private. Sintaxe: Pergunte(cPerg, lMostra) cPerg lMostra cdigo do grupo de perguntas .T. abre a tela de perguntas .F. no abre a tela; apenas cria as variveis
RelatriosPerguntas
Abrir e compilar o programa CriaSX1.prw Na parte inicial do programa, antes da linha Pergunte(cPerg, .F.) , incluir a chamada funo u_CriaSX1(cPerg) Na funo RunReport(), na parte da impresso dos campos, incluir a lgica para imprimir somente se o Nome e a Data estiverem dentro dos limites informados nas perguntas Conta de , Conta at , Data de e Data atIf SZ2->Z2_Nome >= mv_Par01 .And. SZ2->Z2_Nome Z2_Data >= mv_Par03 .And. SZ2->Z2_Data Z2_Nome ... EndIf
Relatriosndice temporrio
ndices permanentes so criados no Dicionrio de Dados. A incluso/alterao de registros, todos os ndices tambm so atualizados.
cada
Por questes de performance, somente ndices usados com muita freqncia deveriam ser permanentes. ndices usados esporadicamente, devero ser criados como temporrios por meio da funo IndRegua(). Funo IndRegua(): permite criar ndices temporrios, inclusive com a possibilidade de estabelecer um filtro. Ao criar um ndice temporrio, os ndices originais so desativados, e devero ser reativados por meio da funo RetIndex(). O arquivo temporrio dever ser apagado pela funo FErase().
Relatriosndice temporrio
Na funo RunReport(), na linha dbSetOrder(nOrdem) por:
nOrdem := aReturn[8] , substituir
If nOrdem < 3 dbSetOrder(nOrdem) Else cArqInd := CriaTrab(Nil, .F.) cChave := "xFilial('SZ2') + DtoS(Z2_Data)" cFiltro := "Z2_Filial==xFilial('SZ2') .And. Z2_Tipo == '" + If(mv_Par05==1,"D","S") + "'" cOrdem := " " lMostra := .T. IndRegua("SZ2", cArqInd, cChave, cOrdem, cFiltro, "Indexando...", lMostra) EndIf
No final da funo, antes da linha Return , incluir: RetIndex("SZ2") FErase(cArqInd + OrdBagExt())
RelatriosFunes usadas nos programas de relatrios
SetPrint()
janela principal para definio das propriedades do relatrio (array aReturn). aReturn[1] aReturn[2] aReturn[3] aReturn[4] aReturn[5] aReturn[6] aReturn[7] aReturn[8] = = = = = = = = Reservado para formulrio Reservado para nmero de vias Destinatrio Formato: 1-Retrato, 2-Paisagem Tipo midia: 1-Disco, 2-Via spool, 3-Direto na porta, 4-EMail "NomeArq"-Disco, "LPT1"-Via spool, "LPT1"-Direto na porta, ""-Cancelado Expresso do filtro Ordem a ser selecionada
SetDefault() Pergunte() RptStatus() SetRegua() IncRegua()
prepara o ambiente de impresso de acordo com as informaes contidas no array aReturn, obtidas atravs da funo SetPrint(). abre a janela de perguntas. executa a funo de impresso, mostrando uma rgua de progresso. define o limite da rgua de progresso criada pela funo RptStatus(). incrementa a progresso da rgua.
SIGARPM
Fazer um relatrio com as transaes de cada cliente, listando todos os dados do SZ2 e tambm o e_mail e o saldo atual.
Pontos de Entrada
Crie um Ponto de Entrada para modificar o clculo do Saldo aps um Saque, considerando apenas 60% do seu valor.
Reposicionamento de ArquivosAs funes de Ponto de Entrada que despocionarem arquivos tm a responsabilidade de devolv-los na mesma situao em que receberam. Para tanto, estas trs informaes devem ser guardadas: cAlias := Alias() nOrdem := IndexOrd() nRecno := Recno() Na sada, devem ser restauradas: dbSelectArea(cAlias) dbSetOrder(nOrdem) dbGoTo(nRecno) Arquivo atualmente selecionado ndice selecionado Nmero do registro posicionado
Reposicionamento de ArquivosGetArea() RestArea() Guarda as trs informaes num array RestauraUser Function MT010Inc() Local aAreaSA1 := SA1->(GetArea()) Local aAreaSB1 := SB1->(GetArea()) Local aAreaSC5 := SC5->(GetArea()) ... RestArea(aAreaSA1) RestArea(aAreaSB1) RestArea(aAreaSC5) Return
Obs.: esta regra vale para qualquer funo.
Integrao com Excel
APExcel
Protheusu_PlanMov()
=MSGetArray(A1;Siga("U_PLANMOV"))
Excel
Array de dados
Ver 170_Planilha.prw
SQL - Structured Query LanguageSELECT Natureza, Data, Valor FROM Movto SELECT MOVTO.Natureza, MOVTO.Data, MOVTO.Valor, ORCADO.Tipo FROM MOVTO, ORCADO SELECT * FROM Movto WHERE Valor > 100 SELECT * FROM Orcado WHERE Natureza = Casa Outras clusulas do SELECT: GROUP BY, ORDER BY, HAVING, AND, OR, IN, DISTINCT, BETWEEN, LIKE. VIEW ou Viso. A View virtualVer 090_DBFSQL.prw Ver texto Programando SQL com RDMake Relao de Stored Procedures no PPT Oficial
MPSDUPrograma utilitrio para acesso, visualizao e pequenas manutenes de arquivos Menu Arquivo / Abrir3
1
MPSDU
TCP
4Environment
2Administrador admin
MPSDU
OOP
Programao Orientada a Objetos
Classes Mtodos PropriedadesUm objeto uma instncia da sua classe. Por exemplo, o boto da classe tButton. criado a partir da execuo do mtodo construtor. oBotaoOK := tButton():New() Suas propriedades podem ser definidas ou alteradas. oBotaoOK:cCaption oBotaoOK:nWidth oBotaoOK:nHeight oBotaoOK:bAction := := := := Ok 50 15 {|| u_Grava() }
O AdvPL permite usar as classes pr-definidas ou criar novas classes, substituindo a programao baseada em comandos e funes pela orientao a objetos.Ver 143_Objetos.prw
Arquivos TextoO IDE possui um Assistente de Gerao e Importao de arquivos texto: IDE: menu Ferramentas / Assistente de CdigoSZ1JOSE 00000956000 SZ230/03/06DDeposito inicial 00001000000 SZ230/03/06SPagto. conta de luz 00000030000 SZ230/03/06SSupermercado 00000014000 SZ1MARIA 00000150000 SZ230/03/06DAbertura de conta 00000200000 SZ230/03/06SLojas Marina 00000050000 SZ1PEDRO 00000056000 SZ230/03/06DDeposito 00000050000 SZ230/03/06DDeposito 00000015000 SZ230/03/06SConta de telefone 00000009000
Programa TXT: gera e l arquivos TXT. necessrio criar, abaixo do diretrio \MP_DATA, o diretrio \TXT, onde ser gravado o arquivo CONTAS.TXT.Ver 150_TXT.prw
XML JOSE 9560 30/03/06 D Deposito inicial 10000 30/03/06 S Pagto. conta de luz 300
Programa XML: gera e l arquivos XML. Ser gravado no diretrio \TXT, o arquivo CONTAS.XML. Este arquivo poder ser visualizado no Internet Explorer.Ver 160_XML.prw
Workflow WebServices AdvPL ASP
Aula 6
WorkFlowFluxo manual
Contas
Efetua transaes
Cliente
Transaes
Aguardando o aprovador acessar o sistema...
Aprovador
WorkFlowFluxo automticoSaldo Negativo? Dispara um WorkFlow WFSalNeg() WFRetorno() TransaesExecuta a funo de retorno
Contas
Efetua transaes
Cliente
Job WFRET
Caixa de SadaE-Mail
WFReturn()
Captura a resposta
Resposta (Aprovado ou Reprovado)
Caixa de Entrada
Aprovador
WebServicesIntegrao de sistemas
Via troca de arquivosSistema A Sistema B
TXT/XML
Via Web ServicesSistema AWSDL JOSE http://... 1000 Web Service
Sistema B
WebServicesConfigurao
O Protheus dispe de um Assistente de Configurao: \ERP811\BIN\REMOTE\MP8WIZARD.EXE
WebServicesConfigurao
WS Protheus 8 Web Services ws \web\ws ENVIRONMENT
WebServicesConfigurao
localhost/ws/9901
WebServicesConfigurao
WebServicesConfigurao MP8SRV.INI[HTTP] ENABLE=1 PORT=80 Acesso ao WebService: http://localhost/ws/9901/... http://localhost/ws1/9901/... [localhost/ws1/9901] [localhost/ws/9901] ENABLE=1 ENABLE=1 PATH=C:\ERP811\MP_Data\web\ws1 PATH=C:\ERP811\MP_Data\web\ws ENVIRONMENT=ENVIRONMENT1 ENVIRONMENT=ENVIRONMENT INSTANCENAME=ws1 INSTANCENAME=ws RESPONSEJOB=JOB_WS1_9901 RESPONSEJOB=JOB_WS_9901 DEFAULTPAGE=wsindex.apw DEFAULTPAGE=wsindex.apw [JOB_WS1_9901] [JOB_WS_9901] TYPE=WEBEX TYPE=WEBEX ENVIRONMENT=ENVIRONMENT1 ENVIRONMENT=ENVIRONMENT INSTANCES=1,3 INSTANCES=1,3 SIGAWEB=WS SIGAWEB=WS INSTANCENAME=ws1 INSTANCENAME=ws ONSTART=__WSSTART ONSTART=__WSSTART ONCONNECT=__WSCONNECT ONCONNECT=__WSCONNECT Emp. 99, Filial 01 PREPAREIN=99,01 PREPAREIN=99,01 [ONSTART] [ONSTART] JOBS=JOB_WS_9901,JOB_WS1_9901 JOBS=JOB_WS_9901
[EVIRONMENT] SourcePath=C:\ERP811\APO RootPath=C:\ERP811\MP_Data StartPath=\system\ ... [EVIRONMENT1] SourcePath=C:\ERP811\APO1 RootPath=C:\ERP811\MP_Data StartPath=\system\ ...
WebServicesAps a configurao, ver a lista de Web Services disponveis no Protheus: Reinicializar o server No Internet Explorer: http://localhost/ws/9901/wsindex.apw
WebServicesIDE
http://localhost/FORNECESALDO.apw?WSDL
http://localhost WebService ForneceSaldo Mtodo BuscaSaldo Nome Saldo
WSDL Cliente WSForneceSaldo Mtodo BuscaSaldo Nome Saldo
Sistema
Contas
WebServices
http://localhost WSDL Cliente WSForneceSaldo Mtodo BuscaSaldo Nome Saldo ConsultaSaldoTela
WebService ForneceSaldo Mtodo BuscaSaldo Nome Saldo1000,00 Joo
Sistema
Nome: Joo Saldo: 1000,00OK
Contas
Saldo(cNome) oWS := WSForneceSaldo():New() oWS:BuscaSaldo(cNome)
Portal ProtheusConfigurao
Para o desenvolvimento de pginas Internet, via AdvPL ASP, necessrio configurar o mdulo web Portal Protheus:
Portal ProtheusConfigurao
PP Portal Protheus pp \web\pp ENVIRONMENT
http://localhost/ws/9901
Portal ProtheusConfigurao
localhost/pp
Portal ProtheusConfigurao
HTMLPgina esttica (html)
Servidor Internet
Browserhttp://www.empresax.com.br/inicio.htmBenvindo ao site da Empresa X Hoje 10/08/05 Benvindo ao site da Empresa X
inicio.htm
Pgina esttica
Hoje 10/08/05
HTML + ASPPgina dinmica (html + ASP)
Servidor Internet
Browserhttp://www.empresax.com.br/inicio.htmBenvindo ao site da Empresa X Hoje 21/02/06
21/02/06
inicio.htm
Benvindo ao site da Empresa X
Pgina dinmica, com a data obtida do servidor
Hoje
AdvPL ASPPgina com html + AdvPL ASP
Servidor Internet Protheus
Browserhttp://www.empresax.com.br/u_inicio.apwBenvindo ao site da Empresa X Hoje 21/02/06
21/02/06
RPO inicio.prw
User Function Inicio() Local cHtml WEB EXTENDED INIT cHtml cHtml := ExecInPage(Pagina) WEB EXTENDED END Return cHtml
Pagina.aph Ver Ver Ver Ver Ver 230_ASP1.prw 240_ASP2.prw 250_ASP3.prw 260_ASP4.prw 270_ASP5.prw e 235_ASP1.aph e 245_ASP2.aph e 255_ASP3.aph e 265_ASP4.aph e 275_ASP5.aph Benvindo ao site da Empresa X Hoje
Call Center
TelnetIntegrao com equipamentos micro-terminais
No MP8SRV.INI, acrescentar:[TELNET] Enable=1 Environment=Environment Main=MTTRAN Port=1024
RPO MTTran()
Ver 330_MTTran.prw e 331_MTFunc.prw
DEMDocumentao Eletrnica Microsiga
Linguagem AdvPL Tecnologia Protheus Dicas e Notcias F.A.Q. Guias de Referncia Releases Sistema
Top Connect com SQL
Duvidas descrio da GetDados e da Enchoice Porque na U_Deleta tem parametros Qdo vai para a funo Alterar a Mbrowse j jogou os cpos para a memoria. Porque precisa do nReg Qdo se usa passagem por referencia. No o mesmo que Private/local Exemplos de CodeBlock com Eval, aEval e DBEval O que o ultimo parametro do IndRegua (.T.). Como faz para funcionar o D de descendente No Modelo 2 toda vez ele l o SX3? Como funcionar a UDC #command
Back-Up
Segurana
Dicionrio de Dados
Dicionrio de Dados
Programa A
Programa C
Programa B
Top Related