advpl - pratica

89
AdvPL Prática

Upload: tiago-batista-lucio

Post on 17-Jul-2016

82 views

Category:

Documents


19 download

DESCRIPTION

ADVPL - pratica

TRANSCRIPT

Page 1: ADVPL - pratica

AdvPL Prática

Page 2: ADVPL - pratica

IDE Integrated Development Environment

Page 3: ADVPL - pratica

IDESlide 3

Projeto

Repositório

deObjetos

IDEIntegrated

DevelopmentEnvironment

Programa Fonte

Page 4: ADVPL - pratica

IDESlide 4

• Configuração de Ambiente – Podemos configurar o ambiente que será atualizado na compilacao e depuração de programas;

ERP811APOBIN

REMOTESERVER

INCLUDEMP_DATA

DATASAMPLESSPOOLSYSTEMSYSTEMLOAD

MY PROJECTS

SIGACFG

TCP

Environment

[Environment]SourcePath=C:\ERP811\APORootPath=C:\ERP811\MP_DataStartPath=\system\RpoDb=dbfRpoLanguage=portugueseRpoVersion=811LocalFiles=adslocaldbextension=.dbfPictFormat=DEFAULTDateFormat=DEFAULT

[Drivers]Active=TCP

[TCP]TYPE=TCPIPPort=1234

MP8SRV.INI

Page 5: ADVPL - pratica

IDESlide 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;

Page 6: ADVPL - pratica

IDESlide 6

• Criação do programa – Através de edição podemos criar programas;

Page 7: ADVPL - pratica

IDESlide 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;

Page 8: ADVPL - pratica

IDESlide 8

APOMATA01

0

REMOTE

ExecutaMATA010Executa

MATA410ExecutaCTBR040

RPO

MATA010MATA410CTBR040

SERVERProgramaFonte

MATA010

Cad.Produtos

Ped.Vendas

Balancete Cont.

Compilação

Page 9: ADVPL - pratica

IDESlide 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;

Page 10: ADVPL - pratica

IDESlide 10

• Utilizando o IDE.

Page 11: ADVPL - pratica

IDESlide 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

Page 12: ADVPL - pratica

IDESlide 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

Page 13: ADVPL - pratica

IDESlide 13

ATIVOS ATIVOS DIVERSOS GGTOTAL DE GG 1

LUVA LUVA PARA PROTECAO DAS MAOS MCMANUTENCAO ITEM PARA CONTROLE DE MANUTENC MCTERCEIROS ITEM PARA CONTROLE DE MANUTENC MCTOTAL DE MC 3

MOD0001 MAO DE OBRA FABRICACAO MOMOD0002 MAO DE OBRA DO ACABAMENTO MOTOTAL DE MO 2

ARGOLA ARGOLA PARA PRENDER CHAVES MPESCUDO ESCUDO COM LOGOTIPO SIGA MPMOSQUETAO PRENDEDOR DO CHAVEIRO MPREBITE REBITE DE FERRO MPSUPORTE SUPORTE DE COURO MPTIRANTE TIRANTE DE COURO MPTOTAL DE MP 6

CHAVEIRO CHAVEIRO DE BRINDE MICROSIGA PATOTAL DE PA 1

CORPO CORPO DE COURO PITOTAL DE PI 1

TOTAL GERAL: 14

Modelo do relatorio

Page 14: ADVPL - pratica

CustomizaçãoSlide 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)

Page 15: ADVPL - pratica

Dicionários – Sx´sSlide 15

Arquivo DescriçãoSX1 Perguntas e RespostasSX2 Mapeamento de TabelasSX3 Dicionário de DadosSX4 Agenda do Schedule de ProcessosSX5 TabelasSX6 ParâmetrosSX7 GatilhosSX9 Relacionamento entre TabelasSXA Pastas Cadastrais apontadas no SX3SXB Consulta por meio da tecla F3 (Consulta Padrão)SXD Controle do Schedule de ProcessosSXE Seqüência de Documentos (+1)SXF Seqüência de Documentos (próximo)SXG Tamanho padrão para camposSXK Respostas das Perguntas (SX1) por UsuárioSXO Controle de LOGs por TabelaSIX Índices dos Arquivos

.XNU Menu de Opções dos Módulos

Page 16: ADVPL - pratica

Customização Pag. 41

Slide 16

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

PUTMV – Grava informação no parâmetro no SX6.SintaxePUTMV( cNomPar, cConteudo )

Page 17: ADVPL - pratica

Customização Pag. 41

Slide 17

• Criar Parâmetro pelo ConfiguradorParametro: AD_DATAFINDescricao: Data Inicio de operacoesConteúdo: 01/01/2007

Rodar em fórmulas:Msginfo(GETMV(“AD_DATAFIN”))putmv(“AD_DATAFIN”,ctod(“01/05/2007”))Msginfo(GETMV(“AD_DATAFIN”))

Page 18: ADVPL - pratica

Customização Pag. 43

Slide 18

• TabelasTABELA - Retorna o conteúdo de uma tabela cadastrada no SX5.SintaxeTABELA( cCodTab, cChave, [lHelp] )

Page 19: ADVPL - pratica

Customização Pag. 43

Slide 19

• Criar tabela pelo ConfiguradorTabela: Z1Descricao: Dias da semanaChave: 1 – DomingoChave: 2 – SegundaChave: 3 – TerçaChave: 4 – QuartaChave: 5 – QuintaChave: 6 – SextaChave: 7 - Sábado

Rodar em fórmulas:Msginfo(TABELA( “Z1”,”2” ) )

msginfo(TABELA("Z1",cValToChar(DOW(dDATABASE))))

Page 20: ADVPL - pratica

Customização Pag. 44

Slide 20

• PerguntasPERGUNTE – Carrega e Monta a tela de perguntas cadastradas no SX1.SintaxePERGUNTE( cGrupo, lMostra )

Page 21: ADVPL - pratica

Customização Pag. 44

Slide 21

• Criar pergunta pelo ConfiguradorPergunta: RELA031º. Produto Inicial com consulta em SB12º. Produto fINAL com consulta em SB1

Exercício em sala: (15 min)Utilizar como base o Rdmake RELA02Criar o RELA03Colocar pergunta criada no relatorioTratar o filtro que o usuário selecionou.

Page 22: ADVPL - pratica

Customização Pag. 45

Slide 22

• GatilhoCriar um gatilho no configuradorClientesAo digitar o CEP deve preencher o estado com SP

Testar no cadastro de clientes, se não tiver o cadastro de clientesNo menu, incluir a funcao MATA030

Page 23: ADVPL - pratica

TabelasSlide 23

SA - CadastrosSB - EstoquesSC - Previsões de E/SSD - Mov. De EstoqueSE - FinanceiroSF - FiscalSG - EstruturasSH - Carga de MáquinaSI - ContábilSJ - EstatísticasSM - MiscelâneasSN - Ativo Fixo

M.E.R. Modelo de Entidades e Relacionamento

SO - Assist. TécnicaSP - Ponto EletrônicoSQ - Recr. e SeleçãoSR - Folha de PagtoST - Manut. IndustrialSU - TelemarketingSV - ConcessionáriasSW e SY - Export./Import.Q? - Qualidade (Celerina)R? - Recursos HumanosSZ,QZ,RZ - LivresP? - Projetos Especiais

Page 24: ADVPL - pratica

Algumas tabelas Slide 24

Prefixo DescriçãoSA1 Cadastro de ClientesSA2 Cadastro de FornecedoresSA3 Cadastro de VendedoresSB1 Cadastro de ProdutosSB2 Saldos dos Produtos por AlmoxarifadoSC1 Solicitações de ComprasSC5 Cabeçalho dos Pedidos de VendaSC6 Itens dos Pedidos de VendaSC7 Pedidos de ComprasSD1 Itens das Notas Fiscais de EntradaSD2 Itens das Notas Fiscais de SaídaSD3 Movimentações Internas de ProdutosSE1 Títulos a ReceberSE2 Títulos a PagarSF1 Cabeçalho das Notas Fiscais de EntradaSF2 Cabeçalho das Notas Fiscais de SaídaSI1 Plano de ContasSI2 Lançamentos Contábeis

Page 25: ADVPL - pratica

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...

Page 26: ADVPL - pratica

Conceito FiliaisSlide 26

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

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

Page 27: ADVPL - pratica

Conceito Filiais - AcessoSlide 27

Compartilhado registros compartilhados entre as filiaisCampo Filial: em branco

Exclusivo o registro é exclusivo da filialCampo Filial: código da Filial (variável cFilAnt)

C5_FILIAL C5_NUM C5_EMISSAO C5_CLIENTE C5_PROD C5_VALOR

01 000001 01/01/04 000002 11.11014 15.000,0001 000005 01/01/04 000023 13.13000 5.600,0001 000007 20/01/04 000016 15.15140 5.600,0002 000001 01/01/04 000002 11.11014 15.000,0002 000005 01/01/04 000023 13.13000 5.600,0002 000007 20/01/04 000016 15.15140 5.600,0003 000001 01/01/04 000002 11.11014 15.000,0003 000005 01/01/04 000023 13.13000 5.600,0003 000007 20/01/04 000016 15.15140 5.600,00

A1_FILIAL A1_COD A1_NOME

000015 FABRICA DE TINTAS E VERINIZES LTDA /SP 000016 TEX MALHAS E CONFECCOES S.A /SP 000001 CLIENTE PADRAO 000020 ARMANDO JOSE FLORES /SC 000007 COMERCIO SOM DO MUNDO /SP

xFilial(“SA1”) “ “

xFilial(“SC5”) cFilAnt

Ex: SA1 - Compartilhado

Ex: SC5 - Exclusivo

Page 28: ADVPL - pratica

IndicesSlide 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.

• 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().

SA1 – índices do Sistema 12...7

índice do Usuário 8 A1_TIPO

Nos programas: dbSetOrder(8)

Page 29: ADVPL - pratica

Pontos de EntradaSlide 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.

Page 30: ADVPL - pratica

Correção de Exercicio de casa Pag. 32Slide 30Exercício 4

InicioDeclarar variável M, IReceber Valor da mercadoria em MPerguntar se M > 10000

Se sim, Calcular I := M * 0.15Se não, Calcular I := 0

Imprimir MImprimir I

Fim

Page 31: ADVPL - pratica

Correção de Exercicio de casa Pag. 32Slide 31Exercício 5

InicioDeclarar variável nValSal, nQtdHor, nSalRecDeclarar variável nMeta := 180Receber Valor do Salário em nValSalReceber Qtde de Horas em nQtdHorPerguntar se nQtdHor > nMeta

Se sim, Calcular nSalrec := (nValSal+2) * nQtdHor Se não, Calcular nSalRec := nValSal * nQtdHor

Mostrar nSalRecFim

Page 32: ADVPL - pratica

Correção de Exercicio de casa Pag. 32Slide 32Exercício 6

#include "RWmake.ch"user function quadrado(aArray)n1 := aArray[1]^2 // calcula potência de n1n2 := aArray[2]^2 // calcula potência de n2n3 := aArray[3]^2 // calcula potência de n3n4 := aArray[4]^2 // calcula potência de n4n1 := str(n1) // converte para string para imprimir no boxn1 += " " + str(n2) // somar em apenas 1 variáveln1 += " " + 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") endifreturn

Page 33: ADVPL - pratica

Correção de Exercicio de casa Pag. 32Slide 33

Exercício 7idade := 14do case

case idade >= 5 .And. idade <= 7msginfo("Infantil - Classe A")

case idade >= 8 .And. idade <= 11msginfo("Infantil - Classe B")

case idade = 12 .or. idade = 13msginfo("Juvenil - Classe B")

case idade >= 14 .And. idade <= 17msginfo("Juvenil - Classe B")

case idade < 5 msginfo("Infantil - Criança só entra acompanhado“)

otherwise msginfo("Adulto")

endcase

Page 34: ADVPL - pratica

Criando tabelas de usuárioSlide 34

• Criar um arquivo pelo configurador

SZ5 – Cadastro de AlunosZ5_FILIAL C 2Z5_CODIGO C 4 (usar inicializador padrao GETSXENUM)Z5_NOME C 30Z5_ENDERECO C 30Z5_APELIDO C 20Z5_TELEFONE C 15Z5_DATANASC D 8Indice 1 – filial + CodigoIndice 2 – Filial + nome

•Criar um AXcadastro() para essa tabela

Page 35: ADVPL - pratica

Manipulação de Textos pag.56

Slide 35

VAL - Converte texto em valor.Sintaxe: VAL( cValor )

Argumento Obrigat. Tipo Descrição

cValor Sim C Conteúdo que se quer converter.

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

Page 36: ADVPL - pratica

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

cConteudo Sim C Conteúdo que se quer extrair uma parte

nValIni Sim N Posição Inicial para extração

nCount Sim N Qtde de caracteres a extrair a 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”

Page 37: ADVPL - pratica

Manipulação de Textos pag.56

Slide 37

LEFT – Retorna o conteúdo de uma qtde de caracteres a esquerdaSintaxe LEFT( cConteudo, nCount )

Argumento Obrigat. Tipo Descrição

cConteudo Sim C Conteúdo que se quer extrair uma parte

nCount Sim N Qtde de caracteres a extrair

Exemplo:cCodigo := “Paralelepipedo”cPedaco1 := Left(cCodigo,5) // cPedaco1 terá o conteúdo “paral”

Page 38: ADVPL - pratica

Manipulação de Textos pag.57

Slide 38

RIGHT – Retorna o conteúdo de uma qtde de caracteres a direitaSintaxe RIGHT( cConteudo, nCount )

Argumento Obrigat. Tipo Descrição

cConteudo Sim C Conteúdo que se quer extrair uma parte

nCount Sim N Qtde de caracteres a extrair

Exemplo:cCodigo := “Paralelepipedo”cPedaco1 := Right(cCodigo,5) // cPedaco1 terá o conteúdo “ipedo”

Page 39: ADVPL - pratica

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çãocConteudo Sim C Conteúdo que se quer centralizarnCount Sim N Qtde de caracteres a centralizar

Exemplo:cCodigo := “Parede”cCodigo := Padc(cCodigo,14) // cCodigo terá o conteúdo “ Parede ”

Page 40: ADVPL - pratica

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çãocConteudo Sim C Conteúdo que se quer alinharnCount Sim N Qtde de caracteres a alinhar

Exemplo:cCodigo := “Parede”cCodigo := Padr(cCodigo,14) // cCodigo terá o conteúdo “ Parede”

Page 41: ADVPL - pratica

Manipulação de Textos pag.58

Slide 41

ALLTRIM – Limpa espaços em branco iniciais e finaisSintaxe Alltrim( cConteudo )

Argumento Obrigat. Tipo DescriçãocConteudo Sim C Conteúdo que se quer limpar

Exemplo:cCodigo := “ Parede ”cCodigo := Alltrim(cCodigo) // cCodigo terá o conteúdo “Parede”

Page 42: ADVPL - pratica

Manipulação de Textos pag.58

Slide 42

LTRIM – Limpa espaços em branco a esquerdaSintaxe Ltrim( cConteudo )

Argumento Obrigat. Tipo DescriçãocConteudo Sim C Conteúdo que se quer limpar

Exemplo:cCodigo := “ Parede ”cCodigo := Ltrim(cCodigo) // cCodigo terá o conteúdo “Parede ”

Page 43: ADVPL - pratica

Manipulação de Textos pag.58

Slide 43

RTRIM – Limpa espaços em branco a direitaSintaxe Rtrim( cConteudo )

Argumento Obrigat. Tipo DescriçãocConteudo Sim C Conteúdo que se quer limpar

Exemplo:cCodigo := “ Parede ”cCodigo := Ltrim(cCodigo) // cCodigo terá o conteúdo “ Parede”

Page 44: ADVPL - pratica

Manipulação de Numeros pag.61

Slide 44

STR – Converte numero em caracterSintaxe Str( nConteudo )

Argumento Obrigat. Tipo DescriçãonConteudo Sim N Valor a converter

Exemplo:nCodigo := 1cCodigo := Str(nCodigo) // cCodigo terá o conteúdo “ 1”

Page 45: ADVPL - pratica

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çãonConteudo Sim N Valor a converternCount Sim N Qtde de caracteres

Exemplo:nCodigo := 1cCodigo := Strzero(nCodigo, 6) // cCodigo terá o conteúdo “000001”nCodigo := 158cCodigo := Strzero(nCodigo, 6) // cCodigo terá o conteúdo “000158”

Page 46: ADVPL - pratica

Manipulação de Numeros pag.61

Slide 46

TRANSFORM – Converte numero em caracter utilizando máscara.Sintaxe Transform( nConteudo, cMask )

Argumento Obrigat. Tipo DescriçãonConteudo Sim N Valor a converteCMask Sim N Formato do caracter

Exemplo:nCodigo := 1500cCodigo := “Valor: ” + Transform(nCodigo, “@E 99,999.99”) // cCodigo terá o conteúdo (Valor: 1.500,00)

Page 47: ADVPL - pratica

Manipulação de Datas pag.59 Slide 47

DATE – Retorna a data do sistema operacionalSintaxe DATE()

Exemplo:dDataAtual := date() // dDataAtual terá o conteúdo da data de hoje

Page 48: ADVPL - pratica

Manipulação de Datas pag.59 Slide 48

DTOS – Converte data em String no formato AAAAMMDDSintaxe DTOS( dData )

Argumento Obrigat. Tipo Descrição

dData Sim D Data a converter

Exemplo:cData := dtos(date()) // cData terá o conteúdo 20061231

Page 49: ADVPL - pratica

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

Page 50: ADVPL - pratica

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

Page 51: ADVPL - pratica

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

Page 52: ADVPL - pratica

Manipulação de Datas pag.60 Slide 52

MONTH – Retorna o MesSintaxe 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

Page 53: ADVPL - pratica

Manipulação de Datas pag.60 Slide 53

DAY – Retorna o diaSintaxe 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

Page 54: ADVPL - pratica

Manipulação de Datas pag.60 Slide 54

YEAR – Retorna o anoSintaxe 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

Page 55: ADVPL - pratica

Manipulação de Datas pag.60 Slide 55

MESEXTENSO– Retorna o Mês por extenso em portuguêsSintaxe MesExtenso( dData )

Argumento Obrigat. Tipo DescriçãodData Sim D Data

Exemplo:cMes := MesExtenso(date()) // cMes terá o conteúdo Dezembro para a data 31/12/06

Page 56: ADVPL - pratica

Criação de TelasSlide 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

Page 57: ADVPL - pratica

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.

Page 58: ADVPL - pratica

CorreçãoSlide 58

Exer01.prw

Exer02.prw

Exer03.prw

Exer04.prw

Exer05.prw

Exer10.prw

Exer11Array.prw

Page 59: ADVPL - pratica

Exercício de CasaSlide 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.

Page 60: ADVPL - pratica

Manipulação de MensagensSlide 60

MSGBOX – Mostra mensagem na tela.Sintaxe: MSGBOX(cMensagem,cTítulo,cTpCaixa)

Argumento Obrigat. Tipo DescriçãocMensagem Sim C Mensagem dentro da janelacTitulo Não C Titulo da JanelacTpCaixa 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.

Page 61: ADVPL - pratica

Manipulação de MensagensSlide 61

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

Page 62: ADVPL - pratica

Manipulação de MensagensSlide 62

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

Page 63: ADVPL - pratica

Manipulação de MensagensSlide 63

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

Page 64: ADVPL - pratica

Manipulação de MensagensSlide 64

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

Page 65: ADVPL - pratica

Manipulação de MensagensSlide 65

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

Page 66: ADVPL - pratica

Manipulação de MensagensSlide 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

Page 67: ADVPL - pratica

Manipulação de MensagensSlide 67

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

1 2

3

Page 68: ADVPL - pratica

Manipulação de MensagensSlide 68

Outras funcoes de mensagem

Msginfo()

Alert()

Msalert()

Msgrun()

Msaguarde()

Page 69: ADVPL - pratica

Comandos de Base de DadosSlide 69

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

Page 70: ADVPL - pratica

Comandos de Base de DadosSlide 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 RootPathcArqTra := CriaTrab( aCampos, .T. ) dbUseArea(.t.,,cArqTra,"TMP",.f.,.f.)cArqTemp := CriaTrab( Nil, .F. ) //Somente gera um nome temporario SA1->(dbCloseArea())

Page 71: ADVPL - pratica

Comandos de Base de DadosSlide 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 programaRETINDEX(“SB1”)DbSelectArea( “SB1” ) //Selecionando a areaDbSetOrder( 1 ) //Posicionando na ordem de origemfErase( cArqtemp + OrdBagExt() )//Deleta arquivo de trabalho

Page 72: ADVPL - pratica

Comandos de Base de DadosSlide 72

É sempre bom utilizar o Alias antes decomando de Base de Dados.

SB1->(DBGOTOP()) – Posiciona no primeiro registro do arquivoSB1 de acordo com a ordem que esta selecionada no momento.

SB1->(DBGOBOTTON()) – Posiciona no ultimo registro do arquivoSB1 de acordo com a ordem que esta selecionada no momento.

SB1->(DBSEEK(XFILIAL() + “000100”)) - Busca em SB1 o registroque obedeça a chave estipulada de acordo com a ordem selecionada no momento.

Page 73: ADVPL - pratica

Comandos de Base de DadosSlide 73

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

Exemplo:If ! SB1->(dbSeek(xFilial("SB1")))    // Não achei o registroEndif

Page 74: ADVPL - pratica

Comandos de Base de DadosSlide 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"))

// ProcessamentoSB1->(dbSkip())

Enddo

Page 75: ADVPL - pratica

Comandos de Base de DadosSlide 75

Ao criar uma função que irá desposicionar registros, use a funçãoGETAREA() e RESTAREA(), para voltar tudo à posição original.

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

// ProcessamentoDbskip()

EnddoRestarea(aAreasd1) // Restaura o ambiente do arquivo SD1

Page 76: ADVPL - pratica

Comandos de Base de DadosSlide 76

Função Posicione

Sintaxe:Posicione(cAlias, nOrdem, cChave, cCampo)

Exemplo:Posicione("SB1", 1, xFilial("SB1") + cCodigo, "B1_DESC")

Page 77: ADVPL - pratica

Comandos de Base de DadosSlide 77

Função ExistcpoRetorna 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)

Page 78: ADVPL - pratica

Comandos de Base de DadosSlide 78

Função ExistchavRetorna 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)

Page 79: ADVPL - pratica

Slide 79

Telas padrões

•mBrowse()

•Modelo2()

•Modelo3()

Page 80: ADVPL - pratica

Modelo 3Slide 80

•aRotina

•aHeader•aCols

Page 81: ADVPL - pratica

Modelo 3Slide 81

•SintaxeModelo3(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

Page 82: ADVPL - pratica

Banco de DadosSlide 82

Diferenças DBF e SQL

Comandos interpretados

Velocidade

Integridade

Page 83: ADVPL - pratica

Banco de DadosSlide 83

TCCONTYPE - Define o tipo de conexão que será utilizada entre o Protheus e o TopConnect.SintaxeTCCONTYPE ( cTipo )

Argumento Obrigat. Tipo Descrição

cTipo Sim C Tipo da conexão. Pode ser: "TCPIP" ou "NPIPE"

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

Page 84: ADVPL - pratica

Banco de DadosSlide 84

TCDELFILE - Apaga um arquivo de um banco de dados.Sintaxe TCDELFILE ( cTabela )

Argumento Obrigat. Tipo Descrição

cTabela Sim C Nome da tabela que deve ser apagada.

Exemplo:If  TcDelFile("SA1020")

MSGINFO(“Tabela excluída com sucesso”)Else

MSGINFO(“Não foi possível excluir a tabela”)Endif

Page 85: ADVPL - pratica

Banco de DadosSlide 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

xPar1, xPar2 Não Qualquer Parâmetros apenas para compatibilização. Não tem função.

cQuery Sim C Expressão da query que deseja 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())

Page 86: ADVPL - pratica

Banco de DadosSlide 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

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

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

Page 87: ADVPL - pratica

Banco de DadosSlide 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 SPSintaxe:TCSPEXEC ( cSProc [, xParam1,...,xParamN])--> [array]

Argumento Obrigat. Tipo DescriçãocSProc 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 RECOMPILEAsBegin   Select @OUT_STR = "Teste", @OUT_VALUE = @IN_VALUE + 3EndGO aResult := TCSPEXEC(xProcedures ('teste1'), 100 )

Page 88: ADVPL - pratica

Banco de DadosSlide 88

TCSQLEXEC - Executa um comando em SQLTCSQLEXEC ( cComando])

Argumento Obrigat. Tipo DescriçãocComando Sim C Codigo em SQL

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

Page 89: ADVPL - pratica

Banco de DadosSlide 89

TCSPEXIST - Verifica se uma Stored Procedure existe.Sintaxe TCSPEXIST ( cStoredProc )

Argumento Obrigat. Tipo Descrição

cStoredProc Sim C Nome da Stored Procedure.

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