advpl - pratica
DESCRIPTION
ADVPL - praticaTRANSCRIPT
AdvPL Prática
IDE Integrated Development Environment
IDESlide 3
Projeto
Repositório
deObjetos
IDEIntegrated
DevelopmentEnvironment
Programa Fonte
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
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;
IDESlide 6
• Criação do programa – Através de edição podemos criar programas;
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;
IDESlide 8
APOMATA01
0
REMOTE
ExecutaMATA010Executa
MATA410ExecutaCTBR040
RPO
MATA010MATA410CTBR040
SERVERProgramaFonte
MATA010
Cad.Produtos
Ped.Vendas
Balancete Cont.
Compilação
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;
IDESlide 10
• Utilizando o IDE.
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
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
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
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)
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
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 )
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”))
Customização Pag. 43
Slide 18
• TabelasTABELA - Retorna o conteúdo de uma tabela cadastrada no SX5.SintaxeTABELA( cCodTab, cChave, [lHelp] )
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))))
Customização Pag. 44
Slide 20
• PerguntasPERGUNTE – Carrega e Monta a tela de perguntas cadastradas no SX1.SintaxePERGUNTE( cGrupo, lMostra )
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.
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
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
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
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 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
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
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)
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.
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
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
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
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
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
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
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”
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”
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”
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 ”
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”
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”
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 ”
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”
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”
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”
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)
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
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
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 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
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
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
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
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
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çãoSlide 58
Exer01.prw
Exer02.prw
Exer03.prw
Exer04.prw
Exer05.prw
Exer10.prw
Exer11Array.prw
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.
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.
Manipulação de MensagensSlide 61
Exemplo:MSGBOX(“Mensagem dentro da Janela ALERT”, “Titulo da Janela”, “ALERT”)
Manipulação de MensagensSlide 62
Exemplo:MSGBOX(“Mensagem dentro da Janela INFO”, “Titulo da Janela”, “INFO”)
Manipulação de MensagensSlide 63
Exemplo:MSGBOX(“Mensagem dentro da Janela STOP”, “Titulo da Janela”, “STOP”)
Manipulação de MensagensSlide 64
Exemplo:MSGBOX(“Mensagem dentro da Janela YESNO”,“Titulo da Janela”,“YESNO”)
Manipulação de MensagensSlide 65
Exemplo:MSGBOX(“Mensagem dentro da Janela RETRYCANCEL”,; “Titulo da Janela”, “RETRYCANCEL”)
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
Manipulação de MensagensSlide 67
Na função Aviso(), o tamanho da mensagem é definido pelo 4º. Parametro.Exemplos:
1 2
3
Manipulação de MensagensSlide 68
Outras funcoes de mensagem
Msginfo()
Alert()
Msalert()
Msgrun()
Msaguarde()
Comandos de Base de DadosSlide 69
dbSelectArea()dbSetOrder()dbGotop()dbGoBottom()dbSeek()dbskip()dbFilter()dbSetFilter()dbClearFil()Entre outros...
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())
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
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.
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
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
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
Comandos de Base de DadosSlide 76
Função Posicione
Sintaxe:Posicione(cAlias, nOrdem, cChave, cCampo)
Exemplo:Posicione("SB1", 1, xFilial("SB1") + cCodigo, "B1_DESC")
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)
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)
Slide 79
Telas padrões
•mBrowse()
•Modelo2()
•Modelo3()
Modelo 3Slide 80
•aRotina
•aHeader•aCols
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
Banco de DadosSlide 82
Diferenças DBF e SQL
Comandos interpretados
Velocidade
Integridade
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")
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
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())
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)
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 )
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_ = '*'")
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