Sei sulla pagina 1di 89

AdvPL

Prática
IDE
Integrated Development Environment
IDE
Slide 3

IDE
Integrated
Development
Environment

Repositório
de
Objetos

Programa
Projeto
Fonte
IDE
Slide 4

• Configuração de Ambiente – Podemos configurar


o ambiente que será atualizado na compilacao e depuração
de programas;
MP8SRV.INI
ERP811
[Environment]
APO
SourcePath=C:\ERP811\APO
RootPath=C:\ERP811\MP_Data BIN
StartPath=\system\ REMOTE
RpoDb=dbf
SERVER
RpoLanguage=portuguese
SIGACFG RpoVersion=811
INCLUDE
LocalFiles=ads MP_DATA
localdbextension=.dbf DATA
TCP PictFormat=DEFAULT
DateFormat=DEFAULT
SAMPLES
SPOOL
Environment [Drivers] SYSTEM
Active=TCP
SYSTEMLOAD
[TCP] MY PROJECTS
TYPE=TCPIP
Port=1234
IDE
Slide 5

• Criação do Projetos – Criamos projetos


como forma de organizar os programas
criados de modo que qualquer outro
analista possa entender o roteiro das
customizações;
IDE
Slide 6

• Criação do programa – Através de


edição podemos criar programas;
IDE
Slide 7

• Compilação – Compilamos os programas


ou todo o projeto para enviarmos ao
repositório o que foi mudado e para que o
protheus saiba o que queremos que faça;
IDE
Slide 8

REMOTE
Programa SERVER
Fonte
MATA010

APO
MATA010
Cad.Produtos

RPO Executa
MATA010
MATA010
Executa
MATA410 MATA410
Ped.Vendas
CTBR040
Executa
CTBR040

Balancete Cont.
IDE
Slide 9

• Depuração – Execução passo a passo das


rotinas, permitindo que o analista veja o
andamento do programa e o conteúdo das
variáveis, bem como as tabelas abertas;
IDE
Slide 10

• Utilizando o IDE.
IDE
Slide 11

• Criando o primeiro relatório


– Assistente do código
• 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 relatório
• Cadastro de produtos (ordem 2)
– Campos:
» Codigo (B1_ COD)
» Descricao (B1_DESC)
» Tipo (B1_TIPO)
– Quebra por Tipo
» A cada mudança 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 Slide 13
ATIVOS ATIVOS DIVERSOS GG
TOTAL DE GG 1

LUVA LUVA PARA PROTECAO DAS MAOS MC


MANUTENCAO ITEM PARA CONTROLE DE MANUTENC MC
TERCEIROS ITEM PARA CONTROLE DE MANUTENC MC
TOTAL DE MC 3

MOD0001 MAO DE OBRA FABRICACAO MO


MOD0002 MAO DE OBRA DO ACABAMENTO MO
TOTAL DE MO 2

ARGOLA ARGOLA PARA PRENDER CHAVES MP


ESCUDO ESCUDO COM LOGOTIPO SIGA MP
MOSQUETAO PRENDEDOR DO CHAVEIRO MP
REBITE REBITE DE FERRO MP
SUPORTE SUPORTE DE COURO MP
TIRANTE TIRANTE DE COURO MP
TOTAL DE MP 6

CHAVEIRO CHAVEIRO DE BRINDE MICROSIGA PA


TOTAL DE PA 1

CORPO CORPO DE COURO PI


TOTAL DE PI 1

TOTAL GERAL: 14
Customização
Slide 14

• Parâmetros,
• Tabelas,
• Perguntas,
• Fórmulas - Expressões em AdvPL / User Function,
• Lançtos Padrões / Expressões AdvPL/User Function,
• Validações,
• Gatilhos,
• Campos de Arquivos,
• User Function via menu,
• Pontos de Entrada,
• Dicionário de Dados Ativo,
• SigaRPM,
• Crystal,
• Integração Office (Word , Excel)
Dicionários – Sx´s
Slide 15

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
SXO Controle de LOGs por Tabela
SIX Índices dos Arquivos
.XNU Menu de Opções dos Módulos
Customização Pag. 41

Slide 16

• Parâmetros
GETMV - Retorna o conteúdo de um parâmetro cadastrado no SX6.
Sintaxe
GETMV( cNomPar, [ lRetPar ], [ uRet ] )

PUTMV – Grava informação no parâmetro no SX6.


Sintaxe
PUTMV( cNomPar, cConteudo )
Customização Pag. 41

Slide 17

• Criar Parâmetro pelo Configurador


Parametro: AD_DATAFIN
Descricao: Data Inicio de operacoes
Conteúdo: 01/01/2007

Rodar em fórmulas:
Msginfo(GETMV(“AD_DATAFIN”))
putmv(“AD_DATAFIN”,ctod(“01/05/2007”))
Msginfo(GETMV(“AD_DATAFIN”))
Customização Pag. 43

Slide 18

• Tabelas
TABELA - Retorna o conteúdo de uma tabela cadastrada no SX5.
Sintaxe
TABELA( cCodTab, cChave, [lHelp] )
Customização Pag. 43

Slide 19

• Criar tabela pelo Configurador


Tabela: Z1
Descricao: Dias da semana
Chave: 1 – Domingo
Chave: 2 – Segunda
Chave: 3 – Terça
Chave: 4 – Quarta
Chave: 5 – Quinta
Chave: 6 – Sexta
Chave: 7 - Sábado

Rodar em fórmulas:
Msginfo(TABELA( “Z1”,”2” ) )
msginfo(TABELA("Z1",cValToChar(DOW(dDATABASE))))
Customização Pag. 44

Slide 20

• Perguntas
PERGUNTE – Carrega e Monta a tela de perguntas cadastradas
no SX1.
Sintaxe
PERGUNTE( cGrupo, lMostra )
Customização Pag. 44

Slide 21

• Criar pergunta pelo Configurador


Pergunta: RELA03
1º. Produto Inicial com consulta em SB1
2º. Produto fINAL com consulta em SB1

Exercício em sala: (15 min)


Utilizar como base o Rdmake RELA02
Criar o RELA03
Colocar pergunta criada no relatorio
Tratar o filtro que o usuário selecionou.
Customização 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 não tiver o cadastro de clientes


No menu, incluir a funcao MATA030
Tabelas
Slide 23

SA - Cadastros SO - Assist. Técnica


SB - Estoques SP - Ponto Eletrônico
SC - Previsões de E/S SQ - Recr. e Seleção
SD - Mov. De Estoque SR - Folha de Pagto
SE - Financeiro ST - Manut. Industrial
SF - Fiscal SU - Telemarketing
SG - Estruturas SV - Concessionárias
SH - Carga de Máquina SW e SY- Export./Import.
SI - Contábil Q? - Qualidade (Celerina)
SJ - Estatísticas R? - Recursos Humanos
SM - Miscelâneas SZ,QZ,RZ - Livres
SN - Ativo Fixo P? - Projetos Especiais

M.E.R. Modelo de Entidades e Relacionamento


Algumas tabelas
Slide 24

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
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
SF2 Cabeçalho das Notas Fiscais de Saída
SI1 Plano de Contas
SI2 Lançamentos Contábeis
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:
01
01
01
02
02
02

Nomenclatura dos campos:

Arquivo: SA1 SA2 SB1 QA1


A1_FILIAL A2_FILIAL B1_FILIAL QA1_FILIAL
A1_COD A2_COD B1_COD QA1_COD
A1_NOME A2_NOME B1_DESC QA1_DESC
A1_END A2_END B1_TIPO
Conceito Filiais - Acesso
Slide 27

Compartilhado  registros compartilhados entre as filiais


Campo Filial: em branco
Exclusivo  o registro é exclusivo da filial
Campo Filial: código da Filial (variável cFilAnt)

Ex: SA1 - Compartilhado


A1_FILIAL A1_COD A1_NOME
000015 FABRICA DE TINTAS E VERINIZES LTDA /SP
000016
000001
TEX MALHAS E CONFECCOES S.A /SP
CLIENTE PADRAO xFilial(“SA1”)  “ “
000020 ARMANDO JOSE FLORES /SC
000007 COMERCIO SOM DO MUNDO /SP

Ex: SC5 - Exclusivo


C5_FILIAL C5_NUM C5_EMISSAO C5_CLIENTE C5_PROD C5_VALOR
01 000001 01/01/04 000002 11.11014 15.000,00
01 000005 01/01/04 000023 13.13000 5.600,00
01 000007 20/01/04 000016 15.15140 5.600,00
02
02
000001
000005
01/01/04
01/01/04
000002
000023
11.11014
13.13000
15.000,00
5.600,00
xFilial(“SC5”)  cFilAnt
02 000007 20/01/04 000016 15.15140 5.600,00
03 000001 01/01/04 000002 11.11014 15.000,00
03 000005 01/01/04 000023 13.13000 5.600,00
03 000007 20/01/04 000016 15.15140 5.600,00
Indices
Slide 28

• Um arquivo pode ter até 35 índices (1...9, A...Z)


• dbSetOrder(n), onde n = 1...35  função para selecionar o índice.
• Além dos índices originais, usuários podem incluir seus próprios índices.
• Caso a Microsiga inclua novos índices, os do usuário serão renumerados.

SA1 – índices do Sistema 1


2
...
7
índice do Usuário 8 A1_TIPO

Nos programas: dbSetOrder(8)

• 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().
Pontos de Entrada
Slide 29

• São aberturas nas rotinas padrões do sistema


que deixa o sistema flexível permitindo o
desenvolvimento de processos específicos a
partir de uma rotina padrão do sistema.

• Permite maior abrangência nos diversos


segmentos, atendendo as necessidades do
cliente e dos analistas de campo.
Correção de Exercicio de casa Pag. 32
Exercício 4 Slide 30

Inicio
Declarar variável M, I
Receber Valor da mercadoria em M
Perguntar se M > 10000
Se sim, Calcular I := M * 0.15
Se não, Calcular I := 0
Imprimir M
Imprimir I
Fim
Correção de Exercicio de casa Pag. 32
Exercício 5 Slide 31

Inicio
Declarar variável nValSal, nQtdHor, nSalRec
Declarar variável nMeta := 180
Receber Valor do Salário em nValSal
Receber Qtde de Horas em nQtdHor
Perguntar se nQtdHor > nMeta
Se sim, Calcular nSalrec := (nValSal+2) * nQtdHor
Se não, Calcular nSalRec := nValSal * nQtdHor
Mostrar nSalRec
Fim
Correção de Exercicio de casa Pag. 32
Exercício 6 Slide 32

#include "RWmake.ch"
user function quadrado(aArray)
n1 := aArray[1]^2 // calcula potência de n1
n2 := aArray[2]^2 // calcula potência de n2
n3 := aArray[3]^2 // calcula potência de n3
n4 := aArray[4]^2 // calcula potência de n4
n1 := str(n1) // converte para string para imprimir no box
n1 += " " + str(n2) // somar em apenas 1 variável
n1 += " " + str(n4)
if n3 >= 1000
msgbox("O Valor do quadrado de n3 :" + chr(13) + chr(10) + str(n3),;
"Questão 6", "Info")
else
msgbox("O Valor do quadro de n1, n2 e n4 são :" + ;
chr(13) + chr(10) + n1,"Questão 6", "Info")
endif
return
Correção de Exercicio de casa Pag. 32
Slide 33

Exercício 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 - Criança só entra acompanhado“)
otherwise
msginfo("Adulto")
endcase
Criando tabelas de usuário
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


Manipulação de Textos pag.56

Slide 35

VAL - Converte texto em valor.


Sintaxe:
VAL( cValor )
Argumento Obrigat. Tipo Descrição
Conteúdo que se quer
cValor Sim C
converter.

Exemplo:
cCodigo := “000015”
nNum := Val(cCodigo)+1
msginfo(nNum) // nNum terá o valor de 16
Manipulação de Textos pag.56

Slide 36

SUBSTR - Retorna um pedaço de um texto.


Sintaxe
SUBSTR( cConteudo, nValIni, nCount )
Argumento Obrigat. Tipo Descrição
Conteúdo que se quer extrair
cConteudo Sim C
uma parte
nValIni Sim N Posição Inicial para extração
Qtde de caracteres a extrair a
nCount Sim N
partir da Posição Inicial
Exemplo:
cCodigo := “Paralelepipedo”
cPedaco1 := Substr(cCodigo,5,4) // cPedaco1 terá o conteúdo “lele”
cPedaco2 := Substr(cCodigo,1,6) // cPedaco2 terá o conteúdo “parale”
cPedaco3 := Substr(cCodigo,9,5) // cPedaco3 terá o conteúdo “piped”
Manipulação de Textos pag.56

Slide 37

LEFT – Retorna o conteúdo de uma qtde de caracteres a


esquerda
Sintaxe
LEFT( cConteudo, nCount )
Argumento Obrigat. Tipo Descrição
Conteúdo que se quer extrair uma
cConteudo Sim C
parte
nCount Sim N Qtde de caracteres a extrair

Exemplo:
cCodigo := “Paralelepipedo”
cPedaco1 := Left(cCodigo,5) // cPedaco1 terá o conteúdo “paral”
Manipulação de Textos pag.57

Slide 38

RIGHT – Retorna o conteúdo de uma qtde de caracteres a


direita
Sintaxe
RIGHT( cConteudo, nCount )
Argumento Obrigat. Tipo Descrição
Conteúdo que se quer extrair uma
cConteudo Sim C
parte
nCount Sim N Qtde de caracteres a extrair

Exemplo:
cCodigo := “Paralelepipedo”
cPedaco1 := Right(cCodigo,5) // cPedaco1 terá o conteúdo “ipedo”
Manipulação de Textos pag.57

Slide 39

PADC – Centraliza um texto conforme a qtde de caracteres


especificados.
Sintaxe
PADC( cConteudo, nCount )
Argumento Obrigat. Tipo Descrição
cConteudo Sim C Conteúdo que se quer centralizar
nCount Sim N Qtde de caracteres a centralizar

Exemplo:
cCodigo := “Parede”
cCodigo := Padc(cCodigo,14)
// cCodigo terá o conteúdo “ Parede ”
Manipulação de Textos pag.57

Slide 40

PADR – Preenche com espaços em branco a direita


conforme a qtde de caracteres especificados.
Sintaxe
PADR( cConteudo, nCount )
Argumento Obrigat. Tipo Descrição
cConteudo Sim C Conteúdo que se quer alinhar
nCount Sim N Qtde de caracteres a alinhar

Exemplo:
cCodigo := “Parede”
cCodigo := Padr(cCodigo,14)
// cCodigo terá o conteúdo “ Parede”
Manipulação de Textos pag.58

Slide 41

ALLTRIM – Limpa espaços em branco iniciais e finais


Sintaxe
Alltrim( cConteudo )

Argumento Obrigat. Tipo Descrição


cConteudo Sim C Conteúdo que se quer limpar

Exemplo:
cCodigo := “ Parede ”
cCodigo := Alltrim(cCodigo) // cCodigo terá o conteúdo “Parede”
Manipulação de Textos pag.58

Slide 42

LTRIM – Limpa espaços em branco a esquerda


Sintaxe
Ltrim( cConteudo )

Argumento Obrigat. Tipo Descrição


cConteudo Sim C Conteúdo que se quer limpar

Exemplo:
cCodigo := “ Parede ”
cCodigo := Ltrim(cCodigo) // cCodigo terá o conteúdo “Parede ”
Manipulação de Textos pag.58

Slide 43

RTRIM – Limpa espaços em branco a direita


Sintaxe
Rtrim( cConteudo )

Argumento Obrigat. Tipo Descrição


cConteudo Sim C Conteúdo que se quer limpar

Exemplo:
cCodigo := “ Parede ”
cCodigo := Ltrim(cCodigo) // cCodigo terá o conteúdo “ Parede”
Manipulação de Numeros pag.61

Slide 44

STR – Converte numero em caracter


Sintaxe
Str( nConteudo )
Argumento Obrigat. Tipo Descrição
nConteudo Sim N Valor a converter

Exemplo:
nCodigo := 1
cCodigo := Str(nCodigo) // cCodigo terá o conteúdo “ 1”
Manipulação de Numeros pag.61

Slide 45

STRZERO – Converte numero em caracter, preenchendo com


zeros a esquerda.
Sintaxe
Strzero( nConteudo, nCount )

Argumento Obrigat. Tipo Descrição


nConteudo Sim N Valor a converter
nCount Sim N Qtde de caracteres

Exemplo:
nCodigo := 1
cCodigo := Strzero(nCodigo, 6) // cCodigo terá o conteúdo “000001”
nCodigo := 158
cCodigo := Strzero(nCodigo, 6) // cCodigo terá o conteúdo “000158”
Manipulação de Numeros pag.61

Slide 46

TRANSFORM – Converte numero em caracter utilizando


máscara.
Sintaxe
Transform( nConteudo, cMask )

Argumento Obrigat. Tipo Descrição


nConteudo Sim N Valor a converte
CMask Sim N Formato do caracter

Exemplo:
nCodigo := 1500
cCodigo := “Valor: ” + Transform(nCodigo, “@E 99,999.99”)
// cCodigo terá o conteúdo (Valor: 1.500,00)
Manipulação de Datas pag.59

Slide 47

DATE – Retorna a data do sistema operacional


Sintaxe
DATE()

Exemplo:
dDataAtual := date()
// dDataAtual terá o conteúdo da data de hoje
Manipulação de Datas pag.59

Slide 48

DTOS – Converte data em String no formato AAAAMMDD


Sintaxe
DTOS( dData )

Argumento Obrigat. Tipo Descrição

dData Sim D Data a converter

Exemplo:
cData := dtos(date()) // cData terá o conteúdo 20061231
Manipulação de Datas pag.59

Slide 49

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


Sintaxe
DTOC( dData )

Argumento Obrigat. Tipo Descrição

dData Sim D Data a converter

Exemplo:
cData := dtoc(date()) // cData terá o conteúdo 31/12/06
Manipulação de Datas pag.59

Slide 50

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


Sintaxe
CTOD( cData )

Argumento Obrigat. Tipo Descrição

cData Sim C Data a converter

Exemplo:
cData := “31/12/06”
cData := ctod(cData) // cData terá o conteúdo 31/12/06
Manipulação de Datas pag.59

Slide 51

STOD – Converte string no formato AAAAMMDD em Data.


Sintaxe
STOD(cData )

Argumento Obrigat. Tipo Descrição

cData Sim C Data a converter

Exemplo:
cData := “20061231”
cData := stod(cData) // cData terá o conteúdo 31/12/06
Manipulação de Datas pag.60

Slide 52

MONTH – Retorna o Mes


Sintaxe
Month( dData )

Argumento Obrigat. Tipo Descrição


dData Sim D Data

Exemplo:
nMes := Month(date())
// nMes terá o conteúdo 12 para a data 31/12/06
Manipulação de Datas pag.60

Slide 53

DAY – Retorna o dia


Sintaxe
Day( dData )

Argumento Obrigat. Tipo Descrição


dData Sim D Data

Exemplo:
nDia := Day(date())
// nDay terá o conteúdo 31 para a data 31/12/06
Manipulação de Datas pag.60

Slide 54

YEAR – Retorna o ano


Sintaxe
Year( dData )

Argumento Obrigat. Tipo Descrição


dData Sim D Data

Exemplo:
nAno := Year(date())
// nAno terá o conteúdo 2006 para a data 31/12/06
Manipulação de Datas pag.60

Slide 55

MESEXTENSO– Retorna o Mês por extenso em português


Sintaxe
MesExtenso( dData )

Argumento Obrigat. Tipo Descrição


dData Sim D Data

Exemplo:
cMes := MesExtenso(date())
// cMes terá o conteúdo Dezembro para a data 31/12/06
Criação 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


Exercício em sala (30 Minutos)
Slide 57

Fazer os exercícios 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 repetição e funções de array para
adicionar em dois vetores aDiv e anaodiv

- 10 – Utilize MSDialog e arrays para digitacao do usuario:


- Produto e preço
- Botão para incluir produtos na lista
- Botão para mostrar Lista de produtos a comprar
- Botão para mostrar lista de produtos que não serão comprados

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


Correção
Slide 58

Exer01.prw
Exer02.prw
Exer03.prw
Exer04.prw
Exer05.prw
Exer10.prw
Exer11Array.prw
Exercício de Casa
Slide 59

11 - Crie um cadastro de funcionários SZ6, com os campos


do teste de mesa pag. 11.

•Crie um rdmake para cadastrar os funcionários


•Crie um rdmake para mostrar o salário reajustado na
tela.
Manipulação de Mensagens
Slide 60

MSGBOX – Mostra mensagem na tela.


Sintaxe:
MSGBOX(cMensagem,cTítulo,cTpCaixa)

Argumento Obrigat. Tipo Descrição


cMensagem Sim C Mensagem dentro da janela
cTitulo Não C Titulo da Janela
cTpCaixa Não C Tipo da Caixa
Tipos de caixas:
“STOP”, utiliza um bitmap para advertência e tem um botão “Ok”. Retorna Nil.
“INFO”, utiliza um bitmap para advertência e tem um botão “Ok”. Retorna Nil.
“ALERT”, utiliza um bitmap para advertência e tem um botão “Ok”. Retorna Nil.
“YESNO”, utiliza um bitmap para advertência e tem dois botões “Sim” e “Não”, retorna .T. ou .F.
“RETRYCANCEL”, utiliza um bitmap para advertência e tem dois botões “Repetir” e “Cancelar”, retorna
.T. ou .F.
Manipulação de Mensagens
Slide 61

Exemplo:
MSGBOX(“Mensagem dentro da Janela ALERT”, “Titulo da Janela”, “ALERT”)
Manipulação de Mensagens
Slide 62

Exemplo:
MSGBOX(“Mensagem dentro da Janela INFO”, “Titulo da Janela”, “INFO”)
Manipulação de Mensagens
Slide 63

Exemplo:
MSGBOX(“Mensagem dentro da Janela STOP”, “Titulo da Janela”, “STOP”)
Manipulação de Mensagens
Slide 64

Exemplo:
MSGBOX(“Mensagem dentro da Janela YESNO”,“Titulo da Janela”,“YESNO”)
Manipulação de Mensagens
Slide 65

Exemplo:
MSGBOX(“Mensagem dentro da Janela RETRYCANCEL”,;
“Titulo da Janela”, “RETRYCANCEL”)
Manipulação 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
Manipulação de Mensagens
Slide 67

Na função Aviso(), o tamanho da mensagem é definido pelo 4º. Parametro.


Exemplos:

1 2

3
Manipulação 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 temporário.


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 temporário.


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 obedeça 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")))
// Não achei o registro
Endif
Comandos de Base de Dados
Slide 74

Quanto ao comando DO WHILE não esquecer de


incluir a condição 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 função que irá desposicionar registros, use a função


GETAREA() e RESTAREA(), para voltar tudo à posição 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

Função Posicione
Sintaxe:
Posicione(cAlias, nOrdem, cChave, cCampo)

Exemplo:
Posicione("SB1", 1, xFilial("SB1") + cCodigo, "B1_DESC")
Comandos de Base de Dados
Slide 77

Função Existcpo
Retorna se determinada chave existe ou não no arquivo.
Se existir retorna .T.
Se não existir retorna .F.

Sintaxe :
ExistCpo(cAlias,cChave,nOrdem)

Exemplo :
ExistCpo("SB1", cCodigo, 1)
Comandos de Base de Dados
Slide 78

Função Existchav
Retorna se determinada chave existe ou não no arquivo.
Se existir retorna .F.
Se não existir retorna .T.

Sintaxe :
ExistChav(cAlias,cChave,nOrdem)

Exemplo :
ExistChav("SB1", cCodigo, 1)
Telas padrões
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

Diferenças DBF e SQL

Comandos interpretados

Velocidade

Integridade
Banco de Dados
Slide 83

TCCONTYPE - Define o tipo de conexão que será utilizada entre o


Protheus e o TopConnect.
Sintaxe
TCCONTYPE ( cTipo )

Argumento Obrigat. Tipo Descrição


Tipo da conexão. Pode ser:
cTipo Sim C
"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 Descrição


Nome da tabela que deve ser
cTabela Sim C
apagada.

Exemplo:
If TcDelFile("SA1020")
MSGINFO(“Tabela excluída com sucesso”)
Else
MSGINFO(“Não foi possível excluir a tabela”)
Endif
Banco de Dados
Slide 85

TCGENQRY - Define a execução de uma Query, a próxima chamada


à DBUseArea será a abertura de uma Query e não de tabela.
Sintaxe:
TCGENQRY ([ xPar1, xPar2, ], cQuery)

Argumento Obrigat Tipo Descrição


Parâmetros apenas para
xPar1, xPar2 Não Qualquer
compatibilização. Não tem função.
Expressão da query que deseja
cQuery Sim C
executar.

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())
Banco de Dados
Slide 86

TCREFRESH - Faz refresh em uma tabela, através de uma leitura


forçada da tabela no banco de dados. Utilizada após o DELETE e o
INSERT.
Sintaxe:
TCREFRESH ( cTabela )

Argumento Obrigat Tipo Descrição


Indica nome da tabela que deve ser
cTabela Sim Lógico
feito refresh.

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


número variável de parâmetros. Retorna um array contendo os valores de
retorno da SP
Sintaxe:
TCSPEXEC ( cSProc [, xParam1,...,xParamN])--> [array]
Argumento Obrigat. Tipo Descrição
cSProc Sim C Nome da Stored Procedure.
xParamX Não Qualquer Parâmetro(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 Descrição


cComando Sim C Codigo em SQL

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 )

Obrigat. Tipo Descrição


Argumento
cStoredProc Sim C Nome da Stored Procedure.

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

Potrebbero piacerti anche