Académique Documents
Professionnel Documents
Culture Documents
AdvPL e Protheus
Aula 1
Evoluo e Arquitetura do Sistema Arquivos Customizaes Case Sistema de Contas Correntes
Assembler Batch Natural Adabas Online DBase II III, Clipper Summer Clipper 5 SIGA Advanced FiveWin/Top/Coencisa, VO, Delphi, SQL
2000
Multi-Camada
Remote (MP8RMT.EXE)
Client
RPO (MPDP811.RPO)
Aplication Server
Top Connect
DB2 MySQL
Database Server
Mltiplas configuraes
modem
..
..
modem
.....
Hub
Hub .....
Estrutura Protheus
REMOTE
Programa Fonte
MATA010
SERVER
Cad.Produtos
RPO
MATA010
MATA410 CTBR040
Ped.Vendas
Executa CTBR040
Balancete Cont.
Aplicativos
Protheus
Conjuntos de arquivos
RPO
arquivo binrio com os APOs BUILD executveis, DLLs e RPO Patch atualizaes do RPO
Remote
Windows Linux Hand
Terminal Remoto
Thin
Client Baixo trfego na rede Multi-plataforma Atualizao automtica ASP - Aplication Server Provider Browser Internet (HTML)
INCLUDE
MP_DATA
Atalhos
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
OU
Protheus Server
Rede Intranet Extranet Internet
Protheus Remote
Configurador
SIGACFG
TCP
Environment
Configurador
Senha: admin
Configurador
Configurador
CONFIGURADOR
Ambiente ...
Usurio ...
Bases
de
Dados..
Empresas ...
Ajuda ...
Possibilita a definio do formato das interfaces de acesso aos mdulos do sistema, criao e manuteno de menus, tabelas, parmetros e perguntas
Oferece um conjunto completo de funes para a criao e manuteno do Dicionrio de Dados (campos com suas caractersticas e seus gatilhos e validaes).
Permite a criao de bases para novas empresas e consolida todos os fatos ocorridos no sistema por meio de consulta aos arquivos de LOG.
Arquivos Famlia SX
Pasta \SYSTEM
Arquivo SX1 SX2 SX3 SX4 SX5 SX6 SX7 SX9 SXA SXB SXD SXE SXF SXG SXK SXO SIX .XNU 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
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
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
Filiais
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
Arquivos de Dados
Modo de Acesso
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)
xFilial(SC5) cFilAnt
Arquivos de ndices
ndices Todo arquivo precisa ter pelo menos um ndice ndice Primrio:
Ordenao de registros
REGISTRO 03 05 01 02 04
REGISTRO 01 02 03 04 05
A1_FILIAL
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 ndices
ndices 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.
1 2 ... 7 8 9
A1_TIPO A1_TIPO
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
Customizao
Parmetros
Customizao
Tabelas
Customizao
Perguntas
Customizao
Insero de Cdigo-Fonte
Exemplo: Um Pedido de Venda includo Na emisso da NF, o preo deve ser reajustado em 25%
Programa-fonte
MATA460A Emisso NF
SERVER Frmulas
APO MATA460A
Execuo do MATA460A
Preo := SC6->C6_PRCVEN * 1.25
SC6->C6_PRCVEN * 1.25
RPO
MATA460A
Preo := &Formula
Emisso NF
Customizao
Insero de Cdigo-Fonte
Frmula 003 - Reajuste pelo dlar: SC6->C6_PRCVEN * (RecMoeda(dDataBase,2)/ If(RecMoeda(SC5->C5_EMISSAO,2) <> 0, RecMoeda(SC5->C5_EMISSAO,2),1))
Interpretador
FONTE
DBase, Access
PCode
Visual Basic, AdvPl Abap, Oracle,Java
Executvel + Interpretador
Clipper, Visual Objects
Executvel
Delphi, C
Compilao
A = A + &B
MACRO
A=7
5 End 3 2
3456
3
7654
Customizao
Validaes
Validaes: Dicionrio de Dados (SX3) Campo Campo Campo Campo Cd.Cliente: Natureza: Estado: CNPJ: ExistChav(SA1) ExistCpo(SED) ExistCpo(SX5, 12+M->A1_EST) CGC(M->A1_CGC)
Customizao
Gatilhos
Quant.
Vr.Unit.
Total
10
2,00
20,00
Customizao
Campos de Arquivos
Campos: Campos dos Lanamentos Padronizados (SI5) Dbito: If(SD3->D3_TIPO=MC, 33201+SD3->D3_CC, 11303)
Customizao
User 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)
Customizao
Ponto 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.
// 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.
Configurador - SIGACFG
Dicionrio Menus
de Dados
Exerccios
Crie um parmetro (SX6) para o limite mximo por transao:
Nome da Var.: Tipo: Contedo: Descrio: MV_VRMAX N 10000 Valor maximo da transacao
Crie uma tabela (SX5) de tipos de transaes: Tabela ZZ D S E J R Depsito Saque Encargos Juros Resgates
Exerccio
Crie 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
Exerccio
Insira a validao no arquivo SI2, campo I2_VALOR:
Exerccio
Crie um Ponto de Entrada para modificar o clculo do Saldo aps um Saque, considerando apenas 60% do seu valor.
Exerccio
Lanamento Contbil Automtico
Mostrar o lanamento 666 - Requisio
Case
Sistema de Contas Correntes
Case
Sistema de Contas Correntes
Contas Transaes
Consultas
Relatrios Excel WorkFlow TXT
Case
Sistema de Contas Correntes
Tabelas do sistema
CONTAS
Nome E-Mail E-Mail1 Saldo Tem Refere-se
TRANSAES
Nome Nmero da Transao Item da Transao Tipo (Depsito ou Saque) Data Histrico Saldo Atual (virtual) Valor Aprovao
Prefixo: Path: Nome: Descrio: Desc.Esp.: Desc.Ingls: Modo Acesso: Prefixo: Path: Nome: Descrio: Desc.Esp.: Desc.Ingls: Modo Acesso:
SZ1 \DATA\ SZ1990 CONTAS CONTAS CONTAS COMPARTILHADO SZ2 \DATA\ SZ2990 TRANSAES TRANSAES TRANSAES EXCLUSIVO
Modo de Acesso: Compartilhado Exclusivo Filial = branco Filial = nmero da Filial (var. pblica cFilAnt)
Funo xFilial(Alias)
Picture varivel, que pode ser retornada por uma funo Real, Virtual Alterar, Visualizar
Nome do cliente
D=Deposito;S=Saque
dDataBase
GetSXENum(SZ2, Z2_NUMERO)
Campo Z2_Nome
F3
Exerccio
Cadastrar os campos do SZ1
Campo 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
ExistChav(SZ1, M->Z1_NOME, 1)
Z2_NOME
Z2_NUMERO Z2_ITEM Z2_DATA Z2_TIPO D=Deposito;S=Saque
ExistCpo(SZ1, M->Z2_NOME, 1)
GetSXENum(SZ2, Z2_NUMERO) ExistChav("SZ2", M->Z2_NUMERO+ M->Z2_ITEM, 1) dDataBase D
Exerccio
Campos do SZ2 (j esto cadastrados)
Campo Inform. Uso
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
Dec.
@!
Formato
Contexto
Real Real
Propr.
Alt. Visual Alt. Alt. Alt. Alt. Alt. Visual Visual
Ttulo
Nome Numero Item Data Tipo Historico Valor Saldo Aprovado
Obrig
Usa
Brw
99
2 2
@E 999,999,999.99 @E 999,999,999.99
Exerccio
Criao dos ndices
1 3
Chave SZ1
Nickname
Z1_Filial + Z1_Nome
NOME
SZ2
NR_IT NOME_NR_IT
Exerccios
Crie a Consulta Padro que mostre o arquivo SZ1 e insira-a no campo Z2_Nome
SIGACFG: 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
Exerccio
Crie em ERP o menu do Sistema de Contas Correntes
SIGACFG: menu Ambiente / Cadastro / Menus
Contas Correntes
Consultas Atualizaes
Programa:
Relatrios
Programa:
Con001
Rel001
Contas
Programa:
Transaes
Cad
Modelo 1
Programa:
Modelo 2
Programa:
Modelo 3
Programa:
TranM1
TranM2
TranM3
Aula 2
Programao Comandos e funes Operadores IDE Variveis de memria Array Funes
Programao
Exerccios de Lgica
Aqurio
Preta Branca
Preta Preta
Branca Branca
3 cestos: 1 hiptese
Preta Branca Preta Preta
Branca Branca
3 cestos: 2 hiptese
Preta Branca Preta Preta
Branca Branca
Resposta
Vai 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 passarela
Quatro 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.
Resposta
Vai
o1e2
o1 o2 o 5 e 10 o1e2
2
3 13 15 17
Volta Vai
Volta Vai
Programa
Conjunto de Instrues: Comandos e Funes
Instrues 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 luz
Sim Est Escuro ? No Sim Sim
Resmungar
A Esposa quer $$ ? No
Dar-lhe R$ 100,00
Sim
Beijar a esposa
Casado h mais de 1 ano ? No
Operadores
Matemticos
** ou ^
x := 10 + 20
Operadores
Relacionais
<
>
==
<=
>=
<> ou # ou !=
If nQtde < nSaldo MsgAlert(Pedido liberado) Else MsgAlert(Pedido bloqueado: estoque insuficiente) EndIf
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
V V F F
.And.
Operadores
Lgicos
.And.
.Or.
.Not. ou !
If cEstNeg == "S" .Or. nQtdVenda < nSaldo MsgAlert("OK, pode faturar!") Else MsgAlert("Estoque insuficiente!") EndIf
cEstNeg == S V
.Or.
V
F F
F
V F
V
V F
Operadores
Lgicos
.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
.And.
( cEstNeg == S
V V F
.Or.
V
F F F F
F
V V F F
F
V F V F
F
V V V F
Operadores
Lgicos
.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
.And.
( cEstNeg == S
V V F
.Or.
V
F F F F
F
V V F F
F
V F V F
F
V V V F
F
F F F F
Operadores
Lgicos
.And.
.Or.
.Not. ou !
Operadores
Atribuio
:=
+=
-=
*=
/=
^= ou **=
%=
x := 10
o mesmo que:
x := x + 20 x += 20
nValor := nValor + (nValor * 18 / 100) nValor += (nValor * 18 / 100)
o mesmo que:
Operadores
Incremento / Decremento
i++
i++
++i
i--
--i
i := 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
Operadores
Strings
x + y
x - y
x $ y
JooSilva
AB
.T. .F.
Operadores
Especiais
( ) { } [ ] & || -> @ ;
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 linha
If cCredito == "OK" .And.; (cEstNeg == "S" .Or. nQtdVenda < nSaldo) MsgAlert("OK, pode faturar!") Else MsgAlert("Sem credito ou estoque insuficiente!") EndIf
Objetos
oBotao:cCaption := OK
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
Projeto (.PRJ)
Programa (.PRW)
Funo Funo Funo
Programa (.PRW)
Programa (.PRW)
Variveis de Memria
Armazenamento temporrio de dados
Cadastro
Nome: Jos
Memria
Nome Jos Valor 1000
CPU
nValor
dData lOk
n X := 1
nX numrico X numrico
c X := Jos
X agoracaracter cX caracter
n X := n X + 1
Caractere
Numricas Data Lgicas
Casa
1234.56 CtoD(25/10/05) .T. .F.
Variveis do tipo Array: todos os nomes numa nica varivel aNomes := {Joao, Alberto, Pedro, Maria} aNomes[1] aNomes[2] aNomes[3] aNomes[4]
Armrio 2
Alberto
Armrio 3
Pedro
Armrio 4
Maria
Array
Armrio
Gaveta 1 Joao Gaveta 2 Alberto Gaveta 3 Pedro Gaveta 4 Maria
Gaveta 1
1
Joao
Gaveta 2
3
T
Gaveta 3
3
F
Gaveta 4
3
T
2
25
1
Alberto
2
18
1
Pedro
2
40
1
Maria
2
33
3
F
Gaveta 1
1
Joao 25 T
Gaveta 2
1
Alberto 18 F
Gaveta 3
1
Pedro 40 T
Gaveta 4
1
Maria 33 F
2
3
2
3
2
3
2
3
AAdd(aNomes, Pedro)
AAdd(aNomes, Maria)
Atribuio de valor aos elementos do array aArray[1] aArray[2] aArray[3] aArray[4] aArray[5] aArray := := := := := A B C D E
{A, B, C, D, E}
Funes
Conjunto de Comandos
Programa.PRW
User Function Teste() Comandos Comandos Comandos Comandos Return
Funes
Rotinas repetitivas
User Function CadCli() Comandos If CGC(cCGC) continua Else abandona EndIf Comandos Comandos Comandos Return Function CGC(cCGC) If cCGC OK lOK := .T. Else lOK := .F. EndIf User Function CadFor() Comandos Comandos Comandos If CGC(cCGC) continua Else abandona EndIf Comandos Return
.T. ou .F.
.T. ou .F.
Return lOK
Funes
Programao Estruturada
Funes
Passagem de parmetros User Function Venda() nImposto := u_ICMS(NE, 1000) Return
Private
Visvel na funo em que foi criada e nas funes seguintes
Public
Visvel em todas as funes, a partir do momento em que foi criada
Static
Visvel somente no programa (PRW)
LOCAL
Contedo
PRIVATE
Contedo
PUBLIC
Contedo
LOCAL cVar
Contedo Func1
PRIVATE
Contedo
PUBLIC
Contedo
LOCAL
cVar cVar1
Contedo
Func2 Func2
PRIVATE
cVar2
Contedo
Private Func2
PUBLIC
cVar3
Contedo
Public Func2
LOCAL
Contedo
PRIVATE
cVar2
Contedo
ABC
PUBLIC
cVar3
Contedo
Public Func2
LOCAL
cVar cVar1
Contedo
Func2 Func2
PRIVATE
cVar2
Contedo
ABC
PUBLIC
cVar3
Contedo
Public Func2
LOCAL cVar
Contedo Func1
Local cVar := "Func2" Local cVar1 := "Func2" Private cVar2 := "Private Func2" Public cVar3 := "Public Func2"
u_Func3() Return User Function Func3() cVar2 := ABC" Return
Ver 052_EscopoVar.prw
PRIVATE
Contedo
PUBLIC
cVar3
Contedo
Public Func2
Passagem de Parmetros
Por 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
Passagem de Parmetros
Por Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y)
x=1 y=2
x := 50 y := 100
Return
Ver 060_Param.prw
Passagem de Parmetros
Por Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y)
x=1 y=2
x := 50 y := 100
Return
Ver 060_Param.prw
x = 50 y = 100
Passagem de Parmetros
Por Valor User Function Param1() Local x := 1 Local y := 2 u_Param2(x, y) MsgAlert(x+y) Return User Function Param2(x, y)
x=1 y=2
x := 50 y := 100
Return
Ver 060_Param.prw
Passagem de Parmetros
Por Referncia User Function Param1() Local x := 1 Local y := 2 u_Param2(@x, y) MsgAlert(x+y) Return User Function Param2(x, y)
x=1 y=2
x := 50 y := 100
Return
Ver 060_Param.prw
Passagem de Parmetros
Por 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=2
x := 50 y := 100
Return
Ver 060_Param.prw
y = 100
Passagem de Parmetros
Por 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=2
x := 50 y := 100
Return
Ver 060_Param.prw
Ver 053_Tratamentos.PRW
Aula 3
Macro Bloco de Cdigo UDC Semforos Arquivos e ndices
Macro-Substituio
User 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-Substituio
User Function Reajuste() Local cFormula dbSelectArea("SM4") dbSetOrder(1) dbSeek(xFilial("SM4") + "001") cFormula := SB1->B1_Prv1 * 1.25 SM4->M4_Formula
Arquivo 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!") Return
Ver Reajuste.PRW
Macro-Substituio
Aplicao de Macros
Validaes
M->D1_QUANT * M->D1_VUNIT
Frmulas
SB1->B1_Prv1 * 1.25
Lanamentos
Contbeis Automticos
Bloco de Cdigo
nResult := EVal(bBloco)
nResult = 20
nResult = 10
Ver 051_Bloco.prw
Bloco de Cdigo
DBEval()
Bloco de Cdigo
Ordenao de array
aMatriz := { {Joao
,30} }
.F. .T.
Ver 050_Array.prw
Bloco de Cdigo
Ordenao de array
,30} }
.T. .F.
Ver 050_Array.prw
Ver 080_UDC.prw
Semforos
Controle de numerao sequencial
Confirma o nmero
Reutiliza o nmero Confirma se o nmero est mesmo disponvel Manuteno do SXE/SXF ou Hardlock
Arquivos MS: s alias GetSXENum(SC5) Arquivos de usurio: alias e campo GetSXENum(SZ2, Z2_NUMERO)
Exemplo:
Exemplos em 120_TranM2
Arquivos
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
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
Modo de Acesso
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)
xFilial(SC5) cFilAnt
Arquivos e ndices
ndice: CDIGO
CODIGO 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: NOME
NOME 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 ndices
ndices
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
Cadastro de Clientes
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.
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
Alias: SB1 B1_DESC PROD. DE REVENDA PROD. ACABADO MAT. PRIMA 1 QUALITY CAIXA GRANDE PA MAT. PRIMA ALCOOL ETILICO LUVA CAIXA PEQUENA PA
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 Arquivos
Empresa: 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 Arquivos
Leitura sequencial
dbGoTop()
While !EOF()
dbSkip() End
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 Arquivos
Acesso direto ao 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
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 4
AxCadastro MBrowse Modelo2 Modelo3
AxCadastro
AxAltera()
AxDeleta()
AxCadastro
AxInclui()
Ver 100_Cad.prw
AxCadastro
Cadastre algumas contas No campo E-Mail, coloque: aprovador@tecnico.com.br E no E-Mail1, coloque: aprovador1@tecnico.com.br
MBrowse
Permite uma flexibilidade maior que a AxCadastro
Ver 110_TranM1.prw
Sobre variveis
Nome := Joo
Cria a varivel
Nome := Joo
Varive l existe ?
N
Erro: varivel no existe
Arquivo
Codigo Nome Joo
N
Para no confundir variveis de memria com campos de arquivos, usa-se o ALIAS: M->Z1_Nome SZ1->Z1_Nome
Arquivo Codigo Descricao
S
Existe campo com este nome ?
Sobre variveis
JOSE aprovador@tecnico.com.br
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_SALDO
JOSE aprovador@tecnico.com.br
Modelo 2 Enchoice
Variveis de memria
Item
Tipo
Histrico
Valor
aHeader
GetDados
aCols
Modelo 2 Enchoice
Nmero Nome 1 Item Z2_ITEM 2 0 C SZ2 R 01 02 03 1 2 Tipo Z2_TIPO 1 0 C SZ2 R D S S 2 3 Histrico Z2_HIST 20 0 C SZ2 R Deposito Saque Saque 3 Data 4
Variveis de memria
GetDados
1 2 3 4 5 6 7 8 9 10 1 2 3
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto .F. .F. .F. 5
aHeader
aCols
Modelo 2
Array aRotina
lRet mBrowse() .T. Monta os parametros: 1. 2. 3. 4. Variveis de memria aHeader aCols Enchoice 3 5
Incluso
nOpc 4
Excluso
lRet := Modelo2()
Alterao
Ver 120_TranM2.prw
Modelo 2
Criao do aCols para Incluso
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5 Nil
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))
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5
aHeader
0,00 Nil
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]) Next
4 3 2 1
4 3 2 1
1 2 3 4 5 6 7 8 9 10 1
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
aHeader
aCols
// Inicializa a ultima coluna para o controle da GetDados: deletado ou nao. // aCols[1][5] := .F. aCols[1][Len(aHeader)+1] := .F.
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
aHeader
aCols
// Inicializa a coluna do ITEM com 01. // aCols[1][1] := "01" <-- teria problema se o usuario alterasse a posicao do // campo Z2_ITEM no Dic. de Dados. aCols[1][AScan(aHeader, {|x|Trim(x[2])=="Z2_ITEM"})] := "01"
Modelo 2
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
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5 Nil
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))
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto 5
aHeader
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
8 4 7 6
1 3 2 4
4 Z2_ITEM 01 02 03
6 Z2_TIPO D D S
1 2 3 4 5 6 7 8 9 10
Titulo Campo Picture Tamanho Decimal Valid. Usado Tipo Arquivo Contexto
aHeader
aCols
// Inicializa a ultima coluna para o controle da GetDados: deletado ou nao. // aCols[1][5] := .F. aCols[nLin][Len(aHeader)+1] := .F.
Modelo 3
Similar 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. Modelo3 Cabealho um arquivo (ex.: SC5 Cabec. Ped. Vendas) Itens outro arquivo (ex.: SC6 Itens do Ped. Vendas)
Ver 130_TranM3.prw
Aula 5
Telas Relatrios Reposicionamento de arquivos Integrao com Excel SQL OOP Arquivos TXT e XML
Telas
Tela
EnchoiceBar 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
Tela
RDDemo e RDDemo2 mais componentes de tela
Relatrios
Relatrios
Criar 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
Relatrios
Alterar 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
Relatrios
Perguntas
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 cdigo do grupo de perguntas lMostra .T. abre a tela de perguntas .F. no abre a tela; apenas cria as variveis
Relatrios
Perguntas
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 at
If SZ2->Z2_Nome >= mv_Par01 .And. SZ2->Z2_Nome <= mv_Par02 .And.; SZ2->Z2_Data >= mv_Par03 .And. SZ2->Z2_Data <= mv_Par04 @nLin,00 PSay SZ2->Z2_Nome ... EndIf
Relatrios
ndice 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().
Relatrios
ndice temporrio
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
Relatrios
Funes usadas nos programas de relatrios
SetPrint()
janela principal para definio das propriedades do relatrio (array aReturn). 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
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.
SetRegua()
IncRegua()
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 Arquivos
As 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 Arquivos
GetArea() RestArea() Guarda as trs informaes num array Restaura
User Function MT010Inc() Local aAreaSA1 := SA1->(GetArea()) Local aAreaSB1 := SB1->(GetArea()) Local aAreaSC5 := SC5->(GetArea()) ... RestArea(aAreaSA1) RestArea(aAreaSB1) RestArea(aAreaSC5) Return
APExcel
Protheus
u_PlanMov()
=MSGetArray(A1;Siga("U_PLANMOV"))
Excel
Array de dados
Ver 170_Planilha.prw
MPSDU
Programa utilitrio para acesso, visualizao e pequenas manutenes de arquivos Menu Arquivo / Abrir
3
MPSDU
TCP
4
Environment
2
Administrador admin
MPSDU
Um 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 Texto
O IDE possui um Assistente de Gerao e Importao de arquivos texto:
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
<Contas> <Conta> <Nome>JOSE</Nome> <Saldo>9560</Saldo>
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
Aula 6
Workflow WebServices AdvPL ASP
WorkFlow
Fluxo manual
Contas
Efetua transaes
Cliente
Transaes
Aprovador
WorkFlow
Fluxo automtico
Saldo Negativo? Dispara um WorkFlow WFSalNeg() WFRetorno() Transaes
Executa a funo de retorno
Contas
Efetua transaes
Cliente
Job WFRET
Caixa de Sada
E-Mail
WFReturn()
Captura a resposta
Caixa de Entrada
Aprovador
WebServices
Integrao de sistemas
TXT/XML
<Saldo>1000</Saldo>
Sistema B
WebServices
Configurao
WebServices
Configurao
WebServices
Configurao
localhost/ws/9901
WebServices
Configurao
WebServices
Configurao 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\ ...
WebServices
Aps a configurao, ver a lista de Web Services disponveis no Protheus: Reinicializar o server No Internet Explorer: http://localhost/ws/9901/wsindex.apw
WebServices
IDE
http://localhost/FORNECESALDO.apw?WSDL
Sistema
Contas
WebServices
Sistema
Contas
Portal Protheus
Configurao
Para o desenvolvimento de pginas Internet, via AdvPL ASP, necessrio configurar o mdulo web Portal Protheus:
Portal Protheus
Configurao
http://localhost/ws/9901
Portal Protheus
Configurao
localhost/pp
Portal Protheus
Configurao
HTML
Pgina esttica (html)
Servidor Internet
Browser
http://www.empresax.com.br/inicio.htm
Benvindo ao site da Empresa X Hoje 10/08/05
<html> <body>
Benvindo ao site da Empresa X
inicio.htm
Pgina esttica
HTML + ASP
Pgina dinmica (html + ASP)
Servidor Internet
Browser
http://www.empresax.com.br/inicio.htm
Benvindo ao site da Empresa X Hoje 21/02/06
<html> <body>
21/02/06
inicio.htm
AdvPL ASP
Pgina com html + AdvPL ASP
Browser
http://www.empresax.com.br/u_inicio.apw
Benvindo ao site da Empresa X Hoje 21/02/06
21/02/06
RPO inicio.prw
Pagina.aph
<html> <body> Ver Ver Ver Ver Ver 230_ASP1.prw e 240_ASP2.prw e 250_ASP3.prw e 260_ASP4.prw e 270_ASP5.prw e 235_ASP1.aph 245_ASP2.aph 255_ASP3.aph 265_ASP4.aph 275_ASP5.aph Benvindo ao site da Empresa X Hoje <%=Date()%> </body> </html>
Call Center
Telnet
Integrao com equipamentos micro-terminais
No MP8SRV.INI, acrescentar:
[TELNET] Enable=1 Environment=Environment Main=MTTRAN Port=1024
RPO MTTran()
DEM
Documentao Eletrnica Microsiga
Linguagem
AdvPL Tecnologia Protheus Dicas e Notcias F.A.Q. Guias de Referncia Releases Sistema
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
Dicionrio de Dados
Programa A
Programa C
Programa B