Customizaes
AdvPL e Protheus
Aula 1
Evoluo e Arquitetura do Sistema
Arquivos
Customizaes
Case Sistema de Contas
Correntes
Multi-Camada
Windows
Linux
Browser
Windows
Linux
Unix
Windows
Linux
Unix
Remote (MP8RMT.EXE)
Client (WEB)
ActiveX
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
SERVER
Programa
Fonte
REMOTE
MATA010
Compilao
APO
APO
MATA01
MATA01
00
RPO
Executa
Executa
MATA010
MATA010
MATA010
Executa
Executa
MATA410
MATA410
MATA410
CTBR040
Cad.Produtos
Ped.Vendas
Executa
Executa
CTBR040
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)
SYSTEMLOAD
MY PROJECTS
Atalhos
Destino: c:\erp811\bin\remote\mp811rmt.exe
Iniciar em: c:\erp811\bin\remote
MP8 Remote
MP8SRV.INI
MP8SRV.INI
SIGACFG
TCP
Environment
[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
ERP811
APO
BIN
REMOTE
SERVER
INCLUDE
MP_DATA
DATA
SAMPLES
SPOOL
SYSTEM
SYSTEMLOAD
[TCP]
TYPE=TCPIP
Port=1234
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
Configurador
SIGACFG
TCP
Environment
Configurador
Senha: admin
Configurador
Configurador
Arquivos Famlia SX
Pasta \SYSTEM
Arquivo
Descrio
SX1
Perguntas e Respostas
SX2
Mapeamento de Tabelas
SX3
Dicionrio de Dados
SX4
SX5
Tabelas
SX6
Parmetros
SX7
Gatilhos
SX9
SXA
SXB
SXD
SXE
SXF
SXG
SXK
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
SA1
Cadastro de Clientes
SA2
Cadastro de Fornecedores
SA3
Cadastro de Vendedores
SB1
Cadastro de Produtos
SB2
SB5
SC1
Solicitaes de Compras
SC5
SC6
SC7
Pedidos de Compras
SD1
SD2
SD3
SE1
Ttulos a Receber
SE2
Ttulos a Pagar
SF1
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
02
02
01
02
SA1:
A1_COD
A1_NOME
A1_END
A1_FILIAL
A2_COD
A2_NOME
A2_END
SA2:A2_FILIAL
B1_COD
B1_DESC
B1_TIPO
SB1:B1_FILIAL
QA1_COD
QA1_DESC
QA1:
Arquivos de Dados
Modo de Acesso
Compartilhado
Exclusivo
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: acesso direto ao registro
verificao de chave duplicada
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
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.
A1_TIPO
A1_TIPO
NickName: TIPO
NickName: TIPO
Deve-se
usar
funo
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:
Preo
Um Pedido de Venda includo
100,00
Na emisso da NF, o preo deve ser reajustado em 25%
125,00
Programa-fonte
SERVER
MATA460A Emisso NF
Frmulas
Preo
:= SC6->C6_PRCVEN
Preo
:= &Formula * 1.25
Compila
o
RPO
MATA460A
SC6->C6_PRCVEN * 1.25
APO
APO
MATA460A
MATA460A
>
6C
S
N
VE
C
R
_P . 2 5
6
1
C
Execuo
Execuodo
do
MATA460A
MATA460A
Preo
:=
Preo :=
SC6->C6_PRCVEN
*
Preo := SC6->C6_PRCVEN
*
1.25
1.25
&Formula
Emisso NF
Customizao
Insero de Cdigo-Fonte
Tipos de Processamento
Interpretador
Run Time
Server
Maquina Virtual
FONT
E
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: ExistChav(SA1)
Natureza: ExistCpo(SED)
Estado:
ExistCpo(SX5, 12+M->A1_EST)
CNPJ:
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)
Lanamento Padronizado
(SI5)
Dbito: u_ContaDeb()
Customizao
Ponto de Entrada
de mo-de-obra.
registro de saldos
no SB2.
pois no existe custo
Configurador - SIGACFG
Dicionrio
Menus
de Dados
Exerccios
Crie um parmetro (SX6) para o limite mximo por
transao:
Nome da Var.:MV_VRMAX
Tipo:
N
Contedo:
10000
Descrio:
Valor maximo da transacao
SIGACFG: menu Ambiente / Cadastros / Parmetro
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:
SZ1
Path:
\DATA\
Nome:
SZ1990
Descrio:
CONTAS
Desc.Esp.:
CONTAS
Desc.Ingls: CONTAS
Modo Acesso: COMPARTILHADO
Prefixo:
SZ2
Path:
\DATA\
Nome:
SZ2990
Descrio:
TRANSAES
Desc.Esp.:
TRANSAES
Desc.Ingls: TRANSAES
Modo Acesso: EXCLUSIVO
Modo de Acesso:
Compartilhado Filial = branco
Exclusivo
Filial = nmero da Filial (var. pblica cFilAnt)
Funo xFilial(Alias)
Campo
Informaes
Opes
Validaes
Uso
Mdulo
Nome do cliente
dDataBase
Campo Z2_Nome
F3
GetSXENum(SZ2, Z2_NUMERO)
nvel
9
do
Func.
ter acesso a campos com
7
7
6
6
nvel igual ou menor que 5.
5
5
nvel 5
4
4
3
3
Digitador
nvel 4
2
2 nvel 5 Endereo
1
1
Salrio
nvel 9
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
Opes
Lista de Opes
Inic.Padro
Validaes
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
Exerccio
Crie em ERP o menu do Sistema de Contas Correntes
SIGACFG: menu Ambiente / Cadastro / Menus
Contas
Corrente
s
Atualizae
s
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
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 PretaBranca
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.
Como os 4 podem atravess-la?
Resposta
Vai
o1e2
Volta
Vai
o 5 e 10
Volta
Vai
o1
2
3
13
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 !
.Or.
nQtdeVenda <
nSaldo
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
.And.
( cEstNeg ==
.Or.
Operadores
Lgicos
.And.
.Or.
.Not. ou !
cCredito == OK
.And.
( cEstNeg ==
.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
JooSilva
A - B
AB
Pertence
Silva $ cNomeCompleto
SILVA $ cNomeCompleto
.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.
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
c X := Jos
n X := n X + 1
nX
X numrico
numrico
X agora
cX caracter
caracter
Operao
ERRO !
matemtica
Casa
cTexto
Numricas 1234.56
nValor
Data
CtoD(25/10/05)
dData
Lgicas
.T.
lOk
.F.
Ver Operadores.PRW
Exercicio
:=
:=
:=
:=
Joao
Alberto
Pedro
Maria
Memria
cNome1
Joao
cNome2
Alberto
cNome3
cNome4
Pedro
Maria
aNomes
Joao
Alberto
Pedro
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
1
25
.T.},;
.F.},;
.T.},;
.F.}}
Gaveta 2
Joao
25,
18,
40,
33,
3
T
Alberto
Gaveta 1
Gaveta 3
18
Pedro
Gaveta 2
Gaveta 4
40
3
T
Maria
Gaveta 3
33
Gaveta 4
Joao
Alberto
Pedro
Maria
25
18
40
33
3
F
AAdd(aMatriz,
AAdd(aMatriz,
AAdd(aMatriz,
AAdd(aMatriz,
{Joao,25,.T.})
{Alberto,18,.F.})
{Pedro,40,.T.})
{Maria,33,.F.})
:=
:=
:=
:=
:=
A
B
C
D
E
aArray {A, B, C, D,
Ver 050_Array.prw
E}
Exercicio: fazer o sort de um array
Funes
Conjunto de Comandos
Programa.PRW
User Function Teste()
Comandos
Comandos
Comandos
Comandos
Return
Funes
Rotinas repetitivas
User Function CadCli()
ie
Cl
e
nt
CG
C
do
Return
do
C
CG
Fo
rn
ec
ed
o
Comandos
If CGC(cCGC)
continua
Else
abandona
EndIf
Comandos
Comandos
Comandos
Return
Function CGC(cCGC)
Return lOK
.T. ou .F.
.T. ou .F.
If cCGC OK
lOK := .T.
Else
lOK := .F.
EndIf
Funes
Programao Estruturada
User Function Relato()
u_PreparaImpr()
u_LeDados()
u_Imprime()
Return
User Function PreparaImpr()
...
Return
User Function LeDados()
...
Return
User Function Imprime()
...
Return
Funes
Passagem 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
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()
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
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")
* 1.25
cFormula := SB1->B1_Prv1
SM4->M4_Formula
dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1
1.25
SB1->B1_Prv1 := &(SB1->B1_Prv1
&(cFormula) * *
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 = 20
bBloco := {|x| x * 2}
nResult := EVal(bBloco, 5)
Ver 051_Bloco.prw
nResult = 10
Bloco de Cdigo
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
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
SA1
Cadastro de Clientes
SA2
Cadastro de Fornecedores
SA3
Cadastro de Vendedores
SB1
Cadastro de Produtos
SB2
SB5
SC1
Solicitaes de Compras
SC5
SC6
SC7
Pedidos de Compras
SD1
SD2
SD3
SE1
Ttulos a Receber
SE2
Ttulos a Pagar
SF1
01
02
A1_FILIAL
A2_COD
A2_NOME
A2_END
SA2:A2_FILIAL
B1_COD
B1_DESC
B1_TIPO
SB1:B1_FILIAL
QA1_COD
QA1_DESC
QA1:
Arquivos de Dados
Modo de Acesso
Compartilhado
Exclusivo
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
CODIGO
REG
11.11000
11.11003
11.11014
12.12006
13.13000
13.13001
15.15140
33.03323
2
5
1
3
8
4
6
7
dbSelectArea(SB1)
dbSelectArea(SA1)
dbSkip()
dbSkip()
dbSetOrder(1)
dbSkip()
dbSeek(11.11014)
dbSeek(000002)
Cadastro de Produtos
RECNO
B1_COD
B1_DESC
B1_TIPO
B1_UM
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()
Alias: SB1
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
01000001
01000005
01000007
01000008
01000009
1
2
3
4
5
02000001
02000005
02000007
02000008
02000009
6
7
8
9
10
03000001
03000005
03000007
03000008
03000009
11
12
13
14
15
RECNO
C5_FILIAL
C5_NUM
C5_EMISSAO
C5_CLIENTE
C5_PROD
C5_VALOR
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
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
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,Mo
delo3
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
Ttulo da janela.
Ver 110_TranM1.prw
Sobre variveis
Nome := Joo
Atribui o
valor
varivel
Joo Var. Nome
atribui
o de
valor?
Varive
l
existe
?
Existe
um
arquivo
aberto ?
Grava o
valor no
campo
Joo Campo Nome
Nome := Joo
Erro:
varivel
no existe
N
Para no confundir variveis de memria com
campos de arquivos, usa-se o ALIAS:
Joo
Existe
campo
com
este
nome ?
Cria a
varivel
Nome
Arquivo
Codigo
Referncia
a uma
varivel
M->Z1_Nome
SZ1->Z1_Nome
N
Arquivo
Codigo
Descricao
varivel de memria
campo de arquivo
Sobre variveis
JOSE
aprovador@tecnico.com.br
GetDados Enchoice
Modelo 2
Nmero
Nome
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
1
2
3
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
Array(?)
Array(5)
Nil
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
M->Z2_Numero := (cAlias)->Z2_Numero
M->Z2_Data
:= (cAlias)->Z2_Data
PEDRO
0003
30/03/06
M->Z2_Nome
:= (cAlias)->Z2_Nome
M->Z2_Numero := (cAlias)->Z2_Numero
M->Z2_Data
:= (cAlias)->Z2_Data
PEDRO
0003
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
Z2_VALOR
01
02
03
6
7
Z2_TIPO Z2_HIST
D
D
S
Deposito
Deposito
Saque
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
Para incluir as
ordens, digitar
no campo Ordem
e clicar neste boto
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
Funo
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
Relatrios
ndice temporrio
ser
criados
como
Relatrios
ndice temporrio
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()
=
=
=
=
=
=
= Expresso do filtro
= Ordem a ser selecionada
SetDefault()
Pergunte()
RptStatus()
SetRegua()
IncRegua()
rgua de progresso.
pela funo RptStatus().
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()
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
:=
:=
:=
:=
Ok
50
15
{|| u_Grava() }
Arquivos Texto
O IDE possui um Assistente de Gerao e Importao de arquivos texto:
IDE: menu Ferramentas / Assistente de Cdigo
SZ1JOSE
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
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
Efetua
transaes
Cliente
a
aliz
Atu
Gra
va
t
sal
do
ran
sa
o
Contas
Saldo
Transaes
Aguardando o
aprovador
rova
u Rep o
acessar
o
a
v
o
Apr
sistema...
Aprovador
WorkFlow
Fluxo automtico
Efetua
transaes
Cliente
a
aliz
Atu
Gra
va
t
do
sal
ran
sa
o
Saldo
Contas
Saldo Negativo?
Dispara um WorkFlow
WFSalNeg()
osta
a resp
Grava
vado)
Repro
u
o
o
ad
(Aprov
Transaes
M
E-
ai
WFRetorno()
Executa a funo
de retorno
Job WFRET
Caixa
Caixade
de
Sada
Sada
WFReturn()
Captura a resposta
Resposta
(Aprovado ou Reprovado)
Aprovador
Caixa
Caixade
de
Entrada
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/...
[localhost/ws1/9901]
[localhost/ws/9901]
ENABLE=1
ENABLE=1
http://localhost/ws1/9901/... PATH=C:\ERP811\MP_Data\web\ws
PATH=C:\ERP811\MP_Data\web\ws1
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
10
00
,0
0
Joo
Jo
ConsultaSaldo
1000,00
1000,00
Mtodo BuscaSaldo
Nome
Saldo
Mtodo BuscaSaldo
Nome
Saldo
Sistema
Tela
OK
o
Jo
00
0,
100
Nome:Joo
Saldo: 1000,00
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
240_ASP2.prw
250_ASP3.prw
260_ASP4.prw
270_ASP5.prw
e
e
e
e
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
Seguran
a
Dicionrio
de Dados
Programa A
Dicionrio de
Dados
Programa C
Programa B