Você está na página 1de 68

Totvs Centro de Desenvolvimento So Paulo 2014

Arquitetura Protheus

Arquitetura Protheus

ndice
I)
II)
III)
IV)

Arquitetura
Estruturas de Dados e Metadados
O que o AdvPL (Noes)
Criao de um Ambiente ( Prtica )

Arquitetura

Arquitetura Protheus
Arquitetura

1974 Assembly Batch SIGA


1978 Natural / Adabas Online
Mainframe

1983 DBase II/III, Clipper Summer (entrega de fontes)

1990 Clipper 5 SIGA Advanced 2.07/4.07 (customizaes)


DOS

1995 FiveWin/Top/Coencisa, VO, Delphi, SQL


2000 AdvPL Protheus 5.08/6.09/7.10/8.11/10
Windows
4

Arquitetura Protheus
Arquitetura

Windows
Linux
Browser

Windows
Linux
Unix

Windows
Linux
Unix

Smart Client
(SmartClient.exe)

Smart Client Html


(Browser)

RPO (TTTP110.RPO)

DBF/CTREE

Client WEB
(ActiveX)

Application Server
(AppServer.exe)
Monitor
(Monitor.exe)

Client
(Smart Client)

Application
Server

DBAccess

Database
Server

Arquitetura Protheus
Arquitetura
Programa-fonte

APPLICATION
SERVER

SMARTCLIENT

MATA010
. . .
dbSelectArea(SB1)
RecLock(SB1, .T.)
SB1->B1_COD := 000001
SB1->B1_DESC := Produto A
MSUnlock()

APO
MATA010
Cad.Produtos

. . .

RPO
MATA010

MATA410

Executa
MATA010

Executa
MATA410

CTBR040

Ped.Vendas

Executa
CTBR040

Balancete Cont.
6

Arquitetura Protheus
Arquitetura

Executveis

Application Server (Server)


Smart Client (Remote)
DBAccess (Top Connect)
Monitor
Development Studio (TDS/IDE)

Arquitetura Protheus
Arquitetura

RPO

Arquivo binrio com os APOs


Verso especfica do RPO para:
- Tipo de Base de dados
- Lngua
T T x x 110.RPO
P Portugus, S Spanish, E English
D DBF, A ADS, C CTree, T DBAccess (TopConnect)

BUILD
Patch
LIB

Executveis e DLLs
Atualizaes do RPO
Conjunto de classes/funes (programas) referentes ao
Framework

Arquitetura Protheus
Arquitetura
\TDE\ADVPL
ERP11

APO (RPO)
BIN
APPSERVER (executveis)
SMARTCLIENT (executveis)
INCLUDE (arquivos .CH)
PROTHEUS_DATA

DATA (verso ISAM - .DBF e .CDX)


SPOOL (relatrios impressos em disco)
SYSTEM (Dic.Dados, Menus, ...)
SYSTEMLOAD (arq. de carga inicial)
MY PROJECTS (fontes de customizaes)

Arquitetura Protheus
Aplication Server

Destino:
c:\tde\advpl\erp110\bin\appserver\AppServer.exe console
Iniciar em: c:\tde\advpl\erp110\bin\appserver

Para encerrar o Server: Ctrl+C, e SIM ou YES

-install inicia o Protheus como um servio do Windows


-remove remove da lista de servios
10

Arquitetura Protheus
Smart Client

Destino:
c:\tde\advpl\erp110\bin\smartclient\SmartClient.exe
Iniciar em: c:\tde\advpl\erp110\bin\smartclient

Parmetros do atalho (opcionais):


-P programa inicial
-E ambiente (nome da seo environment no .INI do Server)
-M permite mltiplas instncias (cpias) do SmartClient na mesma mquina
Exemplo: ...\TotvsSmartClient.exe P=SIGAFAT E=Environment -M
11

Arquitetura Protheus
Ambiente

Localizao
dos arquivos

RPO
Arqs. do Sistema
Arqs. Dados do Usurio

Base de Dados

Lngua

Portugus
Spanish
English

DBF
ADS
CTree
SQL

Comunicao
Tipo de Comunicao

TCP-IP
Endereo do Servidor
Porta

12

Arquitetura Protheus
Arquitetura

APPSERVER.INI
[Environment]
SourcePath=C:\ERP101\APO
RootPath=C:\ERP101\Protheus_Data
StartPath=\system\
RpoDb=TOP
RpoLanguage=portuguese
RpoVersion=110
LocalFiles=ads
localdbextension=.dbf
PictFormat=DEFAULT (ou AMERICAN)
DateFormat=DEFAULT (ou AMERICAN)

ERP110
APO TTTP110.RPO
BIN
APPSERVER
SMARTCLIENT
INCLUDE
PROTHEUS_DATA
DATA

[DBACCESS]

SPOOL

SERVER=127.0.0.1
PORT=7890
DATABASE=POSTGRES
ALIAS=ADVPL

SYSTEM
SYSTEMLOAD
MY PROJECTS

[Drivers]
Active=TCP

[TCP]
TYPE=TCPIP
Port=1234
13

AdvPL usando Queries e Procedures

Configurao INI Server Protheus


MVC Nossa inspirao
APPSERVER.INI
[Environment]
SourcePath=C:\ERP110\APO
RootPath=C:\ERP110\Protheus_Data
StartPath=\system\
RpoDb=TOP
RpoLanguage=portuguese
RpoVersion=110
LocalFiles=ads
localdbextension=.dbf
PictFormat=DEFAULT (ou AMERICAN)
DateFormat=DEFAULT (ou AMERICAN)

[TOTVSDBACCESS]
SERVER=192.16.0.2
PORT=7890
DATABASE=POSTGRES
ALIAS=ADVPL
MEMOMEGA=1

Application Server

Protheus
IP 192.16.0.1
Porta 1234

DataBase Server
DbAccess
IP 192.16.0.2
Porta 7890

[Drivers]
Active=TCP

[TCP]
TYPE=TCPIP
Port=1234
14

AdvPL usando Queries e Procedures

Configurao INI Server Protheus


MVC Nossa inspirao
APPSERVER.INI
[Environment]
SourcePath=C:\ERP110\APO
RootPath=C:\ERP110\Protheus_Data
StartPath=\system\
RpoDb=TOP
RpoLanguage=portuguese
RpoVersion=101
LocalFiles=ads
localdbextension=.dbf
PictFormat=DEFAULT (ou AMERICAN)
DateFormat=DEFAULT (ou AMERICAN)
TopSERVER=192.16.0.2
TopPORT=7890
TopDATABASE=POSTGRES
TopALIAS=ADVPL
TopMEMOMEGA=1

Application Server

Protheus
IP 192.16.0.1
Porta 1234

DataBase Server
DbAccess
IP 192.16.0.2
Porta 7890

[TOTVSDBACCESS]
SERVER=192.16.0.2
PORT=7890
DATABASE=POSTGRES
ALIAS=ADVPL
MEMOMEGA=1
15

Arquitetura Protheus
Arquitetura
APPSERVER.INI
Usurio Brasileiro
EnvPOR

Usurio Argentino
EnvSPA

[EnvPOR]
SourcePath=C:\ERP110\APO
RootPath=C:\ERP110\Protheus_Data
StartPath=\system\
RpoDb=TOP
RpoLanguage=portuguese
RpoVersion=110
LocalFiles=ads
localdbextension=.dbf
PictFormat=DEFAULT
DateFormat=DEFAULT
[EnvSPA]
SourcePath=C:\ERP110\APO
RootPath=C:\ERP110\Protheus_Data
StartPath=\system\
RpoDb=TOP
RpoLanguage=spanish
RpoVersion=110
LocalFiles=ads
localdbextension=.dbf
PictFormat=DEFAULT
DateFormat=DEFAULT

ERP110

TTTP110.RPO

APO TTTS110.RPO
BIN
APPSERVER

SMARTCLIENT
INCLUDE
PROTHEUS_DATA
DATA
SPOOL
SYSTEM

SYSTEMLOAD
MY PROJECTS

16

Arquitetura Protheus
Arquitetura

SMARTCLIENT.INI
[Config]
LastMainProg=sigamdi

[Drivers]
Active=TCP
[TCP]
Server=localhost
Port=1234

17

Arquitetura Protheus
Arquitetura

Application Server

ou
Application Server

Smart Client
Smart Client

Smart Client

Smart Client

18

Arquitetura Protheus
Arquitetura Simplificada

SmartClient

Application
Server

License
Server

Ctree Server

DBAccess

Banco de
Dados

19

Arquitetura Protheus
Arquitetura com Balance

Arquitetura com Balance

SmartClient

Balance

Slaves
License
Server

Ctree Server

DBAccess

Banco de
Dados

20

Arquitetura Protheus
HardlLock

O hardlock um hardware de proteo que:


I.
Protege o sistema de acessos
indevidos
II. Agiliza o processo de liberao de
senhas
III. Controla os acessos simultneos ao
sistema (semaforizao)

21

Estruturas de Dados e
Metadados

Arquitetura Protheus
Estruturas de Dados e Metadados
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
23

Arquitetura Protheus
Estruturas de Dados e Metadados
SA
SB
SC
SD
SE
SF
SG
SH
CT
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
P? - Projetos Especiais
SZ? e Z?? - Livres

M.E.R. Modelo de Entidades e Relacionamento


24

Arquitetura Protheus
Estruturas de Dados e Metadados

O sistema permite controlar at 99 Empresas.


Cada Empresa pode ter at 99 Filiais.
Empresa 01
Filiais 01
02
..
.
99

Empresa 02
Filiais 01
02
..
.
99

Empresa 99
Filial
01

SA1010
SA2010
SB1010
...

SA1020
SA2020
SB1020
...

SA1990
SA2990
SB1990
...

Para cada Empresa criado um conjunto de arquivos:

SXXnn0 onde:

XX = Prefixo do arquivo
nn = Empresa
25

Arquitetura Protheus
Estruturas de Dados e Metadados

Os dados das Filiais ficam dentro do arquivo de cada Empresa.


FILIAL

CAMPO1

CAMPO2

CAMPO3

01
01
01

Registro da Filial 01
Registro da Filial 01
Registro da Filial 01

02
02
02
...

Registro da Filial 02
Registro da Filial 02
Registro da Filial 02
...

...

Todo arquivo, exceto SM2 (Moedas), tem um campo que identifica a Filial nos
registros.
26

Arquitetura Protheus
Nomenclatura de Campos

Arquivo:

SA1
A1_FILIAL
A1_COD
A1_NOME
A1_END

SA2
A2_FILIAL
A2_COD
A2_NOME
A2_END

SB1
B1_FILIAL
B1_COD
B1_DESC
B1_TIPO

QA1
QA1_FILIAL
QA1_COD
QA1_DESC

27

Arquitetura Protheus
Modo de Acesso

Modo de Acesso
Compartilhado

registros compartilhados entre as filiais

Campo Filial: em branco


Exclusivo

cada Filial tem seus os prprios registros

Campo Filial: cdigo da Filial (varivel cFilAnt)


O usurio pode
selecionar apenas 1
Empresa e 1 Filial
por vez

SA1 (Cad.Clientes) - Compartilhado


A1_FILIAL

Empresa 01

Filiais

01

A1_COD

A1_NOME

000015
000016
000001
000020
000007

FABRICA DE TINTAS E VERINIZES LTDA


TEX MALHAS E CONFECCOES S.A
CLIENTE PADRAO
ARMANDO JOSE FLORES
COMERCIO SOM DO MUNDO

SC5 (Pedidos de Venda) - Exclusivo


C5_FILIAL

C5_NUM

C5_EMISSAO

C5_CLIENTE

C5_PROD

C5_VALOR

02

01
01
01

000001
000005
000007

01/01/04
01/01/04
20/01/04

000002
000023
000016

1111014
1313000
1515140

15.000,00
5.600,00
5.600,00

03

02
02
02

000001
000005
000007

01/01/04
01/01/04
20/01/04

000002
000023
000016

1111014
1313000
1515140

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

1111014
1313000
1515140

15.000,00
5.600,00
5.600,00

28

Arquitetura Protheus
Modo de Acesso

Compartilhado
A1_Filial

A1_Cod
000001

A1_Nome
JOS

Empresa XX
Filiais
01
02

Exclusivo
A1_Filial
01

A1_Cod
000001

A1_Nome
JOS

02

000001

JOS

Preenchimento do campo Filial:


A1_FILIAL := ??

A1_FILIAL := xFilial(SA1)

ou 01 ou
02...

A1_FILIAL := xFilial(SA1) cFilAnt


C5_FILIAL := xFilial(SC5) cFilAnt

29

Arquitetura Protheus
ndice
ndice Primrio

acesso direto ao registro


verificao

FILIAL+CODIGO
000001
000002
000007
000008
000015
000016
000019
000020
000023
000024
000026
000027
000028
000030
000033

RECNO

RECNO

03
09
05
07
01
02
13
04
08
06
10
11
12
15
14

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

de chave duplicada

A1_FILIAL

A1_COD

A1_NOME

000015
000016
000001
000020
000007
000024
000008
000023
000002
000026
000027
000028
000019
000033
000030

FABRICA DE TINTAS E VERINIZES LTDA


TEX MALHAS E CONFECCOES S.A
CLIENTE PADRAO
ARMANDO JOSE FLORES
COMERCIO SOM DO MUNDO
JOAO DA SILVA
FLORICULTURA FULO DE MARAVILHA
PREFEITURA MUNICIPAL DE SAO PAULO
ECOSSISTEMA DIGITAL
ACTIONVEA IMP. EXP.
STARMEAL LEAK S.A.
REIZA KERN IMP. EXP.
JOAO DE ALMEIDA SILVA
DESPACHANTE
IMPORTADOR EUA

Acesso direto ao registro:


dbSeek( +000020) ou
dbSeek(xFilial(SA1)+000020)
30

Arquitetura Protheus
ndice
Demais ndices: ordenao de registros
1

FILIAL+CODIGO RECNO

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

FILIAL+NOME
ACTIONVEA..
ARMANDO J..
CLIENTE P..
COMERCIO ..
DESPACHAN..
ECOSSISTE..
FABRICA D..
FLORICULT..
IMPORTADO..
JOAO DA S..
JOAO DE A..
PREFEITUR..
REIZA KER..
STARMEAL ..
TEX MALHA..

EOF() .T.

RECNO

RECNO
RECNO A1_FILIAL
A1_COD

10
04
03
05
14
09
01
07
15
06
13
08
12
11
02

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

Leitura

A1_COD
A1_NOME A1_NOME

000015
FABRICA DE TINTAS E
000016
TEX MALHAS E CONFECC
000001
CLIENTE PADRAO
000020
ARMANDO JOSE FLORES
000007
COMERCIO SOM DO MUND
000024
JOAO DA SILVA
000008
FLORICULTURA FULO DE
000023
PREFEITURA MUNICIPAL
000002
ECOSSISTEMA DIGITAL
000026
ACTIONVEA IMP. EXP.
000027
STARMEAL LEAK S.A.
000028
REIZA KERN IMP. EXP.
sequencial:
em
ordem
NomeSILV
000019
JOAO
DE de
ALMEIDA
000033
DESPACHANTE
dbSetOrder(2)
000030
IMPORTADOR EUA

dbGoTop()
While !Eof()
...
dbSkip()
End

31

O que o AdvPL ?

Arquitetura Protheus
Variveis de Memria

Cadastro
Nome:

Jos

Memria
Nome
Jos
Valor
1000

A1_NOME
Jos
D2_VALOR
1000

ICMS = Valor * 18 / 100

CPU
33

Arquitetura Protheus
Notao Hngara

1
cTexto :=
Casa
Caractere (string) Casa
Numrico

1234.56
nValor := 1234.56

Data

dData := CtoD(25/10/08)
CtoD(25/10/08)

Lgico

.T.
.F.
lOk :=
.T.

Array

{Joo,
Maria}
aNomes :=Pedro,
{Joo,Pedro,Maria}

Bloco de Cdigo

{||
5 +
} 5 + 10 }
bSoma
:=10
{||

Nulo

Nil
x := Nil

34

Arquitetura Protheus
Tipagem da Varivel

n X := 1

nX
X numrico
numrico

c X := Jos

X agora
cX caracter
caracter

n X := n X + 1

Operao
ERRO
matemtica
!

35

Arquitetura Protheus
Estruturas de Dados e Metadados

Funo ValType(NomeVar) tipo da varivel: C, N, D, L, A, B, U

Exemplo:

cNome := Jose
nValor := 1000
dData := CtoD(25/10/08)
x := Nil

ValType(cNome)
ValType(nValor)
ValType(dData)
ValType(x)

C
N
D
U

36

Arquitetura Protheus
Array

Cada varivel armazena um dado nico:


cNome1
cNome2
cNome3
cNome4

:=
:=
:=
:=

Memria

Joao
Alberto
Pedro
Maria

cNome1
Joao

cNome2
Alberto

cNome3

cNome4

Pedro

Maria

aNomes
Joao

Alberto

Pedro

Maria

Variveis do tipo Array: armazenam uma coleo de dados


aNomes := {Joao, Alberto, Pedro, Maria}

aNomes[1]
aNomes[2]
aNomes[3]
aNomes[4]

1
elemento

2
elemento

3
elemento

4
elemento

37

Arquitetura Protheus
O que o AdvPL ?

Variveis
Armrio 1

Armrio 2

Armrio 3

Armrio 4

Joao

Alberto

Pedro

Maria

Array
Armrio
Gaveta 1

Gaveta 2

Gaveta 3

Gaveta 4

Joao

Alberto

Pedro

Maria

38

Arquitetura Protheus
O que o AdvPL ?

aPessoa := {Joao, 25, .T.}


Um array pode conter outros arrays: Matriz
aMatriz :=

{{Joao,25,.T.},

{Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.} }

aMatriz[1][1]
aMatriz[1]
aMatriz[1][2]
aMatriz[1][3]

aMatriz[2]
aMatriz[2][1]
aMatriz[2][2]
aMatriz[2][3]

aMatriz := {{Joao
,
{Alberto,
{Pedro ,
{Maria ,

25,
18,
40,
33,

.T.},;
.F.},;
.T.},;
.F.}}
39

Arquitetura Protheus
O que o AdvPL ?

aMatriz := {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.} }

aMatriz := {{Joao
,
{Alberto,
{Pedro ,
{Maria ,
Gaveta 1
1

Joao

.T.},;
.F.},;
.T.},;
.F.}}

Gaveta 2

3
25

25,
18,
40,
33,

1
T

Alberto

Gaveta 1

Gaveta 3

3
18

1
F

Pedro

Gaveta 2

Gaveta 4
1

3
40

Maria

Gaveta 3

3
33

Gaveta 4

Joao

Alberto

Pedro

Maria

25

18

40

33

40

Arquitetura Protheus
O que o AdvPL ?

Adicionar elementos num array vazio


aNomes := {Joao,
{}
{Joao}
Alberto,
Alberto} Pedro,
Pedro} Maria}
AAdd(aNomes, Joao)
AAdd(aNomes, Alberto)
AAdd(aNomes, Pedro)
AAdd(aNomes, Maria)

aNomes
:= {} {Joao,25,.T.})
AAdd(aMatriz,
While
!EOF() {Alberto,18,.F.})
AAdd(aMatriz,
AAdd(aNomes,{Pedro,40,.T.})
A1_Nome)
AAdd(aMatriz,
dbSkip()
AAdd(aMatriz,
{Maria,33,.F.})
End
aMatriz: {{Joao,25,.T.}, {Alberto,18,.F.}, {Pedro,40,.T.}, {Maria,33,.F.}}
41

Arquitetura Protheus
O que o AdvPL ?

Funo Array(n): retorna um array com n elementos nulos


aPessoa := Array(3)
aPessoa

{Nil, Nil, Nil}

Atribuio de valor aos elementos do array


aPessoa[1] := Joao
aPessoa[2] := 25
aPessoa[3] := .T.
aPessoa

{Joao, 25, .T.}

42

Arquitetura Protheus
O que o AdvPL ?

a1 := {Joao, 25, .T.}

a1
a2

{Pedro, 25, .T.}

a1 := {Joao, 25, .T.}

a1

{Joao, 25, .T.}

a2 := AClone(a1)
a2[1] := Pedro

a2

{Pedro, 25, .T.}

a2 := a1
a2[1] := Pedro

43

Arquitetura Protheus
O que o AdvPL ?

Function

PRW
Function
Local

Private

Public

Static

Function

Function

44

Arquitetura Protheus
O que o AdvPL ?

Local
Visvel somente na funo em que foi criada.

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);
-Pode ser declarada fora da funo;
- criada na chamada de qualquer funo dentro do PRW.
45

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"

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

46

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"
u_Func2()

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

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"

LOCAL

Contedo

u_Func2()

cVar
cVar1

Func2
Func2

PRIVATE

Contedo

cVar2

Private Func2

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

48

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"

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

49

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"

LOCAL

Contedo

u_Func2()

cVar
cVar1

Func2
Func2

PRIVATE

Contedo

cVar2

ABC

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

50

Arquitetura Protheus
O que o AdvPL ?
User Function Func1()
Local cVar := "Func1"
u_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

51

Arquitetura Protheus
Funes

Programa.PRW
User Function Soma()
RPO
Local nX := 5
Local nY := 10

u_Soma

MsgAlert(nX + nY)
Return

Execuo (chamada) da funo: u_Soma()


No pode haver mais do que uma funo com o mesmo nome
O nome da funo pode ter at 10 caracteres
52

Arquitetura Protheus
Funes

User Function CadCli()

User Function CadFor()

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)

.T. ou .F.

.T. ou .F.

If cCGC OK
lOK := .T.
Else
lOK := .F.
EndIf
Return lOK

53

Arquitetura Protheus
Funes

CAD1.PRW

CAD2.PRW

GENERICAS.PRW

User Function CadCli()

User Function CadFor()

Function CGC(cCGC)

If CGC(cCGC)
...
Else
...
EndIf

If CGC(cCGC)
...
Else
...
EndIf

Grava()

Grava()

Return

If cCGC OK
lOK := .T.
Else
lOK := .F.
EndIf
Return lOK

Return

CAD3.PRW
Static Function Grava()
...
Return

Function
User Function
Static Function

Static Function Grava()


...
Return

desenvolvimento Totvs
desenvolvimento Usurio
desenvolvimento Totvs/Usurio

User Function CadXXX()


...
Grava()
Return

podem estar em qualquer .PRW


somente no prprio .PRW

54

Arquitetura Protheus
Funes

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

So criadas
variveis
LOCAIS

Return nICMS
55

Arquitetura Protheus
Funes

User Function Venda()


Local
Local
Local
Local

cRegiao
nValor
nAliquota
nICMS

cRegiao
:=
nValor
:=
nAliquota :=
nAliquota
nICMS
:=

NORDESTE
NORDESTE
1000
1000
18 7
u_ICMS(cRegiao, nValor, @nAliquota)

nAliquota
Antes:

18

Depois:

MsgInfo(nAliquota)
Return
User Function ICMS(cReg, nVal, nAliq)
If cReg == "NORDESTE
nAliq := 7
EndIf
Return nVal * nAliq / 100
56

Arquitetura Protheus
Bloco de Cdigo

User Function Reajuste()

dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1 := SB1->B1_Prv1 * 1.25
MSUnlock()
SB1->(dbSkip())
End

Frmula fixada no
cdigo-fonte

MsgInfo("Terminou!")
Return

57

Arquitetura Protheus
Bloco de Cdigo
User Function Reajuste()
Local cFormula
dbSelectArea("SM4")
Arquivo SM4 - Frmulas
dbSetOrder(1)
M4_FILIAL: 01
If dbSeek(xFilial("SM4") + "001")
M4_CODIGO: 001
cFormula :=SB1->B1_Prv1
SM4->M4_Formula
* 1.25 M4_FORMULA: SB1->B1_Prv1
dbSelectArea("SB1")
dbGoTop()
While !SB1->(Eof())
RecLock("SB1")
SB1->B1_Prv1 := SB1->B1_Prv1
&(cFormula) * 1.25
&(SB1->B1_Prv1
* 1.25)
MSUnlock()
SB1->(dbSkip())
End
MsgInfo("Terminou!")
Else
MsgAlert(Frmula no cadastrada!)
EndIf
Return

* 1.25

58

Arquitetura Protheus
Bloco de Cdigo

bBloco := {|| 2 * 10}


nResult := EVal(bBloco)

nResult = 20

bBloco := {|x| x * 2}
nResult := EVal(bBloco, 5)

nResult = 10

bBloco := {|x,y| x * y}
nResult := EVal(bBloco, 5, 2)

nResult = 10

59

Arquitetura Protheus
Bloco de Cdigo

aNomes := {Joao, Alberto, Pedro, Maria}

AEval(aNomes, {|x| MsgAlert(x)})

DBEval()

60

Arquitetura Protheus
Bloco de Cdigo

aMatriz := { {Joao

,15} , {Pedro
{Alberto,20}
,10}, {Maria
,10} ,{Pedro
{Alberto,20}

,30} }

ASort(aMatriz,,,{|aX,aY| aX[2] < aY[2]})

.F.
.T.

61

Arquitetura Protheus
Bloco de Cdigo

{Joao
aMatriz := { {Pedro

,15} , {Joao
{Pedro
,10}

,10} ,{Alberto,20}, {Maria


,15}

,30} }

ASort(aMatriz,,,{|aX,aY| aX[2] < aY[2]})

.T.
.F.

62

Arquitetura Protheus
Bloco de Cdigo

aMatriz := { {Pedro

,10} , {Joao

,15} ,{Alberto,20}, {Maria

,30} }

ASort(aMatriz,,,{|aX,aY| aX[2] < aY[2]})

.T.

63

Arquitetura Protheus
Semforo

Semforo
Obtem o prximo nmero
Confirma o nmero
Reutiliza o nmero
Confirma se o nmero est mesmo disponvel
Manuteno do SXE/SXF ou Hardlock

GetSXENum(Alias, Campo)
ConfirmSX8()
RollBackSX8()
MayIUseCode(Alias)
APCFG110

Exemplo:
GetSXENum
ConfirmSX8

GetSXENum
ConfirmSX8

001
003

002
004

GetSXENum
RollBackSX8

003
006

GetSXENum
RollBackSX8

GetSXENum
ConfirmSX8

004
007

005
008

Exemplos: GetSXENum(SC5, C5_NUM)


GetSXENum(SZ2, Z2_NUMERO)
64

Criao de um Ambiente

Arquitetura Protheus
Pastas

Repositrio D-1: Repositrio com as ultimas verses dos fontes aprovados pelo SQA
\\ 172.16.103.229\d-1
Pasta Temp: Pasta com o ltimo dicionrio gerado pelo ATUSX. Somente sero
gerados campos aprovados pelo DBA e pelo lder do desenvolvimento
\\SSIMSLV-03\temp
Espelho do Portal: Pasta de rede com os arquivos que esto no portal do cliente
\\ 172.16.103.229\espelho-portal

66

Arquitetura Protheus
Montagem de Ambiente - Prtica

67

Ttulo da Apresentao

Questes
Palestrante
Departamento
e-mail@totvs.com.br

68