Customizaes
AdvPL e Protheus
Aula 1
Evoluo e Arquitetura do Sistema
Arquivos
Customizaes
Case Sistema de Contas Correntes
Assembler Batch
1978
1983
1990
1995
2000
Multi-Camada
Windows
Linux
Browser
Windows
Linux
Unix
Windows
Linux
Unix
Remote (MP8RMT.EXE)
RPO (MPDP811.RPO)
Client (WEB)
ActiveX
Server (MP8SRVWIN.EXE)
Monitor
Client
Aplication
Server
Top Connect
DBF/CTREE
SQL Server
Oracle
DB2
Sybase
PostGres
MySQL
Database
Server
Mltiplas configuraes
..
modem
..
modem
.....
Hub
Servidor
Terminal
Dados
Hub
.....
Estrutura Protheus
Programa
Fonte
SERVER
REMOTE
MATA010
APO
MATA010
RPO
MATA010
MATA410
CTBR040
Cad.Produtos
Executa
MATA010
Executa
MATA410
Ped.Vendas
Executa
CTBR040
Balancete Cont.
Aplicativos
Protheus
Server
Protheus Remote
Top Connect
Monitor
Conjuntos de arquivos
RPO
Remote
Windows
Linux
Hand
Terminal Remoto
Thin
Client
Baixo trfego na rede
Multi-plataforma
Atualizao automtica
ASP - Aplication Server Provider
Browser Internet (HTML)
APO (RPO)
BIN
REMOTE
SERVER
INCLUDE
MP_DATA
Atalhos
Destino: c:\erp811\bin\remote\mp811rmt.exe
Iniciar em: c:\erp811\bin\remote
MP8 Remote
MP8SRV.INI
MP8SRV.INI
TCP
[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
Environment
[Drivers]
Active=TCP
SIGACFG
[TCP]
TYPE=TCPIP
Port=1234
ERP811
APO
BIN
REMOTE
SERVER
INCLUDE
MP_DATA
DATA
SAMPLES
SPOOL
SYSTEM
SYSTEMLOAD
MY PROJECTS
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 Remote em
mquinas separadas
Protheus
Server
OU
Server e Remote na
mesma mquina
aradas
Protheus
Server
Rede
Intranet
Protheus
Remote
Extranet
Internet
Protheus
Remote
Configurador
SIGACFG
TCP
Environment
Configurador
Senha: admin
Configurador
Configurador
CONFIGURADOR
Ambiente ...
Usurio ...
Possibilita a
definio do
formato das
interfaces de
acesso aos
mdulos do
sistema, criao
e manuteno de
menus, tabelas,
parmetros e
perguntas
Permite o registro
e a manuteno de
usurios, empresas,
senhas e nveis de
acessos.
Bases
de
Dados..
Oferece um
conjunto completo
de funes para a
criao e manuteno
do Dicionrio de
Dados (campos
com suas
caractersticas e
seus gatilhos e
validaes).
Empresas ...
Ajuda ...
Permite a criao
de bases para
novas empresas e
consolida todos os
fatos ocorridos no
sistema por meio
de consulta aos
arquivos de LOG.
Consolida um
conjunto de dicas
sobre os
conceitos e
utilizao do
produto.
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
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
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
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 Dados
Modo de Acesso
A1_COD
A1_NOME
000015
000016
000001
000020
000007
xFilial(SA1)
C5_NUM
C5_EMISSAO
C5_CLIENTE
C5_PROD
C5_VALOR
01
01
01
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
02
02
02
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
03
03
03
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
xFilial(SC5) cFilAnt
Arquivos de ndices
ndices
Todo arquivo precisa ter pelo menos um ndice
ndice Primrio:
Ordenao de registros
CHAVE
REGISTRO
REGISTRO
000001
000007
000015
000016
000020
03
05
01
02
04
01
02
03
04
05
A1_FILIAL
A1_COD
A1_NOME
000015
000016
000001
000020
000007
Arquivos de ndices
ndices
Usurio
ndice
novo ndice
do Usurio
do Sistema
ndice do Usurio
1
2
...
7
8
9
A1_TIPO
A1_TIPO
NickName: TIPO
NickName: 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
000010
000050
01/03/06
31/03/06
Customizao
Insero de Cdigo-Fonte
Exemplo:
Um Pedido de Venda includo
Na emisso da NF, o preo deve ser reajustado em 25%
Preo
100,00
125,00
Programa-fonte
SERVER
MATA460A Emisso NF
Frmulas
Preo
:= SC6->C6_PRCVEN
Preo
:= &Formula * 1.25
RPO
MATA460A
APO
MATA460A
SC6->C6_PRCVEN * 1.25
Execuo do
MATA460A
Preo := &Formula
Emisso NF
Customizao
Insero de Cdigo-Fonte
Tipos de Processamento
Interpretador
Run Time
Server
Maquina Virtual
FONTE
DBase, Access
Executvel +
Interpretador
Clipper, Visual Objects
PCode
Visual Basic, AdvPl
Abap, Oracle,Java
Executvel
Delphi, C
Compilao
A = A + &B
A=A+B
A=5
MACRO
A=7
965534567654
5
End 3
2
3456
3
7654
Customizao
Validaes
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
Campo:
D1_VUNIT
Contra-Dominio: D1_TOTAL
Regra:
Round(M->D1_VUNIT * M->D1_QUANT, 2)
Customizao
Campos de Arquivos
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
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
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
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
/ XML
WebServices
AdvPL ASP
Case
Sistema de Contas Correntes
Tabelas do sistema
CONTAS
Nome
E-Mail
E-Mail1
Saldo
TRANSAES
Tem
Refere-se
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:
SZ1
\DATA\
SZ1990
CONTAS
CONTAS
CONTAS
COMPARTILHADO
Prefixo:
Path:
Nome:
Descrio:
Desc.Esp.:
Desc.Ingls:
Modo Acesso:
SZ2
\DATA\
SZ2990
TRANSAES
TRANSAES
TRANSAES
EXCLUSIVO
Modo de Acesso:
Compartilhado
Exclusivo
Filial = branco
Filial = nmero da Filial (var. pblica cFilAnt)
Funo xFilial(Alias)
Campo
Informaes
Opes
Validaes
Uso
Mdulo
Nome do cliente
D=Deposito;S=Saque
dDataBase
GetSXENum(SZ2, Z2_NUMERO)
Campo Z2_Nome
F3
nvel
9
Nome
do Func.
nvel
8
8
acesso a campos com nvel
7
7
6
igual ou menor que 5.
6
Digitador
nvel
5
Endereo
nvel 4
5
5
4
4
3
3
Salrio
nvel 9
2
2
1
1
0 0
Exerccio
Cadastrar os campos do SZ1
Campo
Campo
Tipo
Tam.
Z1_NOME
Car
20
Z1_EMAIL
Car
Z1_EMAIL1
Z1_SALDO
Dec.
Inform.
Formato
Contexto
Propr.
Real
Alt.
Nome
40
Real
Alt.
Car
40
Real
Alt.
EMail1
Num
12
Real
Visual
@!
@E 999,999,999.99
Ttulo
Uso
Obrig
Usa
Brw
Saldo
Validaes
Lista de Opes
Inic.Padro
Z1_NOME
ExistChav(SZ1, M->Z1_NOME, 1)
Z2_NOME
ExistCpo(SZ1, M->Z2_NOME, 1)
GetSXENum(SZ2, Z2_NUMERO)
Z2_NUMERO
ExistChav("SZ2", M->Z2_NUMERO+
M->Z2_ITEM, 1)
Z2_ITEM
dDataBase
Z2_DATA
Z2_TIPO
D=Deposito;S=Saque
Exerccio
Campos do SZ2 (j esto cadastrados)
Campo
Campo
Tipo
Tam.
Z2_NOME
Car
20
Z2_NUMERO
Car
Z2_ITEM
Car
Z2_DATA
Data
Z2_TIPO
Dec.
Formato
Inform.
Contexto
Propr.
Real
Alt.
Real
Visual
Real
Alt.
Item
Real
Alt.
Data
Car
Real
Alt.
Tipo
Z2_HIST
Car
20
Real
Alt.
Historico
Z2_VALOR
Num
12
@E 999,999,999.99
Real
Alt.
Valor
Z2_SLDATU
Num
12
@E 999,999,999.99
Virtual
Visual
Saldo
Z2_APROV
Car
Real
Visual
Aprovado
@!
99
Ttulo
Nome
Numero
Uso
Obrig
Usa
Brw
Exerccio
Criao dos ndices
1
3
Chave
Nickname
SZ1
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
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
Atualizaes
Consultas
Relatrios
Programa:
Programa:
Con001
Rel001
Contas
Transaes
Programa:
Cad
Modelo 1
Modelo 2
Modelo 3
Programa:
Programa:
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
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
Volta
Vai
o1
o 5 e 10
13
Volta
Vai
o2
15
o1e2
17
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
Sim
A Esposa
quer $$ ?
No
Casado
h mais de
5 anos ?
Dar-lhe
R$ 100,00
No
Sacudir a
Esposa
Sair da
Cama
Acender
a luz
Resmungar
Beijar a
esposa
Casado
h mais de
1 ano ?
Sim
No
Sim
Beijar a
esposa
Est Escuro ?
No
Voltar para
a cama
Possvel
Fim
da rotina
Ir at o
carro
Sim
Est Frio ?
No
Ir ao
Banheiro
Tomar
Caf
A
Voltar
para peg-las
No
Est
Com as
Chaves ?
Sim
Dirigir-se
ao escritrio
Fim
Sim
Operadores
Matemticos
** ou ^
x := 10 + 20
Operadores
Relacionais
<
>
==
<=
>=
<> ou # ou !=
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
.And.
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cEstNeg == S
.Or.
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
.And.
( cEstNeg == S
.Or.
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
.And.
( cEstNeg == S
.Or.
Operadores
Lgicos
.And.
If a <> b
...
EndIf
.Or.
.Not. ou !
If .Not. a==b
...
EndIf
If !a==b
...
EndIf
Operadores
Atribuio
:=
+=
-=
*=
/=
^= ou **=
%=
x := 10
o mesmo que:
x := x + 20
x += 20
o mesmo que:
Operadores
Incremento / Decremento
i++
++i
i++
i := 1
MsgAlert(i++)
i := 1
MsgAlert(++i)
i--
--i
equivale a
i := i + 1
equivale a
i := 1
MsgAlert(i)
i := i + 1
equivale a
i := 1
i := i + 1
MsgAlert(i)
mostra 1
mostra 2
Operadores
Strings
x + y
x - y
x $ y
Concatenao
cNome
:= Joo
cSobreNome
:= Silva
cNomeCompleto := cNome + cSobreNome
A - B
AB
Pertence
Silva $ cNomeCompleto
SILVA $ cNomeCompleto
.T.
.F.
JooSilva
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.
Projeto (.PRJ)
Programa (.PRW)
Funo
Funo
Funo
Programa (.PRW)
Funo
Funo
Funo
Programa (.PRW)
Funo
Funo
Funo
Variveis de Memria
Armazenamento temporrio de dados
Cadastro
Nome:
Jos
Memria
Nome
Jos
Valor
1000
A1_NOME
Jos
D2_VALOR
1000
CPU
Casa
cTexto
Numricas
1234.56
nValor
Data
CtoD(25/10/05)
dData
Lgicas
.T.
lOk
.F.
n X := 1
nX
X numrico
numrico
c X := Jos
X agora
cX caracter
caracter
n X := n X + 1
Operao
ERRO
matemtica
!
Caractere
Casa
cTexto
Numricas
1234.56
nValor
Data
CtoD(25/10/05)
dData
Lgicas
.T.
lOk
.F.
Ver Operadores.PRW
Exercicio
ValType(cNome) C
ValType(nValor) N
ValType(x)
U
:=
:=
:=
:=
Joao
Alberto
Pedro
Maria
Memria
cNome1
Joao
cNome2
cNome3
Alberto
cNome4
Pedro
aNomes
Joao
Alberto
Pedro
Maria
Maria
Armrio 2
Armrio 3
Armrio 4
Joao
Alberto
Pedro
Maria
Array
Armrio
Gaveta 1
Gaveta 2
Gaveta 3
Gaveta 4
Joao
Alberto
Pedro
Maria
Gaveta 1
Joao
Gaveta 2
Alberto
Gaveta 3
Pedro
Gaveta 4
Maria
aMatriz := {{Joao
,
{Alberto,
{Pedro ,
{Maria ,
25,
18,
40,
33,
.T.},;
.F.},;
.T.},;
.F.}}
aMatriz := {{Joao
,
{Alberto,
{Pedro ,
{Maria ,
Gaveta 1
25,
18,
40,
33,
.T.},;
.F.},;
.T.},;
.F.}}
Gaveta 2
Gaveta 3
Gaveta 4
Joao
25
Alberto
18
Pedro
40
Gaveta 1
Gaveta 2
1
Maria
Gaveta 3
33
Gaveta 4
Joao
Alberto
Pedro
Maria
25
18
40
33
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.})
Ver 050_Array.prw
Exercicio: fazer o sort de um array
:=
:=
:=
:=
:=
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
Comandos
Comandos
Comandos
If CGC(cCGC)
continua
Else
abandona
EndIf
Comandos
Return
Return
Function CGC(cCGC)
Return lOK
.T. ou .F.
.T. ou .F.
If cCGC OK
lOK := .T.
Else
lOK := .F.
EndIf
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
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
cVar
Func1
PRIVATE
Contedo
PUBLIC
Contedo
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
cVar
cVar1
Func2
Func2
PRIVATE
Contedo
cVar2
Private Func2
PUBLIC
Contedo
cVar3
Public Func2
LOCAL
Contedo
PRIVATE
Contedo
cVar2
ABC
PUBLIC
Contedo
cVar3
Public Func2
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
cVar
cVar1
Func2
Func2
PRIVATE
Contedo
cVar2
ABC
PUBLIC
Contedo
cVar3
Public Func2
LOCAL
Contedo
cVar
Func1
PRIVATE
Contedo
PUBLIC
Contedo
cVar3
Public Func2
Return
User Function 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
So criadas
variveis
LOCAIS
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 := 50
y := 100
Return
Ver 060_Param.prw
x=1
y=2
Passagem de Parmetros
Por Valor
User Function Param1()
Local x := 1
Local y := 2
u_Param2(x, y)
MsgAlert(x+y)
x=1
y=2
Return
User Function Param2(x, y)
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 := 50
y := 100
Return
Ver 060_Param.prw
x=1
y=2
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 := 100
Return
Ver 060_Param.prw
x=1
y=2
Passagem de Parmetros
Por Referncia
User Function Param1()
Local x := 1
Local y := 2
u_Param2(@x, y)
MsgAlert(x+y)
x = 50
y=2
Return
User Function Param2(x, y)
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 := 100
Return
Ver 060_Param.prw
x = 50
y=2
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
SM4->M4_Formula
* 1.25
dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1 := &(cFormula)
SB1->B1_Prv1 * *
1.25
&(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
bBloco := {|x| x * 2}
nResult := EVal(bBloco, 5)
Ver 051_Bloco.prw
nResult = 10
Bloco de Cdigo
DBEval()
Bloco de Cdigo
Ordenao de array
aMatriz := { {Joao
,15} , {Pedro
{Alberto,20}
,10}, {Maria
,10} ,{Pedro
{Alberto,20}
.F.
.T.
Ver 050_Array.prw
,30} }
Bloco de Cdigo
Ordenao de array
{Joao
aMatriz := { {Pedro
,15} , {Joao
{Pedro
,10}
.T.
.F.
Ver 050_Array.prw
,30} }
Ver 080_UDC.prw
Semforos
Controle de numerao sequencial
GetSXENum(Alias)
ConfirmSX8()
RollBackSX8()
MayIUseCode(Alias)
APCFG110
Confirma o nmero
Reutiliza o nmero
Confirma se o nmero est mesmo disponvel
Manuteno do SXE/SXF ou Hardlock
Exemplo:
Exemplos em 120_TranM2
001
002
003
004
005
003
004
006
007
008
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
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
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 Dados
Modo de Acesso
A1_COD
A1_NOME
000015
000016
000001
000020
000007
xFilial(SA1)
C5_NUM
C5_EMISSAO
C5_CLIENTE
C5_PROD
C5_VALOR
01
01
01
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
02
02
02
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
03
03
03
000001
000005
000007
01/01/04
01/01/04
20/01/04
000002
000023
000016
11.11014
13.13000
15.15140
15.000,00
5.600,00
5.600,00
xFilial(SC5) cFilAnt
Arquivos e ndices
ndice: CDIGO
CODIGO
REGISTRO
000001
000002
000007
000008
000015
000016
000019
000020
000023
000024
000026
000027
000028
000030
000033
03
09
05
07
01
02
13
04
08
06
10
11
12
15
14
Arquivo
RECNO
A1_COD
A1_NOME
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
000015
000016
000001
000020
000007
000024
000008
000023
000002
000026
000027
000028
000019
000033
000030
Arquivos e ndices
ndice: NOME
NOME
REGISTRO
ACTIONVEA..
ARMANDO J..
CLIENTE P..
COMERCIO ..
DESPACHAN..
ECOSSISTE..
FABRICA D..
FLORICULT..
IMPORTADO..
JOAO DA S..
JOAO DE A..
PREFEITUR..
REIZA KER..
STARMEAL ..
TEX MALHA..
10
04
03
05
14
09
01
07
15
06
13
08
12
11
02
Arquivo
RECNO
A1_COD
A1_NOME
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
000015
000016
000001
000020
000007
000024
000008
000023
000002
000026
000027
000028
000019
000033
000030
Arquivos e ndices
ndices
Arquivo: SA1990
Alias: SA1
Cadastro de Clientes
CODIGO
REG
RECNO
A1_COD
A1_NOME
000001
000002
000007
000008
000015
000016
000020
000023
000024
000026
3
9
5
7
1
2
4
8
6
10
1
2
3
4
5
6
7
8
9
10
000015
000016
000001
000020
000007
000024
000008
000023
000002
000026
ndices
Arquivo: SB1990
Alias: SB1
Cadastro de Produtos
CODIGO
REG
RECNO
B1_COD
B1_DESC
B1_TIPO
B1_UM
11.11000
11.11003
11.11014
12.12006
13.13000
13.13001
15.15140
33.03323
2
5
1
3
8
4
6
7
1
2
3
4
5
6
7
8
11.11014
11.11000
12.12006
13.13001
11.11003
15.15140
33.03323
13.13000
PROD. DE REVENDA
PROD. ACABADO
MAT. PRIMA 1 QUALITY
CAIXA GRANDE PA
MAT. PRIMA
ALCOOL ETILICO
LUVA
CAIXA PEQUENA PA
PA
PA
MP
PA
MP
MC
MP
PA
UN
UN
UN
CX
UN
L
UN
CX
Arquivo: SC5990
Posicionamento de registro
dbSkip()
dbSelectArea(SB1)
dbSelectArea(SA1)
dbSkip()
dbSetOrder(1)
dbSkip()
dbSkip()
dbSeek(11.11014)
dbSeek(000002)
dbSelectArea(SA1)
Alias: SC5
dbSelectArea(SB1)
Pedidos de Venda
RECNO
C5_NUM
C5_EMISSAO
C5_CLIENTE
C5_PROD
C5_VALOR
1
2
3
4
5
000001
000005
000007
000008
000009
01/01/04
01/01/04
20/01/04
27/01/04
01/01/04
000002
000023
000016
000024
000008
11.11014
13.13000
15.15140
13.13001
11.11000
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
REG
RECNO
C5_FILIAL
C5_NUM
C5_EMISSAO
C5_CLIENTE
C5_PROD
C5_VALOR
01000001
01000005
01000007
01000008
01000009
1
2
3
4
5
1
2
3
4
5
01
01
01
01
01
000001
000005
000007
000008
000009
01/01/04
01/01/04
20/01/04
27/01/04
01/01/04
000002
000023
000016
000024
000008
11.11014
13.13000
15.15140
13.13001
11.11000
15.000,00
5.600,00
5.600,00
1.000,00
3.450,00
02000001
02000005
02000007
02000008
02000009
6
7
8
9
10
6
7
8
9
10
02
02
02
02
02
000001
000005
000007
000008
000009
01/01/04
01/01/04
20/01/04
27/01/04
01/01/04
000002
000023
000016
000024
000008
11.11014
13.13000
15.15140
13.13001
11.11000
15.000,00
5.600,00
5.600,00
1.000,00
3.450,00
03000001
03000005
03000007
03000008
03000009
11
12
13
14
15
11
12
13
14
15
03
03
03
03
03
000001
000005
000007
000008
000009
01/01/04
01/01/04
20/01/04
27/01/04
01/01/04
000002
000023
000016
000024
000008
11.11014
13.13000
15.15140
13.13001
11.11000
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
REG
RECNO
Z2_FILIAL
Z2_NUMERO
Z2_ITEM
01000101
01000102
01000103
01000201
01000202
1
2
3
4
5
1
2
3
4
5
01
01
01
01
01
0001
0001
0001
0002
0002
01
02
03
01
02
01000301
01000302
01000303
6
7
8
6
7
8
01
01
01
0003
0003
0003
01
02
03
01000401
01000402
9
10
9
10
01
01
0004
0004
01
02
EOF() .T.
Posicionamento de Arquivos
Acesso direto ao registro
Chave completa
dbSeek(xFilial(SZ2)+0003)
Chave parcial
FILIAL+NUMERO+ITEM
REG
RECNO
Z2_FILIAL
Z2_NUMERO
Z2_ITEM
01000101
01000102
01000103
01000201
01000202
1
2
3
4
5
1
2
3
4
5
01
01
01
01
01
0001
0001
0001
0002
0002
01
02
03
01
02
01000301
01000302
01000303
6
7
8
6
7
8
01
01
01
0003
0003
0003
01
02
03
01000401
01000402
9
10
9
10
01
01
0004
0004
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
Funes de
Tratamento de
Arquivos
AxCadastro,MBrowse,Modelo2,Modelo3
AxCadastro
AxPesqui()
AxVisual()
AxInclui()
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
Referncia
a uma
varivel
atribui
o de
valor?
Atribui o
valor
varivel
Joo Var. Nome
Existe
um
arquivo
aberto ?
Grava o
valor no
campo
Joo Campo Nome
Erro:
varivel
no existe
N
Para no confundir variveis de memria com
campos de arquivos, usa-se o ALIAS:
Nome
Joo
Existe
campo
com
este
nome ?
Cria a
varivel
Nome := Joo
Arquivo
Codigo
Varive
l existe
?
M->Z1_Nome
SZ1->Z1_Nome
N
Arquivo
Codigo
Descricao
varivel de memria
campo de arquivo
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
Enchoice
Modelo 2
Nmero
Nome
GetDados
Item
Data
Tipo
Histrico
Valor
Variveis
de memria
aHeader
aCols
GetDados
Enchoice
Modelo 2
Nmero
Nome
1
2
3
4
5
6
7
8
9
10
Variveis
de memria
Data
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
01
Deposito
02
03
1
4
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
10.000,00
.F.
Saque
300,00
.F.
Saque
2.500,00
.F.
aHeader
aCols
Modelo 2
Array aRotina
lRet
mBrowse()
.T.
Monta os parametros:
1.
2.
3.
4.
Variveis de memria
aHeader
aCols
Enchoice
Incluso
nOpc
4
lRet := Modelo2()
Ver 120_TranM2.prw
Alterao
Excluso
Modelo 2
Criao do aCols para Incluso
1
2
3
4
5
6
7
8
9
10
1
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
Nil
Nil
Nil
Array(?)
Array(5)
4
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
Nil
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
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
1
1
Nil
2
Nil
D
Nil
Nil
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
aHeader
5
0,00 Nil
aCols
2
3
4
1
2
3
4
1
1
2
3
4
5
6
7
8
9
10
1
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
1
Nil
2
Nil
D
3
Nil
4
Nil
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
aHeader
5
0,00 .F.
Nil
aCols
1
2
3
4
5
6
7
8
9
10
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
1
1
01
2
Nil
D
3
Nil
4
Nil
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
aHeader
5
0,00 .F.
Nil
aCols
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
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
1
2
3
4
5
6
7
8
9
10
1
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
Nil
Nil
Nil
Nil
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
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
1
1
Nil
01
Nil
D
Deposito
Nil
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
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
2
3
8
4
7
6
1
2
3
4
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
1
2
3
4
5
6
7
8
9
10
1
Item
Z2_ITEM
2
Tipo
Z2_TIPO
3
Histrico
Z2_HIST
2
0
1
0
20
0
Valor
Z2_VALOR
@E 999,999,999.99
12
2
C
SZ2
R
C
SZ2
R
C
SZ2
R
N
SZ2
R
1
1
01
Deposito
Titulo
Campo
Picture
Tamanho
Decimal
Valid.
Usado
Tipo
Arquivo
Contexto
aHeader
5
500,00 .F.
Nil
aCols
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
Relatrios
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
Relatrios
Perguntas
Relatrios
ndice temporrio
cada
ndices usados esporadicamente, devero ser criados como temporrios por meio
da funo IndRegua().
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()
aReturn[1] =
aReturn[2] =
aReturn[3] =
aReturn[4] =
aReturn[5] =
aReturn[6] =
aReturn[7] =
aReturn[8] =
SetDefault()
Pergunte()
RptStatus()
SetRegua()
IncRegua()
SIGARPM
Pontos de Entrada
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)
Reposicionamento de Arquivos
GetArea()
RestArea()
APExcel
Protheus
u_PlanMov()
Ver 170_Planilha.prw
=MSGetArray(A1;Siga("U_PLANMOV"))
Array de dados
Excel
MPSDU
MPSDU
TCP
4
Environment
2
Administrador
admin
MPSDU
oBotaoOK := tButton():New()
Suas propriedades podem ser definidas ou alteradas.
oBotaoOK:cCaption
oBotaoOK:nWidth
oBotaoOK:nHeight
oBotaoOK:bAction
:=
:=
:=
:=
Ok
50
15
{|| u_Grava() }
Arquivos Texto
O IDE possui um Assistente de Gerao e Importao de arquivos texto:
XML
<Contas>
<Conta>
<Nome>JOSE</Nome>
<Saldo>9560</Saldo>
<Transacao>
<Data>30/03/06</Data>
<Tipo>D</Tipo>
<Hist>Deposito inicial</Hist>
<Valor>10000</Valor>
</Transacao>
<Transacao>
<Data>30/03/06</Data>
<Tipo>S</Tipo>
<Hist>Pagto. conta de luz</Hist>
<Valor>300</Valor>
</Transacao>
</Conta>
</Contas>
Aula 6
Workflow
WebServices
AdvPL ASP
WorkFlow
Fluxo manual
Contas
Efetua
transaes
Cliente
Transaes
Aguardando o
aprovador
acessar o
sistema...
Aprovador
WorkFlow
Fluxo automtico
Saldo Negativo?
Dispara um WorkFlow
Contas
WFSalNeg()
Efetua
transaes
Cliente
WFRetorno()
Transaes
Executa a funo
de retorno
Job WFRET
Caixa de
Sada
WFReturn()
Captura a resposta
Resposta
(Aprovado ou Reprovado)
Aprovador
Caixa de
Entrada
WebServices
Integrao de sistemas
Sistema
B
TXT/XML
<Nome>JOSE</Nome>
http://...
<Saldo>1000</Saldo>
Web Service
Sistema
A
WSDL
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
WSDL
Cliente WSForneceSaldo
Mtodo BuscaSaldo
Nome
Saldo
http://localhost
WebService ForneceSaldo
Mtodo BuscaSaldo
Nome
Saldo
Sistema
Contas
WebServices
http://localhost
WebService ForneceSaldo
WSDL
Cliente WSForneceSaldo
Joo
ConsultaSaldo
1000,00
Mtodo BuscaSaldo
Nome
Saldo
Mtodo BuscaSaldo
Nome
Saldo
Sistema
Tela
Nome: Joo
Saldo: 1000,00
OK
Saldo(cNome)
oWS := WSForneceSaldo():New()
oWS:BuscaSaldo(cNome)
Contas
Portal Protheus
Configurao
Portal Protheus
Configurao
PP Portal Protheus
pp
\web\pp
ENVIRONMENT
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
inicio.htm
<html>
<body>
Benvindo ao site da Empresa X
Pgina
esttica
Hoje 10/08/05
</body>
</html>
HTML + ASP
Pgina dinmica (html + ASP)
Servidor Internet
21/02/06
Browser
http://www.empresax.com.br/inicio.htm
inicio.htm
<html>
<body>
Benvindo ao site da Empresa X
Pgina
dinmica,
com a data
obtida do
servidor
Hoje <%=Date%>
</body>
</html>
AdvPL ASP
Pgina com html + AdvPL ASP
Servidor Internet
Protheus
21/02/06
Browser
RPO
http://www.empresax.com.br/u_inicio.apw
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
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
Segurana
Dicionrio
de Dados
Programa A
Dicionrio de Dados
Programa C
Programa B