Você está na página 1de 83

Programação ADVPL

Intermediário

Aula 01
Aula 1
 Programas de Atualização
 Apresentação do Projeto
 HomeWork
Aula 2
 Programas de Atualização
 Arquivos de Trabalho
 HomeWork
Aula 3
 Programas de Relatório
 Manipulação de Arquivos
 HomeWork
Aula 4
 Oficina de Programação
 Introdução a O.O.
 ADVPL O.O. 1
 Projeto
 Prova
Programas de Atualização
 Modelo 1 (AxCadastro)
 MBrowse
 MarkBrowse
 Modelo 2
 Modelo 3

Apostila: ADVPL Intermediário – página XX


Programas de Atualização
Modelo 1 (AxCadastro)

 AxCadastro

Funcionalidade para cadastros


simples, sem muitas opções de
validação e customizações
Programas de Atualização
Modelo 1 (AxCadastro)

AxCadastro(cAlias,cTitulo,cVldExc,;
cVldAlt)

cAlias: Alias Protheus para utilização


cTitulo: Título da Janela
cVldExc : Validação para Exclusão
cVldAlt : Validação para Alteração
Programas de Atualização
Modelo 1 (AxCadastro)

Exercício 01

Desenvolver um AxCadastro
para a tabela padrão do
ERP – SA2: Fornecedores
Programas de Atualização
Modelo 1 (AxCadastro)
#include "protheus.ch"

User Function XCadSA2()

Local cAlias := "SA2"


Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := ".T."
Local cVldAlt := ".T."

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return
Programas de Atualização
Modelo 1 (AxCadastro)
Programas de Atualização
Modelo 1 (AxCadastro)

Exercício 02

Implementar no AxCadastro
as validações de alteração
e exclusão.
Programas de Atualização
Modelo 1 (AxCadastro)

#include "protheus.ch"

User Function XCadSA2()

Local cAlias := "SA2"


Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := “U_VldExc()”
Local cVldAlt := “U_VldAlt()”

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return
Programas de Atualização
Modelo 1 (AxCadastro)
User Function VldExc() / VldAlt()
Local lRet := .T.
Local aArea := GetArea()

SE2->(dbSetOrder())
lRet := IIF(SE2->(DbSeek(),.F.,.T.)

SF1->(dbSetOrder())
lRet := IIF(SF1->(DbSeek(),.F.,.T.)

RestArea(aArea)
Return lRet
Programas de Atualização
 Modelo 1 (AxCadastro)
 MBrowse
 MarkBrowse
 Modelo 2
 Modelo 3

Apostila: ADVPL Intermediário – página XX


Programas de Atualização
MBrowse

 MBrowse

Funcionalidade que permite flexibilizar as


funcionalidades do Browse, através do
array de funções aRotina.
Programas de Atualização
MBrowse

 MBrowse(nLin1,nCol1,nLin2,nCol2,;
cAlias,aCampos,cCampo)

- nLin1,nCol1,nLin2,nCol2: Coordenadas
dos cantos aonde o browse será exibido.
Para seguir o padrão da AXCADASTRO()
use 6,1,22,75 .
Programas de Atualização
MBrowse

 MBrowse(nLin1,nCol1,nLin2,nCol2,;
cAlias,aCampos,cCampo)

- cAlias: Alias do arquivo a ser exibido


- aCampos: Array multidimensional com os
campos a serem exibidos no browse antes
dos demais campos da tabela. Se não
informado, os campos serão obtidos do
SX3. {{<DESCRICAO>, <CAMPO>}}
Programas de Atualização
MBrowse

 MBrowse(nLin1,nCol1,nLin2,nCol2,;
cAlias,aCampos, cCampo)

- cCampo: Nome de um campo (entre


aspas) que sera usado como "flag".
Programas de Atualização
MBrowse

 MBrowse(nLin1,nCol1,nLin2,nCol2,;
cAlias,aCampos,cCampo,,,,aCores)

- aCores: Array que contém as condições


para exibição de múltilplas cores no
browse:
{{ “<condição>", “<cor>"}}
Programas de Atualização
MBrowse

 BrwLegenda(cCadastro,cTitulo,
aCores)

- cCadastro: Mesmo cCadastro do


MBrowse, para identificar a quem a
legenda se refere.
- cTitulo: Título da legenda
- aCores: Array que contém as condições
para exibição de múltilplas cores no
browse: {{“Cor”,”Texto”}}
Programas de Atualização
MBrowse - AxFunctions

As AxFunctions() padronizam a forma de


chamada de uma Enchoice(), já
implementando os tratamentos
necessários a uma EnchoiceBar() e as
regras de gravação para cada uma das
situações pré-definidas para o uso de
cada função.
Programas de Atualização
MBrowse - AxFunctions

 AxVisual()

 AxInclui()

 AxAltera()

 AxDeleta()
Programas de Atualização
AxFunction -> Enchoice()
DEFINE MSDIALOG oDlg TITLE cCadastro FROM nTop,nLeft TO
nBottom,nRight PIXEL OF oMainWnd

If lMaximized <> NIL


oDlg:lMaximized := lMaximized
EndIf

aPosEnch := {,,(oDlg:nClientHeight - 4)/2,}

EnChoice( cAlias, nReg, nOpc,


aCRA,"CRA",oemtoansi(STR0005),aAcho, aPosEnch , aCpos, , ,
,cTudoOk,,lF3,lVirtual)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar()


Programas de Atualização
MBrowse – AxInclui()

 AxInclui(cAlias, nReg, nOpc, aAcho,


cFunc, aCpos, cTudoOk, lF3, cTransact,
aButtons, aParam, aAuto, lVirtual,
lMaximized)

- cAlias: Alias do tabela utilizada


- nReg: Recno() do registro utilizada
- nOpc: Opção de manipulação
selecionada
Programas de Atualização
MBrowse – AxInclui()

 AxInclui(cAlias, nReg, nOpc, aAcho,


cFunc, aCpos, cTudoOk, lF3,
cTransact, aButtons, aParam, aAuto,
lVirtual, lMaximized)

- cTudoOk: Função de validação na


confirmação da tela.
Programas de Atualização
MBrowse

Exercício 03

Implementar uma MBrowse


com as funções de
cadastro padrões para a
tabela padrão do ERP –
SA2: Fornecedores
Programas de Atualização
MBrowse (1/2)
#include "protheus.ch"

User Function MBrwSA2()

Local cAlias := "SA2"

Private cCadastro := "Cadastro de Fornecedores"


Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})
Programas de Atualização
MBrowse (2/2)

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)
Return
Programas de Atualização
MBrowse
Programas de Atualização
MBrowse - Documentação

DEM - MBrowse

DEF - BrwLegenda

DEF – AxFunctions
Programas de Atualização
MBrowse

Exercício 04

Implementar a legenda
para a MBrowse da tabela
padrão do ERP – SA2:
Fornecedores
Programas de Atualização
MBrowse

 Cores da Legenda
 BR_AMARELO
 BR_AZUL
 BR_BRANCO
 BR_CINZA
 BR_LARANJA
 BR_MARRON
 BR_VERDE
 BR_VERMELHO
 BR_PINK
 BR_PRETO
Programas de Atualização
MBrowse - BrwLegenda
USER FUNCTION BLEGENDA()

Local aLegenda := {}

AADD(aLegenda,{"BR_VERDE" ,"Pessoa Física" })


AADD(aLegenda,{"BR_AMARELO" ,"Pessoa Jurídica"})
AADD(aLegenda,{"BR_LARANJA" ,"Exportação" })
AADD(aLegenda,{"BR_MARRON" ,"Fornecedor Rural"})
AADD(aLegenda,{"BR_PRETO" ,"Não Classificado"})

BrwLegenda(cCadastro, "Legenda", aLegenda)


RETURN
Programas de Atualização
MBrowse

Exercício 05

Implementar uma função de


inclusão específica para
tabela padrão do ERP –
SA2: Fornecedores
Programas de Atualização
MBrowse
USER FUNCTION BInclui(cAlias,nReg,nOpc)

Local cTudoOk := ".T."


AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

RETURN
Programas de Atualização
 Modelo 1 (AxCadastro)
 MBrowse
 MarkBrowse
 Modelo 2
 Modelo 3

Apostila: ADVPL Intermediário – página XX


Programas de Atualização
MarkBrowse

 MarkBrowse

 Funcionalidade de browse que


permite a seleção de itens para
processamentos.

 Estrutura similar a MBrowse


Programas de Atualização
MarkBrowse

 MarkBrowse

 Variáveis Private:

 aRotina: array de botões (funções)

 cCadastro: título da janela


Programas de Atualização
MarkBrowse

 MarkBrowse

 Funções de apoio:

 GetMark: define a marca atual

 IsMark: avalia se um determinado

conteúdo é igual a marca atual


Programas de Atualização
MarkBrowse

 MarkBrowse

 Funções de apoio:

 ThisMark: captura a marca em uso

 ThisInv: indica se foi usado o recurso de

selecionar todos (inversão)


Programas de Atualização
MarkBrowse

 MarkBrowse

 Funções de apoio:

 MarkBRefresh: atualiza exibição na marca do

browse. Utilizada quando a marca é colocada

ou removida em blocos e não pelo clique.


Programas de Atualização
MarkBrowse

 MarkBrow(cAlias,cCpoMarca,cCondMrk,
aCampos, lCondIni, cMarca,cRotInv,
,cFilIni,cFilFim,cRotMarca)

- cAlias: Alias do arquivo a ser exibido

- cCpoMarca: campo que será tratado pela


MarkBrow para amarzenar a marca
Programas de Atualização
MarkBrowse

 MarkBrow(cAlias,cCpoMarca,cCondMrk,
aCampos, lCondIni, cMarca,cRotInv,
,cFilIni, cFilFim,cRotMarca)

- cCondMrk: condição que define se a linha


pode ou não ser marcada + legenda).
- aCampos: array com os campos que serão
exibidos no Browse:
{{<CAMPO>,””, <TITULO>,<PICTURE>}}
Programas de Atualização
MarkBrowse

 MarkBrow(cAlias,cCpoMarca,cCondLeg,
aCampos, lCondIni,cMarca,cRotInv,
,cFilIni,cFilFim,cRotMarca)

- lCondIni: Condição inicial dos registros do


browse (marcados (.T.) ou desmarcados
(.F.)).
- cMarca: caracteres que representam a
marca atual (GetMark())
Programas de Atualização
MarkBrowse

 MarkBrow(cAlias,cCpoMarca,cCondLeg,
aCampos, lCondIni, cMarca,cRotInv,
,cFilIni,cFilFim,cRotMarca)

- cRotInv: rotina executada na inversão das


marcas de todos os registros.
- cRotMarca: rotina que será executada
quando o registro for marcado.
Programas de Atualização
MarkBrowse

Exercício 06

Implementar uma
MarkBrowse com as
funções de cadastro
padrões para a tabela
padrão do ERP – SA2:
Fornecedores
Programas de Atualização
MarkBrowse
USER FUNCTION MkBrwSA2()

Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA2"

Private aRotina := {}
Private cCadastro := "Cadastro de Fornecedores"

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})


AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
Programas de Atualização
MarkBrowse
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})

AADD(aCpos,"A2_OK" )
AADD(aCpos,"A2_FILIAL" )
AADD(aCpos,"A2_COD" )
AADD(aCpos,"A2_LOJA" )
AADD(aCpos,"A2_NOME" )
AADD(aCpos,"A2_TIPO" )

dbSelectArea("SX3")
dbSetOrder(2)
Programas de Atualização
MarkBrowse
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
aAdd(aCampos,{X3_CAMPO,"",Iif(nI==1,"",;
Trim(X3_TITULO)),Trim(X3_PICTURE)})
ENDIF
Next

DbSelectArea(cAlias)
DbSetOrder(1)
MarkBrow(cAlias,aCpos[1],"A2_TIPO == ' '",aCampos,.F.,;
GetMark(,"SA2","A2_OK"))
Return
Programas de Atualização
MarkBrowse
Programas de Atualização
MarkBrowse

Exercício 07

Implementar na
MarkBrowse da tabela
padrão SA2, uma função
para exclusão de múltiplos
itens selecionados no
Browse.
Programas de Atualização
MarkBrowse (1/3)
USER FUNCTION DelLote()

Local cMarca := ThisMark()


Local aRecDel := {}
Local nX := 0
Local lInvert := ThisInv()

DbSelectArea("SA2")
DbGoTop()
Programas de Atualização
MarkBrowse
While SA2->(!EOF())

// IsMark("A2_OK", cMarca, lInverte)


IF SA2->A2_OK == cMarca .AND. !lInvert
AADD(aRecDel,SA2->(Recno()))
ELSEIF SA2->A2_OK != cMarca .AND. lInvert
AADD(aRecDel,SA2->(Recno()))
ENDIF

SA2->(dbSkip())
End
Programas de Atualização
MarkBrowse

Exercício 08

Implementar uma
MarkBrowse para a tabela
SA1, para visualização de
dados de múltiplos
clientes selecionados
Programas de Atualização
MarkBrowse
Programas de Atualização
MarkBrowse - Documentação

DEM - MarkBrow

DEF - MarkFunctions
Programas de Atualização
Revisão

 AxCadastro() ?

 MBrowse() ?

 MarkBrow() ?
Programas de Atualização
 Modelo 1 (AxCadastro)
 MBrowse
 MarkBrowse
 Modelo 2
 Modelo 3

Apostila: ADVPL Intermediário – página XX


Programas de Atualização
Modelo 2

 Modelo 2

Funcionalidade para cadastros


simples, sem muitas opções de
validação e customizações
Programas de Atualização
Modelo 2

 Modelo 2

 Permite a manipulação de arquivos com


estrutura de cabeçalho e itens na mesma
tabela.

Exemplos: SX5, SC7, SC9....


Programas de Atualização
Modelo 2

 Modelo 2
 Estrutura da funcionalidade

 Campos de cabeçalho
 aHeader / aCols
 Campos de rodapé
 aGrid
Programas de Atualização
Modelo 2

 Modelo 2
 Campos de cabeçalho e rodapé

[n,1] = Nome da Variável Ex.:"cCliente"


[n,2] = Array com coordenadas do Get [x,y], em
Windows estão em PIXEL
[n,3] = Titulo do Campo
[n,4] = Picture
[n,5] = Validação
[n,6] = F3
[n,7] = Se campo é editável ou não
Programas de Atualização
Modelo 2

 Modelo 2
 Campos de cabeçalho

AADD(aCab,{
"cCliente" , {15,10} ,
"Cod. do Cliente" ,"@!“,
“U_VldCliente()","SA1",.t.
})
Programas de Atualização
Modelo 2

 Modelo 2
 aGrid

 Contém as coordenadas para


posicionar a GetDados() na Modelo2

 Padrão: {44,5,118,315}
Programas de Atualização
Modelo 2

 Modelo 2
 aHeader

 Array normalmente montado com a


estrutura do SX3.
 Define os campos que poderão ser
editados no aCols.
Programas de Atualização
Modelo 2

 Modelo 2
 aHeader

AADD(aHeader,{
x3_titulo, x3_campo, x3_picture,
x3_tamanho, x3_decimal, x3_valid,
x3_usado, x3_tipo, x3_f3, x3_context
})
Programas de Atualização
Modelo 2

 Modelo 2
 aHeader

 X3Uso(): Função que retorna se o campo


está ou não em uso, para que o mesmo
possa ser incluído no aHeader.
Programas de Atualização
Modelo 2

 Modelo 2
 aCols

 Array dos conteúdos dos campos


especificados no aHeader (estrutura).

 Na inclusão deve ser inicializado com


conteúdos padrões, e nas demais
operações, com os dados da tabela de
referência.
Programas de Atualização
Modelo 2

 Modelo2 (cTitulo, aCab, aRoda, aGrid, nOpc,


cLinhaOk, cTudoOk)

- cTitulo: Título da janela da Modelo 2


- aCab: array contendo os campos do cabeçalho
- aRoda: array contendo os campos do rodapé
Programas de Atualização
Modelo 2

Modelo2 (cTitulo, aCab, aRoda, aGrid, nOpc,


cLinhaOk, cTudoOk)

- aGrid: array com a posição / dimensão da janela da


Modelo2
- nOpc: ação em execução (2,3,4,5)
- cLinhaOk: validação na mudança de linha
- cTudoOk: validação na confirmação da janela
Programas de Atualização
Modelo 2

 Modelo 2
 Dicas

 Utilizar a função CriaVar() para


inicialização das variáveis
 No array aRotina (browses), se não for
passado um nome de função com
parênteses, ela automaticamente recebe
cAlias, nReg e nOpc
Programas de Atualização
Modelo 2

 Modelo 2
 Dicas

 A função CheckSX3() executa as


validações para um <campo>, <conteúdo>
do próprio SX3 correspondente.
Programas de Atualização
Modelo 2

 Modelo 2
 Dicas

 As funções ExistTrigger(), RunTrigger() e


EvalTrigger() podem ser utilizadas para
forçar a execução dos gatilhos dos
campos no aCols, mesmo se o usuário
não passar pelos mesmos. (MATXATU)
Programas de Atualização
Modelo 2

Exercício 09

Implementar uma
Modelo2() para a tabela
padrão do ERP – SX5:
Arquivo de Tabelas
Programas de Atualização
Modelo 2

 Estrutura ?

 Utilização ?

 Cuidados ?
Programas de Atualização
Modelo 2 - Documentação

DEF – Modelo2
Assunto: Modelo2()

HomeWork 1

Implementar as funções
de Visualização,
Alteração e Exclusão
para a Modelo2
desenvolvida para o
SX5.
Projeto: Curso Intermediário

 Objetivos
 Regras
 Definições

Apostila: ADVPL Intermediário – página XX


Projeto: Curso Intermediário
Objetivos

 Complementar o conteúdo do curso e


estimular a prática da programação em
ADVPL.
 Acrescentar um grau de desafio e
avaliar o comprometimento dos alunos
com o treinamento.
Projeto: Curso Intermediário
Regras

 Deverá ser entregue na última aula (fontes


e demais arquivos necessários).
 Será avaliado após o término da aula pelo
instrutor, o qual retornará o resultado da
avaliação por e-mail.
 Pode ser realizado em grupos de até ½ da
turma
 Mesmo peso (pontos) que a prova teórica.
Projeto: Curso Intermediário
Definições

 Desenvolver uma aplicação em ADVPL que:


 Efetue a leitura de um arquivo .TXT com
dados de Fornecedores e grave um arquivo
intermediário no Protheus.
 A partir da seleção dos registros
disponíveis neste arquivo intermediário, o
usuário poderá:
 Imprimir os itens selecionados
 Efetivar os itens selecionados, gerando
o SA2
Projeto: Curso Intermediário
Definições

 Estornar a efetivação dos itens


selecionados, eliminandos os registros do
SA2.
 Excluir os registros selecionados da
tabela intermediária
 Excluir todos os registros importados a
partir de um determinado arquivo texto.
 Visualizar o registro gerado no arquivo
intermediário
 Visualizar o registro gerado no SA2.