Escolar Documentos
Profissional Documentos
Cultura Documentos
Customizações
AdvPL e Protheus
Aula 1
Evolução e Arquitetura do Sistema
Arquivos
Customizações
Case – Sistema de Contas
Correntes
Evolução do Sistema da Microsiga
..
modem
..
modem
.....
Hub .....
Hub
Servidor
Terminal
Dados
Estrutura Protheus
REMOTE
Programa SERVER
Fonte
MATA010
Compilação APO
APO
MATA01
MATA01
00 Cad.Produtos
RPO Executa
Executa
MATA010
MATA010
MATA010
Executa
Executa
MATA410 MATA410
MATA410 Ped.Vendas
CTBR040
Executa
Executa
CTBR040
CTBR040
Balancete Cont.
Aplicativos
•Protheus Server
•Protheus Remote
•Top Connect
•Monitor
Conjuntos de arquivos
•Windows
•Linux
•Hand Held (Palm ou Pocket PC)
•ActiveX
Terminal Remoto
•Thin Client
•Baixo tráfego na rede
•Multi-plataforma
•Atualização automática
•ASP - Aplication Server Provider
•Browser Internet (HTML)
Estrutura de pastas do sistema
ERP811
APO (RPO)
BIN
REMOTE
SERVER
INCLUDE
MP_DATA
DATA (versão ISAM)
SAMPLES
SPOOL
SYSTEM (Dic.Dados, Menus,
...)
SYSTEMLOAD
MY PROJECTS
Atalhos
MP8 Server
Destino: c:\erp811\bin\remote\mp811rmt.exe
Iniciar em: c:\erp811\bin\remote
MP8 Remote
MP8SRV.INI
MP8SRV.INI
[Environment] ERP811
SourcePath=C:\ERP811\APO APO
RootPath=C:\ERP811\MP_Data
BIN
StartPath=\system\
RpoDb=dbf REMOTE
RpoLanguage=portuguese SERVER
RpoVersion=811 INCLUDE
SIGACFG
LocalFiles=ads
localdbextension=.dbf
MP_DATA
PictFormat=DEFAULT DATA
TCP DateFormat=DEFAULT SAMPLES
SPOOL
[Drivers]
Environment Active=TCP SYSTEM
SYSTEMLOAD
[TCP]
MY PROJECTS
TYPE=TCPIP
Port=1234
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 – Família SX
Pasta \SYSTEM
Arquivo Descrição
SX1 Perguntas e Respostas
SX2 Mapeamento de Tabelas
SX3 Dicionário de Dados
SX4 Agenda do Schedule de Processos
SX5 Tabelas
SX6 Parâmetros
SX7 Gatilhos
SX9 Relacionamento entre Tabelas
SXA Pastas Cadastrais apontadas no SX3
SXB Consulta por meio da tecla F3 (Consulta Padrão)
SXD Controle do Schedule de Processos
SXE Seqüência de Documentos (+1)
SXF Seqüência de Documentos (próximo)
SXG Tamanho padrão para campos
SXK Respostas das Perguntas (SX1) por Usuário
Famílias de Arquivos de Dados
Pasta \DATA ou Banco de Dados
Prefixo Descrição
SA1 Cadastro de Clientes
SA2 Cadastro de Fornecedores
SA3 Cadastro de Vendedores
SB1 Cadastro de Produtos
SB2 Saldos dos Produtos por Almoxarifado
SB5 Dados Complementares de Produtos
SC1 Solicitações de Compras
SC5 Cabeçalho dos Pedidos de Venda
SC6 Itens dos Pedidos de Venda
SC7 Pedidos de Compras
SD1 Itens das Notas Fiscais de Entrada
SD2 Itens das Notas Fiscais de Saída
SD3 Movimentações Internas de Produtos
SE1 Títulos a Receber
SE2 Títulos a Pagar
SF1 Cabeçalho das Notas Fiscais de Entrada
Arquivos de Dados – por Empresa
O sistema permite controlar até 99 Empresas. Cada Empresa pode ter até
99 Filiais:
Empresa 01 – Filiais 01 Empresa 02 –
Filiais 01
02 02
......
99 99
Filiais
Todo arquivo, exceto SM2, tem um campo XX_Filial que identifica a Filial:
01
01
01
02
02
02
• Ordenação de registros
X
Nos programas: dbSetOrder(8)
dbOrderNickName(“TIPO”)
• Portanto, índices de usuário devem sempre ter um NickName. Deve-se usar a função
dbOrderNickName(“NICKNAME”)
• Índices do sistema, nunca terão NickName. Usa-se dbSetOrder().
Customização
cESTNEG := GetMV(“MV_ESTNEG”)
“N” V
“S” F 100 V
100
201
201 F 200
200
If cESTNEG == “S” .Or. QtdVenda < B2_Saldo
tratamento normal
Else
tratamento de erro
EndIf
Customização
Tabelas
Do Cliente: 000010
Até Cliente: 000050
Da Data: 01/03/06
Até Data: 31/03/06
Exemplo: Preço
Um Pedido de Venda é incluído
100,00
Na emissão da NF, o preço deve ser reajustado em 25%
125,00
Programa-fonte
MATA460A – Emissão NF SERVER
Fórmulas
Compila “SC6->C6_PRCVEN * 1.25”
Preço
Preço := &Formula * 1.25
:= SC6->C6_PRCVEN ção
APO
APO *
N
MATA460A
MATA460A C VE
R
RPO 6_P . 2 5
C 1
>
C6-
MATA460A S
Execução
Execuçãodo do
MATA460A
MATA460A
Preço
Preço := :=
SC6->C6_PRCVEN
Preço := SC6->C6_PRCVEN
*
*
&Formula
1.25
1.25
Emissão NF
Customização
Inserção de Código-Fonte
Run Time
Interpretador Server
Maquina Virtual
FONT PCode
E
DBase, Access Visual Basic, AdvPl
Abap, Oracle,Java
Executável +
Interpretador Executável
A=A+B A = A + &B
A=5
MACRO
965534567654 A= 7
5
End 3
2
3456 3
7654
Customização
Validações
10 2,00 20,00
Campo: D1_VUNIT
Contra-Dominio: D1_TOTAL
Regra: Round(M->D1_VUNIT * M->D1_QUANT, 2)
Customização
Campos de Arquivos
Ex:
Do Case
Case SB1->B1_TIPO == “MC”
Conta := “11302”
Case SB1->B1_TIPO == “ME”
Lançamento Padronizado
Conta := “11303” (SI5)
... Débito: u_ContaDeb()
EndCase
#Include “RWMake.ch"
Return Nil
Configurador - SIGACFG
•Dicionário de Dados
•Menus
Exercícios
Código: 001
Descrição: REAJUSTE DE PREÇO
Fórmula: SB1->B1_PRV1 * 1.25
SIGACFG: menu Ambiente / Cadastros / Formulas
Campo: D1_VUNIT
Sequencia: 001
Cnt. Dominio: D1_TOTAL
Tipo: Primario
Regra: M->D1_QUANT * M->D1_VUNIT
Posiciona: Não
SIGACFG: menu Base de Dados / Dicionario / Gatilhos
Exercício
• Contas
• Transações
• Consultas
• Relatórios
• Excel
• WorkFlow
• TXT / XML
• WebServices
• AdvPL ASP
Case
Sistema de Contas Correntes
Tabelas do sistema
CONTAS TRANSAÇÕES
Nome Tem Nome
Refere-se
E-Mail Número da Transação
E-Mail1 Item da Transação
Saldo Tipo (Depósito ou Saque)
Data
Histórico
Saldo Atual (virtual)
Valor
Aprovação
Exercício – Criação de Arquivos (SX2)
Prefixo: SZ1
Path: \DATA\
Nome: SZ1990
Descrição: CONTAS
Desc.Esp.: CONTAS
Desc.Inglês: CONTAS
Modo Acesso: COMPARTILHADO
Prefixo: SZ2
Path: \DATA\
Nome: SZ2990
Descrição: TRANSAÇÕES
Desc.Esp.: TRANSAÇÕES
Desc.Inglês: TRANSAÇÕES
Modo Acesso: EXCLUSIVO
Modo de Acesso:
Compartilhado Filial = branco
Exclusivo Filial = número da Filial (var. pública cFilAnt)
Função xFilial(Alias)
Criação de Campos (SX3)
Nome do cliente
Criação de Campos (SX3)
Campo Z2_Nome
F3
Criação de Campos (SX3)
1
3
4
Chave Nickname
Campo: Z2_VALOR
Cnt. Dominio: Z2_SLDATU
Tipo: Primario
Regra: IF(M->Z2_TIPO==“D”, SZ1->Z1_SALDO + M->Z2_VALOR,
SZ1->Z1_SALDO - M->Z2_VALOR)
Posiciona: Sim
Alias: SZ1
Ordem: 1
Chave: xFilial(“SZ1”) + M->Z2_NOME
Contas
Corrente
s
Consultas Relatórios
Atualizaçõe
s Programa: Programa:
Con001 Rel001
Contas
Programa: Transações
Cad
• Aquário
– 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 relógio
•Vai o1e2 2
•Volta o1 3
•Vai o 5 e 10 13
•Volta o2 15
•Vai o1e2 17
Programa
Aritméticas:
Somar / Subtrair / Multiplicar / Dividir
Entrada e Saida:
Ler / Gravar / Tela / Impressão / Teclado / Atribuição
Lógicas:
If...Else...EndIf
For...Next
While...End
Do Case...EndCase
Inicio A
Armar Sim
A Esposa
Despertador Resmungar quer $$ ?
Desligar Não
Despertador
Casado
Dar-lhe Sim
há mais de
R$ 100,00 5 anos ?
Repetir Bocejar
3 Não
vezes
Sacudir a Beijar a
Esposa esposa
Sair da Casado
Sim
Cama há mais de
1 ano ?
Sim Não
Acender
Está Escuro ? Beijar a
a luz
esposa
Não
Sim Ir até o
Voltar para Está Frio ? carro
a cama
Não
Possível Voltar Não Está
Fim Ir ao para pegá-las Com as
Banheiro Chaves ?
da rotina
Sim
Tomar Dirigir-se
Café ao escritório
A Fim
Operadores
Matemáticos
+ - * / ** ou ^ %
x := 10 + 20
cCredito == .
nQtde < nSaldo
“OK” And.
V V V
V F F
F V F
F F F
Operadores
Lógicos
V V V
V F V
F V V
F F F
Operadores
Lógicos
:= += -= *= /= ^= ou **= %=
x := 10
x := x + 20
é o mesmo que: x += 20
i++ equivale a i := i + 1
i := 1
i := 1
equivale a MsgAlert(i) mostra 1
MsgAlert(i++) i := i + 1
i := 1
i := 1 equivale a i := i + 1
MsgAlert(++i) MsgAlert(i) mostra 2
Operadores
Strings
x + y x - y x $ y
Concatenação
cNome := “João”
cSobreNome := “Silva”
cNomeCompleto := cNome + cSobreNome
“JoãoSilva”
“A ” - “B” “AB ”
Pertence
“Silva” $ cNomeCompleto .T.
“SILVA” $ cNomeCompleto .F.
Operadores
Especiais
( ) Funcao()
{ } Array, bloco de código
[ ] Array
& Macro
|| Bloco de código
-> Alias de arquivo e var. de memória
SA1->A1_Nome M->A1_Nome
@ Parâmetros por referência
; 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”
IDE – Primeiro Programa
Return
Projeto (.PRJ)
Programa (.PRW) Função
Função
Função
Cadastro
Nome: José
Memória
Nome
José
Valor
1000
A1_NOME
José
D2_VALOR ICMS = Valor * 18 / 100
1000 CPU
Tipos de Variáveis de Memória
Notação Húngara:
Caractere “Casa” cTexto
Numéricas 1234.56 nValor
Data CtoD(“25/10/05”) dData
Lógicas .T. .F. lOk
n X := 1 nX
X éénumérico
numérico
c X := “José” X agora
cX é caracter
é caracter
Operação
n X := n X + 1 ERRO !
matemática
Tipos de Variáveis de Memória
Notação Húngara:
Caractere “Casa” cTexto
Numéricas 1234.56 nValor
Data CtoD(“25/10/05”) dData
Lógicas .T. .F. lOk
Ver Operadores.PRW
Exercicio
Array, Vetor ou Matriz
cNome4 := “Maria”
aNomes
Joao Alberto Pedro Maria
aNomes[1]
aNomes[2]
aNomes[3]
aNomes[4]
Array, Vetor ou Matriz
Variáveis
Armário 1 Armário 2 Armário 3 Armário 4
Array
Armário
Gaveta 1 Joao
Gaveta 2 Alberto
Gaveta 3 Pedro
Gaveta 4 Maria
Array, Vetor ou Matriz
aMatriz[1][1]
aMatriz[1]
aMatriz[1][2]
aMatriz[1][3]
aMatriz[2]
aMatriz[2][1]
aMatriz[2][2]
aMatriz[2][3]
2 25 2 18 2 40 2 33
3 T 3 F 3 T 3 F
Array, Vetor ou Matriz
aNomes := {“Joao”,
{}
{“Joao”} “Alberto”,
“Alberto”} “Pedro”,
“Pedro”}
“Maria”}
AAdd(aNomes, “Joao”)
AAdd(aNomes, “Alberto”)
AAdd(aNomes, “Pedro”)
AAdd(aNomes, “Maria”)
AAdd(aMatriz, {“Joao”,25,.T.})
AAdd(aMatriz, {“Alberto”,18,.F.})
AAdd(aMatriz, {“Pedro”,40,.T.})
AAdd(aMatriz, {“Maria”,33,.F.})
aArray := Array(5)
aArray {Nil, Nil, Nil, Nil,
Nil}
Programa.PRW
User Function Teste()
Comandos
Comandos
Comandos
Comandos
Return
Comandos Comandos
If CGC(cCGC) Comandos
continua Comandos
Else If CGC(cCGC)
abandona continua
r
EndIf Else
o
ed
Comandos abandona
ec
CG
rn
Comandos EndIf
Fo
C
Comandos do Comandos
do
Cl
C
ie
CG
Return Return
nt
e
Function CGC(cCGC)
.T. ou .F.
If cCGC OK
.T. ou .F.
lOK := .T.
Else
lOK := .F.
EndIf
Return lOK
Funções
Programação Estruturada
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
Escôpo das Variávies
Local
Visível somente na função em que foi criada
Private
Visível na função em que foi criada e nas funções seguintes
Public
Visível em todas as funções, a partir do momento em que foi
criada
Static
Visível somente no programa (PRW)
Escôpo das Variávies
Return
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar2 := “ABC"
Return
Escôpo das Variávies
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar2 := “ABC"
Return
Escôpo das Variávies
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar3 Public Func2
cVar2 := “ABC"
Return
Escôpo das Variávies
Return
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar3 Public Func2
cVar2 := “ABC"
Return
Escôpo das Variávies
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar3 Public Func2
cVar2 := “ABC"
Return
Escôpo das Variávies
u_Func3()
Return
PUBLIC Conteúdo
User Function Func3()
cVar3 Public Func2
cVar2 := “ABC"
Return
Ver 052_EscopoVar.prw
Passagem de Parâmetros
Por Valor
Return nICMS
Passagem de Parâmetros
Por Valor
Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)
Return
x := 50
y := 100
Return
Ver 060_Param.prw
Passagem de Parâmetros
Por Valor
Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)
Return
x := 50 x = 50
y := 100
y = 100
Return
Ver 060_Param.prw
Passagem de Parâmetros
Por Valor
Local x := 1
Local y := 2 x=1
u_Param2(x, y) y=2
MsgAlert(x+y)
Return
x := 50
y := 100
Return
Ver 060_Param.prw
Passagem de Parâmetros
Por Referência
Local x := 1
Local y := 2 x=1
u_Param2(@x, y) y=2
MsgAlert(x+y)
Return
x := 50
y := 100
Return
Ver 060_Param.prw
Passagem de Parâmetros
Por Referência
Local x := 1
Local y := 2 x = 50
u_Param2(@x, y) y=2
MsgAlert(x+y)
Return
x := 50 y = 100
y := 100
Return
Ver 060_Param.prw
Passagem de Parâmetros
Por Referência
Local x := 1
Local y := 2 x = 50
u_Param2(@x, y) y=2
MsgAlert(x+y)
Return
x := 50
y := 100
Return
Ver 060_Param.prw
Funções de Caracteres, Números e Datas
Ver 053_Tratamentos.PRW
Aula 3
Macro
Bloco de Código
UDC
Semáforos
Arquivos e Índices
Macro-Substituição
dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1 := SB1->B1_Prv1 * 1.25
MSUnlock()
SB1->(dbSkip())
End
MsgInfo("Terminou!")
Return
Macro-Substituição
dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1
&(cFormula) * *
SB1->B1_Prv1 := &(SB1->B1_Prv1 1.25
1.25)
MSUnlock()
SB1->(dbSkip())
End
MsgInfo("Terminou!")
Return
Ver Reajuste.PRW
Macro-Substituição
Aplicação de Macros
• Validações
“If(M->I2_Valor < GetMV(‘MV_VRMAX’), .T., .F.)”
• Gatilhos
“M->D1_QUANT * M->D1_VUNIT”
• Fórmulas
“SB1->B1_Prv1 * 1.25”
• Lançamentos Contábeis Automáticos
“If(SD3->D3_TIPO=‘MC’, ‘33201’+SD3->D3_CC, ‘11303’)”
Bloco de Código
bBloco := {|x| x * 2}
Ver 051_Bloco.prw
Bloco de Código
DBEval()
Ver 050_Array.prw
Bloco de Código
Ordenação de array
{“Joao
aMatriz := { {“Pedro ”,15}, {“Joao
”,10} {“Pedro ”,10} ,{“Alberto”,20}, {“Maria
”,15} ”,30} }
Ver 050_Array.prw
UDC – User Defined Command
Legibilidade e Manutenibilidade do Fonte
#DEFINE
#IFDEF...#ELSE...#ENDIF
#IFNDEF
#INCLUDE
#COMMAND
Ver 080_UDC.prw
Semáforos
Controle de numeração sequencial
Prefixo Descrição
SA1 Cadastro de Clientes
SA2 Cadastro de Fornecedores
SA3 Cadastro de Vendedores
SB1 Cadastro de Produtos
SB2 Saldos dos Produtos por Almoxarifado
SB5 Dados Complementares de Produtos
SC1 Solicitações de Compras
SC5 Cabeçalho dos Pedidos de Venda
SC6 Itens dos Pedidos de Venda
SC7 Pedidos de Compras
SD1 Itens das Notas Fiscais de Entrada
SD2 Itens das Notas Fiscais de Saída
SD3 Movimentações Internas de Produtos
SE1 Títulos a Receber
SE2 Títulos a Pagar
SF1 Cabeçalho das Notas Fiscais de Entrada
Arquivos de Dados – por Empresa
O sistema permite controlar até 99 Empresas. Cada Empresa pode ter até
99 Filiais:
Empresa 01 – Filiais 01 Empresa 02 –
Filiais 01
02 02
......
99 99
Todo arquivo, exceto SM2, tem um campo XX_Filial que identifica a Filial:
01
01
01
02
02
02
Empresa: XX Filial: 02
dbGoTop()
dbSeek(xFilial(“SC5”))
While !EOF()
dbSkip() Leitura sequencial, registro a registro
End
EOF() .T.
Posicionamento de Arquivos
Acesso direto ao registro
Por chave completa ou parcial
dbSeek(xFilial(“SZ2”)+”0003”+”02”) Chave completa
AxPesqui(
)
AxVisual(
)
AxInclui()
AxAltera(
)
AxDeleta(
)
AxCadastro
AxInclui
()
Ver 100_Cad.prw
AxCadastro
Ver 110_TranM1.prw
Sobre variáveis…
Referência
Nome := “João” a uma
variável
É
atribuiçã S Cria a
o de variável
valor?
Variáve
Atribui o S l N Nome := “João”
valor à existe Cria como privada
variável ?
“João” Var. Nome Erro:
N
variável
não existe
Existe
um N
arquivo
aberto ?
Arquivo Para não confundir variáveis de memória com
S campos de arquivos, usa-se o ALIAS:
Codigo Nome
João M->Z1_Nome variável de memória
Existe
SZ1->Z1_Nome campo de arquivo
Grava o S campo N
valor no com
este
campo Arquivo
nome ?
“João” Campo Nome Codigo Descricao
Sobre variáveis…
JOSE
aprovador@tecnico.com.br
• Ver FuncMod2
• Ver MarkBrow (exemplo do Baile)
Modelo 2
GetDados Enchoice
Número
Variáveis
Nome Data
de memória
aCols
Modelo 2
Enchoice
Número
Variáveis
Nome Data
de memória
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
aHeader
GetDados
6 Valid.
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
2
02 S Saque 300,00 .F. aCols
3
03 S Saque 2.500,00 .F.
1 2 3 4 5
Modelo 2
Array aRotina
lRet
mBrowse()
.T.
Monta os parametros:
1. Variáveis de memória
2. aHeader 3 5
Inclusão nOpc Exclusão
3. aCols
4. Enchoice
4
Ver 120_TranM2.prw
Modelo 2
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 Nil Nil Array(?)
Array(5)
Nil Nil Nil
aCols
// Como cada elemento de aCols sempre contera um elemento a mais que o aHeader,
// adiciona em aCols um ARRAY com o "num.elementos de aHeader + 1", ou seja, 5 elementos.
AAdd(aCols, Array(Len(aHeader)+1))
4
Modelo 2 – Criação do aCols para Inclusão
Preenche o aCols de acordo com o Inicializador-Padrão
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 Nil“
“ Nil
“D” “ Nil “ Nil 0,00 Nil
aCols
For i := 1 To Len(aHeader)
“Z2_ITEM”
“Z2_VALOR”
“Z2_HIST”
“Z2_TIPO”
aCols[1][i] := CriaVar(aHeader[i][2])
2
3
4
1 2
3
4
1
Next
Modelo 2 – Criação do aCols para Inclusão
Inicializa a última coluna com .F.
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 Nil
“ “ Nil
“D” “ Nil “ Nil 0,00 .F.
Nil
aCols
// aCols[1][5] := .F.
aCols[1][Len(aHeader)+1] := .F.
4
Modelo 2 – Criação do aCols para Inclusão
Inicializa a coluna do ITEM com 01
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 “ “
“01“ Nil
“D” “ Nil “ Nil 0,00 .F.
Nil
aCols
1
Modelo 2
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
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 Nil Nil Nil Nil Nil
aCols
// Como cada elemento de aCols sempre contera um elemento a mais que o aHeader,
// adiciona em aCols um ARRAY com o "num.elementos de aHeader + 1", ou seja, 5 elementos.
AAdd(aCols, Array(Len(aHeader)+1))
4
Modelo 2 – Criação do aCols para Alteração
Preenche o aCols com os dados lidos do arquivo
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 Nil
“01“ Nil
“D” “Deposito“
Nil Nil 500,00 Nil
aCols
For i := 1 To Len(aHeader)
If aHeader[i][10] == "R“
“Z2_ITEM”
“Z2_VALOR”
“Z2_HIST”
“Z2_TIPO”
aCols[nLin][i] := FieldGet(FieldPos(aHeader[i][2]))
Else 1
4
2
3 8
4
7
6 1
2
3
4 4 6 7 8
Z2_ITEM Z2_TIPO Z2_HIST
aCols[nLin][i] := CriaVar(aHeader[i][2], .T.)
Z2_VALOR
EndIf 01 D Deposito 500,00
02 D Deposito 150,00
Next 03 S Saque 90,00
Modelo 2 – Criação do aCols para Alteração
Inicializa a última coluna com .F.
1 2 3 4
1 Item Tipo Histórico Valor Titulo
2 Z2_ITEM Z2_TIPO Z2_HIST Z2_VALOR Campo
3 @E 999,999,999.99 Picture
4 2 1 20 12 Tamanho
5 0 0 0 2 Decimal
6 Valid. aHeader
7 C C C N Usado
8 SZ2 SZ2 SZ2 SZ2 Tipo
9 R R R R Arquivo
10 Contexto
1 2 3 4 5
1 “01“ “D” “Deposito“ 500,00 .F.
Nil
aCols
// aCols[1][5] := .F.
aCols[nLin][Len(aHeader)+1] := .F.
4
Modelo 3
Similar ao Modelo2
Diferença:
Ver 130_TranM3.prw
Aula 5
Telas
Relatórios
Reposicionamento de arquivos
Integração com Excel
SQL
OOP
Arquivos TXT e XML
Telas
Tela
• Compilar e executar
Relatórios
Perguntas
• Arquivo SX1
EndIf
Relatórios
Índice temporário
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.
dbSelectArea(cAlias)
dbSetOrder(nOrdem)
dbGoTo(nRecno)
Reposicionamento de Arquivos
...
RestArea(aAreaSA1)
RestArea(aAreaSB1)
RestArea(aAreaSC5)
Return
APExcel
Ver 170_Planilha.prw
SQL - Structured Query Language
Ver 090_DBFSQL.prw
Ver texto Programando SQL com RDMake
Relação de Stored Procedures no PPT Oficial
MPSDU
MPSDU
TCP
4
Environment
Administrador
admin
MPSDU
OOP – Programação Orientada a Objetos
• Classes
• Métodos
• Propriedades
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
<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>
do
a sal Contas Saldo
aliz
Atu
Efetua
transações Aguardando o
Gra aprovador
va
t ran rova
saç Transa- va ou Rep o
acessar
Cliente ão
ções
Apro
sistema... Aprovador
WorkFlow
Fluxo automático
Saldo Negativo?
do
a sal Contas Saldo Dispara um WorkFlow
aliz
Atu
Efetua WFSalNeg()
transações
Gra osta WFRetorno()
va a resp
t ran Grava vado)
saç Transa- o ou Repro
Cliente ad
ão (Aprov
ções
Executa a função
l de retorno
ai
M
E-
Job WFRET
Caixa
Caixade
de WFReturn()
Saída
Saída
Resposta Caixa
(Aprovado ou Reprovado)
Caixade
de
Entrada
Entrada
Aprovador
WebServices
Integração de sistemas
Sistema Sistema
TXT/XML
A B
Web Service
<Nome>JOSE</Nome>
WSDL
Sistema Sistema
http://...
A B
<Saldo>1000</Saldo>
WebServices
Configuração
O Protheus dispõe de um Assistente de Configuração:
\ERP811\BIN\REMOTE\MP8WIZARD.EXE
WebServices
Configuração
ws
\web\ws
ENVIRONMENT
WebServices
Configuração
localhost/ws/9901
WebServices
Configuração
WebServices
Configuração – 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 [EVIRONMENT]
INSTANCES=1,3
INSTANCES=1,3 SourcePath=C:\ERP811\APO
SIGAWEB=WS
SIGAWEB=WS RootPath=C:\ERP811\MP_Data
INSTANCENAME=ws1
INSTANCENAME=ws StartPath=\system\
ONSTART=__WSSTART
ONSTART=__WSSTART ...
ONCONNECT=__WSCONNECT
ONCONNECT=__WSCONNECT [EVIRONMENT1]
PREPAREIN=99,01
PREPAREIN=99,01 Emp. 99, Filial 01 SourcePath=C:\ERP811\APO1
RootPath=C:\ERP811\MP_Data
[ONSTART]
[ONSTART] StartPath=\system\
JOBS=JOB_WS_9901,JOB_WS1_9901
JOBS=JOB_WS_9901 ...
WebServices
http://localhost/FORNECESALDO.apw?WSDL
http://localhost
WebService ForneceSaldo
WSDL
Método BuscaSaldo
Cliente WSForneceSaldo Nome
Método BuscaSaldo Saldo
Nome
Saldo
Sistema
Contas
WebServices
http://localhost
WebService ForneceSaldo
WSDL
Método BuscaSaldo
Cliente WSForneceSaldo Nome
João
Método BuscaSaldo Saldo
Nome
1000,00
1000,00
Saldo
João
10
00
Jo
,0
ConsultaSaldo
ã
0
Sistema
o
Tela
Nome:João
Saldo: 1000,00
Contas
100
OK
0,
ão
Saldo(cNome) Jo
00
oWS := WSForneceSaldo():New()
oWS:BuscaSaldo(cNome)
Portal Protheus
Configuração
Para o desenvolvimento de páginas Internet, via AdvPL ASP, é
necessário configurar o módulo web Portal Protheus:
Portal Protheus
Configuração
PP – Portal Protheus
pp
\web\pp
ENVIRONMENT
http://localhost/ws/9901
Portal Protheus
Configuração
localhost/pp
Portal Protheus
Configuração
HTML
Página estática (html)
Servidor Internet
Browser
http://www.empresax.com.br/inicio.htm inicio.htm
21/02/06
Browser
http://www.empresax.com.br/inicio.htm inicio.htm
21/02/06
Browser RPO
http://www.empresax.com.br/u_inicio.apw inicio.prw
Pagina.aph
<html>
<body>
Benvindo ao site da Empresa X
Ver 230_ASP1.prw e 235_ASP1.aph
Ver 240_ASP2.prw e 245_ASP2.aph Hoje é <%=Date()%>
Ver 250_ASP3.prw e 255_ASP3.aph </body>
Ver 260_ASP4.prw e 265_ASP4.aph </html>
Ver 270_ASP5.prw e 275_ASP5.aph
Call Center
Telnet
Integração com equipamentos micro-terminais
No MP8SRV.INI, acrescentar:
[TELNET]
Enable=1
Environment=Environment RPO
Main=MTTRAN MTTran()
Port=1024
• Linguagem AdvPL
• Tecnologia Protheus
• Dicas e Notícias
• F.A.Q.
• Guias de Referência
• Releases
• Sistema
Top Connect com SQL
Duvidas
Seguranç
a
Dicionário
de Dados Dicionário de
Dados
Programa A Programa C
Programa B