Vous êtes sur la page 1sur 89

AdvPL

Prtica

IDE
Integrated Development Environment

IDE
Slide 3

IDE
IDE

Integrated
Integrated
Development
Development
Environment
Environment

Repositri
o
de
Objetos

Program
a Fonte

Projeto

IDE
Slide 4

Configurao de Ambiente Podemos configurar


o ambiente que ser atualizado na compilacao e depurao
de programas;
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
[TCP]
TYPE=TCPIP
Port=1234

ERP811
APO
BIN
REMOTE
SERVER
INCLUDE
MP_DATA
DATA
SAMPLES
SPOOL
SYSTEM

SYSTEMLOAD
MY PROJECTS

IDE
Slide 5

Criao do Projetos Criamos projetos


como forma de organizar os programas
criados de modo que qualquer outro
analista possa entender o roteiro das
customizaes;

IDE
Slide 6

Criao do programa Atravs de


edio podemos criar programas;

IDE
Slide 7

Compilao Compilamos os programas


ou todo o projeto para enviarmos ao
repositrio o que foi mudado e para que o
protheus saiba o que queremos que faa;

IDE
Slide 8

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.

IDE
Slide 9

Depurao Execuo passo a passo das


rotinas, permitindo que o analista veja o
andamento do programa e o contedo das
variveis, bem como as tabelas abertas;

IDE
Slide 10

Utilizando o IDE.

IDE
Slide 11

Criando o primeiro relatrio


Assistente do cdigo

Cadastro de produtos (ordem 1)


Campos:
Codigo (B1_COD)
Descricao (B1_DESC)
Tipo (B1_TIPO)

Inserir no menu ERP pelo configurador


Rodar o relatorio

IDE
Slide 12

Exercicio em sala (20 min.)


Criando o segundo relatrio

Cadastro de produtos (ordem 2)


Campos:
Codigo (B1_
COD)
Descricao (B1_DESC)
Tipo (B1_TIPO)
Quebra por Tipo
A cada mudana de tipo totalizar com a qtde
Ao final colocar um totalizador geral

Inserir no menu ERP pelo configurador


Rodar o relatorio

IDE
Modelo do relatorio
ATIVOS
TOTAL DE GG

ATIVOS DIVERSOS

LUVA
MANUTENCAO
TERCEIROS
TOTAL DE MC

LUVA PARA PROTECAO DAS MAOS


ITEM PARA CONTROLE DE MANUTENC
ITEM PARA CONTROLE DE MANUTENC

MOD0001
MOD0002
TOTAL DE MO

MAO DE OBRA FABRICACAO


MAO DE OBRA DO ACABAMENTO

ARGOLA
ESCUDO
MOSQUETAO
REBITE
SUPORTE
TIRANTE
TOTAL DE MP

ARGOLA PARA PRENDER CHAVES


ESCUDO COM LOGOTIPO SIGA
PRENDEDOR DO CHAVEIRO
REBITE DE FERRO
SUPORTE DE COURO
TIRANTE DE COURO

CHAVEIRO
TOTAL DE PA

CHAVEIRO DE BRINDE MICROSIGA

CORPO
TOTAL DE PI

CORPO DE COURO

TOTAL GERAL:

Slide 13
GG
1
MC
MC
MC
3
MO
MO
2
MP
MP
MP
MP
MP
MP
6
PA
1
PI
1
14

Customizao
Slide 14

Parmetros,
Tabelas,
Perguntas,
Frmulas - Expresses em AdvPL / User Function,
Lantos Padres / Expresses AdvPL/User Function,
Validaes,
Gatilhos,
Campos de Arquivos,
User Function via menu,
Pontos de Entrada,
Dicionrio de Dados Ativo,
SigaRPM,
Crystal,
Integrao Office (Word , Excel)

Dicionrios Sxs
Slide 15

Arquivo

Descrio

SX1

Perguntas e Respostas

SX2

Mapeamento de Tabelas

SX3

Dicionrio de Dados

SX4

Agenda do Schedule de Processos

SX5

Tabelas

SX6

Parmetros

SX7

Gatilhos

SX9

Relacionamento entre Tabelas

SXA

Pastas Cadastrais apontadas no SX3

SXB

Consulta por meio da tecla F3 (Consulta Padro)

SXD

Controle do Schedule de Processos

SXE

Seqncia de Documentos (+1)

SXF

Seqncia de Documentos (prximo)

SXG

Tamanho padro para campos

SXK

Respostas das Perguntas (SX1) por Usurio

SXO

Controle de LOGs por Tabela

Customizao

Pag. 41

Slide 16

Parmetros
GETMV - Retorna o contedo de um parmetro cadastrado no SX6.
Sintaxe
GETMV( cNomPar, [ lRetPar ], [ uRet ] )
PUTMV Grava informao no parmetro no SX6.
Sintaxe
PUTMV( cNomPar, cConteudo )

Customizao

Pag. 41

Slide 17

Criar Parmetro pelo Configurador


Parametro: AD_DATAFIN
Descricao: Data Inicio de operacoes
Contedo: 01/01/2007
Rodar em frmulas:
Msginfo(GETMV(AD_DATAFIN))
putmv(AD_DATAFIN,ctod(01/05/2007))
Msginfo(GETMV(AD_DATAFIN))

Customizao

Pag. 43

Slide 18

Tabelas
TABELA - Retorna o contedo de uma tabela cadastrada no SX5.
Sintaxe
TABELA( cCodTab, cChave, [lHelp] )

Customizao

Pag. 43

Slide 19

Criar tabela pelo Configurador


Tabela: Z1
Descricao: Dias da semana
Chave: 1 Domingo
Chave: 2 Segunda
Chave: 3 Tera
Chave: 4 Quarta
Chave: 5 Quinta
Chave: 6 Sexta
Chave: 7 - Sbado
Rodar em frmulas:
Msginfo(TABELA( Z1,2 ) )
msginfo(TABELA("Z1",cValToChar(DOW(dDATABASE))))

Customizao

Pag. 44

Slide 20

Perguntas
PERGUNTE Carrega e Monta a tela de perguntas cadastradas
no SX1.
Sintaxe
PERGUNTE( cGrupo, lMostra )

Customizao

Pag. 44

Slide 21

Criar pergunta pelo Configurador


Pergunta: RELA03
1. Produto Inicial com consulta em SB1
2. Produto fINAL com consulta em SB1
Exerccio em sala: (15 min)
Utilizar como base o Rdmake RELA02
Criar o RELA03
Colocar pergunta criada no relatorio
Tratar o filtro que o usurio selecionou.

Customizao

Pag. 45

Slide 22

Gatilho
Criar um gatilho no configurador
Clientes
Ao digitar o CEP deve preencher o estado com SP
Testar no cadastro de clientes, se no tiver o cadastro de clientes
No menu, incluir a funcao MATA030

Tabelas
Slide 23

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

M.E.R. Modelo de Entidades e Relacionamento

Algumas tabelas
Slide 24

Prefixo

Descrio

SA1

Cadastro de Clientes

SA2

Cadastro de Fornecedores

SA3

Cadastro de Vendedores

SB1

Cadastro de Produtos

SB2

Saldos dos Produtos por Almoxarifado

SC1

Solicitaes de Compras

SC5

Cabealho 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 Sada

SD3

Movimentaes Internas de Produtos

SE1

Ttulos a Receber

SE2

Ttulos a Pagar

SF1

Cabealho das Notas Fiscais de Entrada

Nomenclatura
Slide 25

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

Para cada Empresa criado um jogo de arquivos:


SXXnn0 onde: XX = Prefixo do arquivo
nn = Empresa
Exemplo: Empresa 99 -> SA1990, SA2990, SB1990...

Conceito Filiais
Slide 26

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:

Nomenclatura dos campos:


Arquivo:

SA1
A1_FILIAL
A1_COD
A1_NOME
A1_END

SA2
A2_FILIAL
A2_COD
A2_NOME
A2_END

01
01
01
02
02
02

SB1
B1_FILIAL
B1_COD
B1_DESC
B1_TIPO

QA1
QA1_FILIAL
QA1_COD
QA1_DESC

Conceito Filiais - Acesso


Slide 27

Compartilhado

registros compartilhados entre as filiais


Campo Filial: em branco

Exclusivo

o registro exclusivo da filial


Campo Filial: cdigo da Filial (varivel cFilAnt)

Ex: SA1 - Compartilhado


A1_FILIAL

A1_COD

A1_NOME

000015
000016
000001
000020
000007

FABRICA DE TINTAS E VERINIZES LTDA /SP


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

xFilial(SA1)

Ex: SC5 - Exclusivo


C5_FILIAL

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

Indices
Slide 28

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
SA1 ndices do Sistema
1
renumerados.

2
...
7
ndice do Usurio 8

A1_TIPO

Nos programas: dbSetOrder(8)


Portanto, ndices de usurio devem sempre ter um NickName. Deve-se
usar a funo dbOrderNickName(NICKNAME)
ndices do sistema, nunca tero NickName. Usa-se dbSetOrder().

Pontos de Entrada
Slide 29

So aberturas nas rotinas padres do sistema


que deixa o sistema flexvel permitindo o
desenvolvimento de processos especficos a
partir de uma rotina padro do sistema.
Permite maior abrangncia nos diversos
segmentos, atendendo as necessidades do
cliente e dos analistas de campo.

Correo de Exercicio de casa Pag. 32


Exerccio 4

Inicio
Declarar varivel M, I
Receber Valor da mercadoria em M
Perguntar se M > 10000
Se sim, Calcular I := M * 0.15
Se no, Calcular I := 0
Imprimir M
Imprimir I
Fim

Slide 30

Correo de Exercicio de casa Pag. 32


Exerccio 5

Inicio
Declarar varivel nValSal, nQtdHor, nSalRec
Declarar varivel nMeta := 180
Receber Valor do Salrio em nValSal
Receber Qtde de Horas em nQtdHor
Perguntar se nQtdHor > nMeta
Se sim, Calcular nSalrec := (nValSal+2) * nQtdHor
Se no, Calcular nSalRec := nValSal * nQtdHor

Mostrar nSalRec
Fim

Slide 31

Correo de Exercicio de casa Pag. 32


Exerccio 6
Slide 32
#include "RWmake.ch"
user function quadrado(aArray)
n1 := aArray[1]^2 // calcula potncia de n1
n2 := aArray[2]^2 // calcula potncia de n2
n3 := aArray[3]^2 // calcula potncia de n3
n4 := aArray[4]^2 // calcula potncia de n4
n1 := str(n1)
// converte para string para imprimir no box
n1 += " " + str(n2) // somar em apenas 1 varivel
n1 += " " + str(n4)
if n3 >= 1000
msgbox("O Valor do quadrado de n3 :" + chr(13) + chr(10) + str(n3),;
"Questo 6", "Info")
else
msgbox("O Valor do quadro de n1, n2 e n4 so :" + ;
chr(13) + chr(10) + n1,"Questo 6", "Info")
endif
return

Correo de Exercicio de casa Pag. 32


Slide 33

Exerccio 7
idade := 14
do case
case idade >= 5 .And. idade <= 7
msginfo("Infantil - Classe A")
case idade >= 8 .And. idade <= 11
msginfo("Infantil - Classe B")
case idade = 12 .or. idade = 13
msginfo("Juvenil - Classe B")
case idade >= 14 .And. idade <= 17
msginfo("Juvenil - Classe B")
case idade < 5
msginfo("Infantil - Criana s entra acompanhado)
otherwise
msginfo("Adulto")
endcase

Criando tabelas de usurio


Slide 34

Criar um arquivo pelo configurador


SZ5 Cadastro de Alunos
Z5_FILIAL C 2
Z5_CODIGO C 4 (usar inicializador padrao GETSXENUM)
Z5_NOME C 30
Z5_ENDERECO C 30
Z5_APELIDO C 20
Z5_TELEFONE C 15
Z5_DATANASC D 8
Indice 1 filial + Codigo
Indice 2 Filial + nome
Criar um AXcadastro() para essa tabela

Manipulao de Textos

pag.56

Slide 35

VAL - Converte texto em valor.


Sintaxe:
VAL( cValor )
Argumento Obrigat.

Tipo

Descrio

cValor

Contedo que se quer


converter.

Sim

Exemplo:
cCodigo := 000015
nNum := Val(cCodigo)+1
msginfo(nNum) // nNum ter o valor de 16

Manipulao de Textos

pag.56

Slide 36

SUBSTR - Retorna um pedao de um texto.


Sintaxe
SUBSTR( cConteudo, nValIni, nCount )
Argumento Obrigat. Tipo Descrio
cConteudo

Sim

Contedo que se quer extrair


uma parte

nValIni

Sim

Posio Inicial para extrao

nCount

Sim

Qtde de caracteres a extrair a


partir da Posio Inicial

Exemplo:
cCodigo
cPedaco1
cPedaco2
cPedaco3

:= Paralelepipedo
:= Substr(cCodigo,5,4) // cPedaco1 ter o contedo lele
:= Substr(cCodigo,1,6) // cPedaco2 ter o contedo parale
:= Substr(cCodigo,9,5) // cPedaco3 ter o contedo piped

Manipulao de Textos

pag.56

Slide 37

LEFT Retorna o contedo de uma qtde de caracteres a


esquerda
Sintaxe
LEFT( cConteudo, nCount )
Argumento

Obrigat. Tipo Descrio

cConteudo

Sim

Contedo que se quer extrair uma


parte

nCount

Sim

Qtde de caracteres a extrair

Exemplo:
cCodigo := Paralelepipedo
cPedaco1 := Left(cCodigo,5) // cPedaco1 ter o contedo paral

Manipulao de Textos

pag.57

Slide 38

RIGHT Retorna o contedo de uma qtde de caracteres a


direita
Sintaxe
RIGHT( cConteudo, nCount )
Argumento

Obrigat. Tipo Descrio

cConteudo

Sim

Contedo que se quer extrair uma


parte

nCount

Sim

Qtde de caracteres a extrair

Exemplo:
cCodigo := Paralelepipedo
cPedaco1 := Right(cCodigo,5) // cPedaco1 ter o contedo ipedo

Manipulao de Textos

pag.57

Slide 39

PADC Centraliza um texto conforme a qtde de caracteres


especificados.
Sintaxe
PADC( cConteudo, nCount )
Argumento

Obrigat. Tipo Descrio

cConteudo

Sim

Contedo que se quer centralizar

nCount

Sim

Qtde de caracteres a centralizar

Exemplo:
cCodigo := Parede
cCodigo := Padc(cCodigo,14)
// cCodigo ter o contedo Parede

Manipulao de Textos

pag.57

Slide 40

PADR Preenche com espaos em branco a direita


conforme a qtde de caracteres especificados.
Sintaxe
PADR( cConteudo, nCount )
Argumento

Obrigat. Tipo Descrio

cConteudo

Sim

Contedo que se quer alinhar

nCount

Sim

Qtde de caracteres a alinhar

Exemplo:
cCodigo := Parede
cCodigo := Padr(cCodigo,14)
// cCodigo ter o contedo

Parede

Manipulao de Textos

pag.58

Slide 41

ALLTRIM Limpa espaos em branco iniciais e finais


Sintaxe
Alltrim( cConteudo )
Argumento Obrigat.

Tipo Descrio

cConteudo

Sim

Contedo que se quer limpar

Exemplo:
cCodigo := Parede
cCodigo := Alltrim(cCodigo) // cCodigo ter o contedo Parede

Manipulao de Textos

pag.58

Slide 42

LTRIM Limpa espaos em branco a esquerda


Sintaxe
Ltrim( cConteudo )
Argumento Obrigat.

Tipo Descrio

cConteudo

Sim

Contedo que se quer limpar

Exemplo:
cCodigo := Parede
cCodigo := Ltrim(cCodigo) // cCodigo ter o contedo Parede

Manipulao de Textos

pag.58

Slide 43

RTRIM Limpa espaos em branco a direita


Sintaxe
Rtrim( cConteudo )
Argumento Obrigat.

Tipo Descrio

cConteudo

Sim

Contedo que se quer limpar

Exemplo:
cCodigo := Parede
cCodigo := Ltrim(cCodigo) // cCodigo ter o contedo

Parede

Manipulao de Numeros

pag.61

Slide 44

STR Converte numero em caracter


Sintaxe
Str( nConteudo )
Argumento

Obrigat. Tipo Descrio

nConteudo

Sim

Valor a converter

Exemplo:
nCodigo := 1
cCodigo := Str(nCodigo) // cCodigo ter o contedo

Manipulao de Numeros

pag.61

Slide 45

STRZERO Converte numero em caracter, preenchendo com


zeros a esquerda.
Sintaxe
Strzero( nConteudo, nCount )
Argumento

Obrigat. Tipo Descrio

nConteudo

Sim

Valor a converter

nCount

Sim

Qtde de caracteres

Exemplo:
nCodigo := 1
cCodigo := Strzero(nCodigo, 6) // cCodigo ter o contedo 000001
nCodigo := 158
cCodigo := Strzero(nCodigo, 6) // cCodigo ter o contedo 000158

Manipulao de Numeros

pag.61

Slide 46

TRANSFORM Converte numero em caracter utilizando


mscara.
Sintaxe
Transform( nConteudo, cMask )
Argumento

Obrigat. Tipo Descrio

nConteudo

Sim

Valor a converte

CMask

Sim

Formato do caracter

Exemplo:
nCodigo := 1500
cCodigo := Valor: + Transform(nCodigo, @E 99,999.99)
// cCodigo ter o contedo (Valor: 1.500,00)

Manipulao de Datas

pag.59

Slide 47

DATE Retorna a data do sistema operacional


Sintaxe
DATE()
Exemplo:
dDataAtual := date()
// dDataAtual ter o contedo da data de hoje

Manipulao de Datas

pag.59

Slide 48

DTOS Converte data em String no formato AAAAMMDD


Sintaxe
DTOS( dData )

Argumento Obrigat. Tipo

Descrio

dData

Data a converter

Sim

Exemplo:
cData := dtos(date()) // cData ter o contedo 20061231

Manipulao de Datas

pag.59

Slide 49

DTOC Converte data em Caracter no formato DD/MM/AA.


Sintaxe
DTOC( dData )

Argumento Obrigat. Tipo

Descrio

dData

Data a converter

Sim

Exemplo:
cData := dtoc(date()) // cData ter o contedo 31/12/06

Manipulao de Datas

pag.59

Slide 50

CTOD Converte Caracter no formato DD/MM/AA em Data.


Sintaxe
CTOD( cData )
Argumento Obrigat. Tipo

Descrio

cData

Data a converter

Sim

Exemplo:
cData := 31/12/06
cData := ctod(cData) // cData ter o contedo 31/12/06

Manipulao de Datas

pag.59

Slide 51

STOD Converte string no formato AAAAMMDD em Data.


Sintaxe
STOD(cData )
Argumento Obrigat. Tipo

Descrio

cData

Data a converter

Sim

Exemplo:
cData := 20061231
cData := stod(cData) // cData ter o contedo 31/12/06

Manipulao de Datas

pag.60

Slide 52

MONTH Retorna o Mes


Sintaxe
Month( dData )
Argumento Obrigat. Tipo Descrio
dData

Sim

Data

Exemplo:
nMes := Month(date())
// nMes ter o contedo 12 para a data 31/12/06

Manipulao de Datas

pag.60

Slide 53

DAY Retorna o dia


Sintaxe
Day( dData )
Argumento Obrigat. Tipo Descrio
dData

Sim

Data

Exemplo:
nDia := Day(date())
// nDay ter o contedo 31 para a data 31/12/06

Manipulao de Datas

pag.60

Slide 54

YEAR Retorna o ano


Sintaxe
Year( dData )
Argumento Obrigat. Tipo Descrio
dData

Sim

Data

Exemplo:
nAno := Year(date())
// nAno ter o contedo 2006 para a data 31/12/06

Manipulao de Datas

pag.60

Slide 55

MESEXTENSO Retorna o Ms por extenso em portugus


Sintaxe
MesExtenso( dData )

Argumento Obrigat. Tipo

Descrio

dData

Data

Sim

Exemplo:
cMes := MesExtenso(date())
// cMes ter o contedo Dezembro para a data 31/12/06

Criao de Telas
Slide 56

Define MSDialog oDlg Title OemToAnsi("Titulo da janela") ;


From 0,0 To 160,380 Pixel
@05,10 To 50,180 Pixel

//Cria um box

@15,20 Say "Colocar aqui a mensagem que quiser" Pixel Of oDlg


@25,20 MSGet oVar Var nVar Picture "@E 99,999.99" Size 50,10 Pixel Of oDlg
@70,20 Button oBtnOk Prompt "&Ok" Size 30,15 Pixel ;
Action (msginfo("Cliquei no OK"), Close(oDlg)) Of oDlg
@70,80 Button oBtnCancel Prompt "&Cancelar" Size 30,15 Pixel ;
Action(msginfo("Cliquei no Cancelar"),oDlg:End()) Of oDlg
Activate MSDialog oDlg Centered

Exerccio em sala (30 Minutos)


Slide 57

Fazer os exerccios da pag 10 em ADVPL,


utilizando tudo o que j foi visto at agora.
- 1 e 2 - Utilize array pre-definido
- 3 e 4 - Utilize MSDialog para aceitar digitacao do usuario
- 5 Utilizando comandos de repetio e funes de array para
adicionar em dois vetores aDiv e anaodiv
- 10 Utilize MSDialog e arrays para digitacao do usuario:
- Produto e preo
- Boto para incluir produtos na lista
- Boto para mostrar Lista de produtos a comprar
- Boto para mostrar lista de produtos que no sero comprados

-11 - Utilize MSdialog e Arrays c/ dados do teste de mesa pag. 11.

Correo
Slide 58

Exer01.prw
Exer02.prw
Exer03.prw
Exer04.prw
Exer05.prw
Exer10.prw
Exer11Array.prw

Exerccio de Casa
Slide 59

11 - Crie um cadastro de funcionrios SZ6, com os campos


do teste de mesa pag. 11.
Crie um rdmake para cadastrar os funcionrios
Crie um rdmake para mostrar o salrio reajustado na
tela.

Manipulao de Mensagens
Slide 60

MSGBOX Mostra mensagem na tela.


Sintaxe:
MSGBOX(cMensagem,cTtulo,cTpCaixa)

Argumento

Obrigat. Tipo

Descrio

cMensagem Sim

Mensagem dentro da janela

cTitulo

No

Titulo da Janela

cTpCaixa

No

Tipo da Caixa

Tipos de caixas:
STOP, utiliza um bitmap para advertncia e tem um boto Ok. Retorna Nil.
INFO, utiliza um bitmap para advertncia e tem um boto Ok. Retorna Nil.
ALERT, utiliza um bitmap para advertncia e tem um boto Ok. Retorna Nil.
YESNO, utiliza um bitmap para advertncia e tem dois botes Sim e No, retorna .T. ou .F.
RETRYCANCEL, utiliza um bitmap para advertncia e tem dois botes Repetir e Cancelar,
retorna .T. ou .F.

Manipulao de Mensagens
Slide 61

Exemplo:
MSGBOX(Mensagem dentro da Janela ALERT, Titulo da Janela, ALERT)

Manipulao de Mensagens
Slide 62

Exemplo:
MSGBOX(Mensagem dentro da Janela INFO, Titulo da Janela, INFO)

Manipulao de Mensagens
Slide 63

Exemplo:
MSGBOX(Mensagem dentro da Janela STOP, Titulo da Janela, STOP)

Manipulao de Mensagens
Slide 64

Exemplo:
MSGBOX(Mensagem dentro da Janela YESNO,Titulo da Janela,YESNO)

Manipulao de Mensagens
Slide 65

Exemplo:
MSGBOX(Mensagem dentro da Janela RETRYCANCEL,;
Titulo da Janela, RETRYCANCEL)

Manipulao de Mensagens
Slide 66

Exemplo:
nOpc := AVISO("Titulo da Janela", "Corpo da Mensagem", ;
{"Sim", "Nao", "Talvez"},1, "Titulo da Mensagem")
If nOpc == 1
msginfo("voce escolheu sim", "Titulo")
ElseIf nOpc == 2
msginfo("voce escolheu nao", "Titulo")
Else
msginfo("voce escolheu talvez", "titulo")
Endif

Manipulao de Mensagens
Slide 67

Na funo Aviso(), o tamanho da mensagem definido pelo 4. Parametro.


Exemplos:
1

Manipulao de Mensagens
Slide 68

Outras funcoes de mensagem


Msginfo()
Alert()
Msalert()
Msgrun()
Msaguarde()

Comandos de Base de Dados


Slide 69

dbSelectArea()
dbSetOrder()
dbGotop()
dbGoBottom()
dbSeek()
dbskip()
dbFilter()
dbSetFilter()
dbClearFil()
Entre outros...

Comandos de Base de Dados


Slide 70

CRIATRAB - Cria arquivo de trabalho, com nome temporrio.


Sintaxe: CriaTrab( [aCampos], lCria )
Local aCampos := {{'T_COD' ,C,6, 0},;
{'T_NOME' ,C,30, 0},;
{'T_ENDERECO' ,C,30,0},;
{ 'T_DATA' ,D,8,0},;
{'T_NUMERO' ,N,17, 2}}
//Cria o arquivo fisicamente em DBF no RootPath
cArqTra := CriaTrab( aCampos, .T. )
dbUseArea(.t.,,cArqTra,"TMP",.f.,.f.)
cArqTemp := CriaTrab( Nil, .F. ) //Somente gera um nome temporario
SA1->(dbCloseArea())

Comandos de Base de Dados


Slide 71

INDREGUA - Cria ndice temporrio.


Sintaxe: INDREGUA( cAlias, cArqNtx, cIndCHAV,[cTipo],
[cFiltro], cMensagem, [lMostra] )
cArqTemp := CriaTrab( Nil, .F. ) //nome temporario
IndRegua( "SB1", cArqTemp, B1_FILIAL+B1_GRUPO, ,;
B1_COD> D, Selec.registros...", .T.)
//Deleta ndice criado no final do programa
RETINDEX(SB1)
DbSelectArea( SB1 ) //Selecionando a area
DbSetOrder( 1 ) //Posicionando na ordem de origem
fErase( cArqtemp + OrdBagExt() )//Deleta arquivo de trabalho

Comandos de Base de Dados


Slide 72

sempre bom utilizar o Alias antes de


comando de Base de Dados.
SB1->(DBGOTOP()) Posiciona no primeiro registro do arquivo
SB1 de acordo com a ordem que esta selecionada no momento.
SB1->(DBGOBOTTON()) Posiciona no ultimo registro do arquivo
SB1 de acordo com a ordem que esta selecionada no momento.
SB1->(DBSEEK(XFILIAL() + 000100)) - Busca em SB1 o registro
que obedea a chave estipulada de acordo com a ordem
selecionada no momento.

Comandos de Base de Dados


Slide 73

Ao executar um DBSEEK(), verificar se localizou o registro.


Exemplo:
If ! SB1->(dbSeek(xFilial("SB1")))
// No achei o registro
Endif

Comandos de Base de Dados


Slide 74

Quanto ao comando DO WHILE no esquecer de


incluir a condio referente filial, quando esta
leitura for de registros de uma filial).
Exemplo :
dbSelectArea("SB1")
SB1->(dbSeek(xFilial("SB1")))
Do While SB1->(! Eof() .And. B1_FILIAL == xFilial("SB1"))
// Processamento
SB1->(dbSkip())
Enddo

Comandos de Base de Dados


Slide 75

Ao criar uma funo que ir desposicionar registros, use a funo


GETAREA() e RESTAREA(), para voltar tudo posio original.

Exemplo:
Dbselectarea("SD1")
aAreasd1 := Getarea() // Armazena o ambiente do arquivo SD1
SD1->(dbsetorder(3))
SD1->(dbseek(xfilial("SD1") + DTOS("01/03/01"), .T.))
Do While ! Eof() .And. D1_FILIAL == xfilial("SD1") .And. D1_EMISSAO <= mv_par02
// Processamento
Dbskip()
Enddo
Restarea(aAreasd1) // Restaura o ambiente do arquivo SD1

Comandos de Base de Dados


Slide 76

Funo Posicione
Sintaxe:
Posicione(cAlias, nOrdem, cChave, cCampo)
Exemplo:
Posicione("SB1", 1, xFilial("SB1") + cCodigo, "B1_DESC")

Comandos de Base de Dados


Slide 77

Funo Existcpo
Retorna se determinada chave existe ou no no arquivo.
Se existir retorna .T.
Se no existir retorna .F.
Sintaxe :
ExistCpo(cAlias,cChave,nOrdem)
Exemplo :
ExistCpo("SB1", cCodigo, 1)

Comandos de Base de Dados


Slide 78

Funo Existchav
Retorna se determinada chave existe ou no no arquivo.
Se existir retorna .F.
Se no existir retorna .T.
Sintaxe :
ExistChav(cAlias,cChave,nOrdem)
Exemplo :
ExistChav("SB1", cCodigo, 1)

Telas padres
Slide 79

mBrowse()
Modelo2()
Modelo3()

Modelo 3
Slide 80

aRotina
aHeader
aCols

Modelo 3
Slide 81

Sintaxe
Modelo3(cCadastro, cAlias1, cAlias2, aCpoEnchoice, cLinOK, ;
cTudoOK, nOpcE, nOpcG, cFieldOK, lVirtual, ;
nLinhas, aAltEnchoice, nFreeze)
cCadastro Titulo da Janela
cAlias1 alias da enchoice
cAlias2 Alias da getdados
aCpoEnchoice Campos da enchoice
cLinOk - Validacao da linha na Getdados
cTudook Validacao no Ok
nOpcE - Opcao da Enchoice
nOpcG Opcao da Getdados
cFieldOk Validacao dos campos da enchoice
lVirtual Aceita campos Virtuais
nLinhas Qtde de Linhas da Acols
aAltEnchoice - Campos que podem ser alterados na enchoice
nFreeze Campos que devem ser congelados

Banco de Dados
Slide 82

Diferenas DBF e SQL


Comandos interpretados
Velocidade
Integridade

Banco de Dados
Slide 83

TCCONTYPE - Define o tipo de conexo que ser utilizada entre o


Protheus e o TopConnect.
Sintaxe
TCCONTYPE ( cTipo )

Argumento

Obrigat.

Tipo

Descrio

cTipo

Sim

Tipo da conexo. Pode ser:


"TCPIP" ou "NPIPE"

Exemplo
TCConType("NPIPE")
TCConType("TCPIP")

Banco de Dados
Slide 84

TCDELFILE - Apaga um arquivo de um banco de dados.


Sintaxe
TCDELFILE ( cTabela )
Argumento Obrigat. Tipo

Descrio

cTabela

Nome da tabela que deve ser


apagada.

Sim

Exemplo:
If TcDelFile("SA1020")
MSGINFO(Tabela excluda com sucesso)
Else
MSGINFO(No foi possvel excluir a tabela)
Endif

Banco de Dados
Slide 85

TCGENQRY - Define a execuo de uma Query, a prxima chamada


DBUseArea ser a abertura de uma Query e no de tabela.
Sintaxe:
TCGENQRY ([ xPar1, xPar2, ], cQuery)
Argumento

Obrigat Tipo

Descrio

xPar1, xPar2 No

Qualquer

Parmetros apenas para


compatibilizao. No tem funo.

cQuery

Expresso
executar.

Sim

da

query

Exemplo:
cQuery := 'SELECT X2_CHAVE, R_E_C_N_O_ from SX2990'
dbUseArea(.T., 'TOPCONN', TCGenQry(,,cQuery), 'TRB', .F., .T.)
cArqTrab := criatrab(Nil, .f.)
Copy to &cArqTrab via TOPCONN
TRB->(dbCloseArea())

que

deseja

Banco de Dados
Slide 86

TCREFRESH - Faz refresh em uma tabela, atravs de uma leitura


forada da tabela no banco de dados. Utilizada aps o DELETE e o
INSERT.
Sintaxe:
TCREFRESH ( cTabela )
Argumento

Obrigat Tipo

Descrio

cTabela

Sim

Indica nome da tabela que deve ser


feito refresh.

Lgico

Exemplo:
cTabela:= "SA1990"
cComando := "Delete "+ cTabela +" Where R_E_C_N_O_ > 50000 "
TCSqlExec(cComando)
TCRefresh(cTabela)

Banco de Dados
Slide 87

TCSPEXEC - Executa uma Stored Procedure, no banco de dados, com


nmero varivel de parmetros. Retorna um array contendo os valores
de retorno da SP
Sintaxe:
TCSPEXEC ( cSProc [, xParam1,...,xParamN])--> [array]
Argumento Obrigat.

Tipo

Descrio

cSProc

Sim

Nome da Stored Procedure.

xParamX

No

Qualquer

Parmetro(s) da Stored Procedure

Create Procedure teste1( @IN_VALUE int, @OUT_STR char(255), @OUT_VALUE int)


WITH RECOMPILE
As
Begin
Select @OUT_STR = "Teste", @OUT_VALUE = @IN_VALUE + 3
End
GO

aResult := TCSPEXEC(xProcedures ('teste1'), 100 )

Banco de Dados
Slide 88

TCSQLEXEC - Executa um comando em SQL


TCSQLEXEC ( cComando])
Argumento Obrigat.

Tipo

Descrio

cComando

Codigo em SQL

Sim

TCSQLEXEC("DELETE " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = '*'")

Banco de Dados
Slide 89

TCSPEXIST - Verifica se uma Stored Procedure existe.


Sintaxe
TCSPEXIST ( cStoredProc )

Argumento
cStoredProc

Obrigat. Tipo

Descrio

Sim

Nome da Stored Procedure.

Exemplo
if TCSPExist("SP000001")
cStr := "DROP PROCEDURE "+ "SP000001 "
TCSqlExec(cStr)
endif

Vous aimerez peut-être aussi