Histórico da Página
01. CNTA121 - Exemplos de utilização de pontos de entrada MVC
Produto: |
| ||||||||
---|---|---|---|---|---|---|---|---|---|
Linha de Produto: |
| ||||||||
Segmento: |
| ||||||||
Módulo: | Gestão de Contratos | ||||||||
Função: | CNTA121 - Medições | ||||||||
Objetivo | Listar exemplos de implementação dos pontos de entrada MVC |
Dica | ||
---|---|---|
| ||
Para uma lista com o De/Para dos pontos de entrada do CNTA120 para o CNTA121, acessar a página GCT0084_Nova_Medição_CNTA121 |
Informações | ||
---|---|---|
| ||
Caso tenha interesse em utilizar o modelo do CNTA121 em customizações é possível achar diversos exemplos na página Utilizando o modelo do CNTA121 |
Índice:
Índice | ||
---|---|---|
|
02. Impedir o encerramento da medição
Descrição: | |
---|---|
Eventos: | MODELVLDACTIVE |
Programa Fonte: | CNTA121.PRW |
Função: | CN121VlAct |
Parâmetros: |
02. Impedir o encerramento da medição
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN120ENVL | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | MODELVLDACTIVE | ||||||||||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||||||||||
Função: | CN121VlAct | ||||||||||||||||||||
Parâmetros: | Posição | Tipo | Descrição | PARAMIXB[1] | Objeto do tipo MPFormModel | Modelo do CNTA121 antes da sua ativação PARAMIXB[2] | caractere |
| |||||||||||||
Retorno: |
|
Bloco de código | ||||
---|---|---|---|---|
| ||||
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN120ENVL */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := '' Local cIdPonto := '' Local cIdModel := '' If aParam <> NIL oModel := aParam[1] cIdPonto:= aParam[2] cIdModel:= aParam[3] /*O evento de id <MODELVLDACTIVE> será sempre chamado ao iniciar uma operação com o modelo de dados via método Activate do MPFormModel, então para nos certificarmos que a validação só será executada no encerramento tal qual o p.e CN120ENVL, é necessário verificar se a chamada está sendo realizada através da função CN121MedEnc, pra isso utilizamos a função FwIsInCallStack */ If cIdPonto == 'MODELVLDACTIVE' .And. FwIsInCallStack("CN121MedEnc") /*Como o modelo ainda não foi ativado, devemos utilizar as tabelas p/ validação, a única informação que constara em oModel será a operação(obtida pelo método GetOperation), que nesse exemplo sempre será MODEL_OPERATION_UPDATE. */ If (CND->CND_VLTOT > 1000) Help("",1,"CNTA121ENC",,"Nao foi possivel realizar essa operacao",1,1) xRet := .F. EndIf EndIf EndIf Return xRet |
03. Importar rateios para medição(CNZAUTRAT)
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CNZAUTRAT | ||||||
---|---|---|---|---|---|---|---|
Eventos: | BUTTONBAR | ||||||
Programa Fonte: | CNTA121.PRW | ||||||
Função: | Não há | ||||||
Parâmetros: |
|
|
| |||||
Retorno: |
|
---|
|
|
.T. = Prossegue com a operação
.F. = Aborta a operação
|
Bloco de código | ||||
---|---|---|---|---|
| ||||
#INCLUDE "Protheus.ch" #INCLUDE "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação "FWMVCDEF.CH" /*{Protheus.doc} CNTA121() Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CNZAUTRAT */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := '' Local cIdPonto := '' Local cIdModel := '' If aParam <> NIL oModel := aParam[1] cIdPonto:= aParam[2] cIdModel:= aParam[3] If(cIdPonto == 'BUTTONBAR') xRet := { {'Importar Rateios', 'BUDGET', { |x| U_Exemplo(x) }, 'Importa Rateios Excel' } } //Uma opção nova será adicionada ao menu Outras Ações EndIf EndIf Return xRet User Function Exemplo(oView) Local oModel := oView:GetModel() Local aHeadCNZ := {} Local nOpc := oModel:GetOperation() Local oModelCNZ := oModel:GetModel("CNZDETAIL") Local aRetAutRat:= {} Local nX := 0 Local nY := 0 If (nOpc == MODEL_OPERATION_INSERT .Or. nOpc == MODEL_OPERATION_UPDATE) If ExistBlock("CNZAUTRAT") aHeadCNZ := GCTHeadCNZ() aRetAutRat := ExecBlock("CNZAUTRAT",.F.,.F.,{aHeadCNZ, {}, nOpc}) /*Nesse exemplo ele chamará o P.E já existente*/ If (Len(aRetAutRat) > 0) If (oModelCNZ:Length() > 1) for nX := 1 to oModelCNZ:Length() oModelCNZ:GoLine(nX) If !oModelCNZ:IsDeleted() oModelCNZ:DeleteLine() EndIf next nX EndIf for nX := 1 to Len(aRetAutRat) /*Percorrerá os registros e adicionará ao submodelo CNZDETAIL */ If Len(aRetAutRat[nX]) == Len(aHeadCNZ)+1 If !Empty(oModelCNZ:GetValue("CNZ_CC")) oModelCNZ:AddLine() EndIf for nY := 1 to Len(aHeadCNZ) If AllTrim(aHeadCNZ[nY,2]) $ 'CNZ_PERC|CNZ_CC|' /*Adicionar os campos desejados*/ oModelCNZ:SetValue(aHeadCNZ[nY,2], aRetAutRat[nX,nY]) EndIf next nY EndIf next nX EndIf EndIf Else Alert( 'Operacao inválida.' ) EndIf Return |
04. Realizar validações antes do estorno da Medição
Descrição: | Possibilitar ao desenvolvedor realizador validações antes do estorno da medição | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | MODELVLDACTIVE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Função: | CN121Estorn | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
Informações | ||
---|---|---|
| ||
O único evento do MVC chamado no estorno da medição é o MODELVLDACTIVE, pois as demais operações de estorno são feitas sem utilizar o modelo de dados. |
Bloco de código | ||||
---|---|---|---|---|
| ||||
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := ''
Local cIdPonto := ''
Local cIdModel := ''
local cUserCode := "000001"
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= aParam[2]
cIdModel:= aParam[3]
/*O evento de id <MODELVLDACTIVE> será sempre chamado ao iniciar uma operação com o modelo de dados via método Activate do MPFormModel,
então para nos certificarmos que a validação só será executada no estorno da medição é necessário verificar se a chamada está sendo realizada
através da função CN121Estorn, pra isso utilizamos a função FwIsInCallStack
*/
If(cIdPonto == 'MODELVLDACTIVE' .And. FwIsInCallStack("CN121Estorn"))
/*Como o modelo ainda não foi ativado, devemos utilizar as tabelas p/ validação, a única informação que constara em oModel
será a operação(obtida pelo método GetOperation), que nesse exemplo sempre será MODEL_OPERATION_UPDATE.
*/
If (CND->CND_VLTOT > 1000)
Help("",1,"CN121ESTOR",,"Nao foi possível realizar essa operacao",1,1)
xRet := .F.
EndIf
EndIf
//Para negar a ação de estorno por um determinado usuario.
If cIdPonto == "MODELVLDACTIVE" .AND. FwIsInCallStack("CN121Estorn") .AND. cUserCode != RetCodUsr()
msgInfo(I18N("O usuário #1 não possui direitos sobre a transação", {cUserCode}), 'Atenção')
lRet :=.F.
EndIf
EndIf
Return xRet |
05. Carregar dados adicionais na carga dos itens
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita nos pontos de entrada CN130INC, CN130ALT e CN130INC | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | FORMLINEPOS | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130INC, CN130ALT e CN130INC
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := Nil
Local oModelCND := Nil
Local oModelCNE := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local cCampo := ""
Local cAction := ""
Local xValue := 0
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If(cIdModel == 'CNEDETAIL')
oModelCNE := oModel //Qnd cIdModel for CNEDETAIl, oModel será o submodelo(FwFormGridModel) da CNE
If cIdPonto == "FORMPRE"
//
ElseIf cIdPonto == "FORMLINEPRE"
cAction := aParam[5]
cCampo := aParam[6]
If cAction == "SETVALUE"
//
Elseif cAction == "CANSETVALUE"
//
EndIf
ElseIf cIdPonto == "FORMLINEPOS"//Será ativado 1x por linha
oModelCND := oModelCNE:GetModel():GetModel("CNDMASTER")//Obtêm o modelo da CND, com ele é possível verificar valores da CND
/*Abaixo um exemplo de como informar valores para campos(que poderia ser um campo de usuário).*/
If oModelCNE:GetValue("CNE_VLUNIT") > 100
oModelCNE:LoadValue("CNE_CC", "GCT000001")
Else
oModelCNE:LoadValue("CNE_CC", "GCT000002")
EndIf
EndIf
ElseIf(cIdModel == 'CNDMASTER')//Cabeçalho
oModelCND := oModel //Qnd cIdModel for CNDMASTER, oModel será o submodelo(FWFormModel) da CND
If cIdPonto == "FORMPRE"
cAction := aParam[4]
cCampo := aParam[5]
xValue := aParam[6]
If cAction == "SETVALUE"
If cCampo == "CND_CONTRA"//Ao preencher o contrato
oModel:LoadValue("CND_OBS", "Observacao")
EndIf
Elseif cAction == "CANSETVALUE"
//
EndIf
EndIf
EndIf
EndIf
Return xRet |
06. Modificar dados da CND antes da sua gravação(MD130GRV/CN130PGRV)
Descrição: | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | FORMCOMMITTTSPRE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModelCND := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local lIsInsert := .F.
If aParam <> NIL
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If (cIdPonto == "FORMCOMMITTTSPRE" .And. cIdModel == "CNDMASTER")//FORMCOMMITTTSPRE: Antes da gravação da tabela do formulário. Equivalente ao MD130GRV
oModelCND := aParam[1]
lIsInsert := aParam[4]
If lIsInsert .And. AllTrim(oModelCND:GetValue("CND_SITUAC")) == "B"
oModelCND:LoadValue("CND_SITUAC", "L")
EndIf
ElseIf (cIdPonto == "FORMCOMMITTTSPOS" .And. cIdModel == "CNDMASTER")//FORMCOMMITTTSPOS: Após a gravação da tabela do formulário. Equivalente ao CN130PGRV
//Lógica do usuário
EndIf
EndIf
Return xRet |
07. Adicionar botões na tela de medições(CN130BUT)
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130BUT (Inclusão de botão customizado na pagina de edição em medições) | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | BUTTONBAR - Medição | ||||||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||||||
Função: | Não há | ||||||||||||||||
Parâmetros: |
| ||||||||||||||||
Retorno: |
|
Bloco de código | ||||
---|---|---|---|---|
| ||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130BUT
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := ''
Local cIdPonto := ''
Local cIdModel := ''
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= aParam[2]
cIdModel:= aParam[3]
If(cIdPonto == 'BUTTONBAR')
xRet := { {'Botão customizado', 'BUDGET', { |x| U_Exemplo(x) }, 'Botão customizado' } } //Uma opção nova será adicionada ao menu Outras Ações
EndIf
EndIf
Return xRet
User Function Exemplo(oView)
Local oModel := oView:GetModel()
Local nOpc := oModel:GetOperation()
Alert( 'Ação customizada.' )
Return
|
08. Validar exclusão dos itens da medição(C130KDEL)
Descrição: | Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada C130KDEL | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Eventos: | FORMLINEPRE | ||||||||||||
Programa Fonte: | CNTA121.PRW | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada C130KDEL
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModelCNE := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local cAction := ""
If aParam <> NIL
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If (cIdPonto == "FORMLINEPRE" .And. cIdModel == "CNEDETAIL")
oModelCNE := aParam[1]
cAction := aParam[5]
If cAction == "DELETE"
xRet := MsgYesNo("Confirma a exclusão?")
EndIf
EndIf
EndIf
Return xRet |
09. Implementação equivalente CN130TOK
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130TOK
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := Nil
Local cIdPonto := ''
Local cIdModel := ''
If aParam <> NIL
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If (cIdPonto == "MODELPOS")//CN130TOK
oModel := aParam[1]//instância de MPFormModel
if oModel:GetOperation() == MODEL_OPERATION_INSERT
If Empty(oModel:GetValue("CNDMASTER", "CND_OBS"))
Alert("Informe observação.")
xRet := .F.
EndIf
ElseIf oModel:GetOperation() == MODEL_OPERATION_UPDATE
//
ElseIf oModel:GetOperation() == MODEL_OPERATION_DELETE
xRet := MsgYesNo("Confirma exclusão?")
endif
EndIf
EndIf
Return xRet |
10. Implementação equivalente CN130VLIN
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VLIN
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := Nil
Local oModelCNE := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local cCampo := ""
Local cAction := ""
Local lOnCheck := .F.
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If(cIdModel == 'CNEDETAIL')
oModelCNE := oModel //Qnd cIdModel for CNEDETAIl, oModel será o submodelo(FwFormGridModel) da CNE
lOnCheck := FwIsInCallStack("CN121ITEM")//Indica que trata-se da carga dos itens ao marcar a CXN
If cIdPonto == "FORMLINEPRE" .And. !lOnCheck
cAction := aParam[5]
cCampo := aParam[6]
If cAction == "SETVALUE"
//Inserir validação do valor de acordo com <cCampo>
if cCampo == "CNE_QUANT"
if oModelCNE:GetValue(cCampo) > 1
//Apresentar HELP
xRet := .F.
endif
endif
Elseif cAction == "CANSETVALUE"
//Retorna se é possível alterar o campo(WHEN) de <cCampo>, usar com cuidado pois pode impactar performance
EndIf
EndIf
EndIf
EndIf
Return xRet |
11. Implementação equivalente CN130VCK/CN130VAD
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VCK/CN130VAD
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := Nil
Local oModelCZY := Nil
Local cIdPonto := ''
Local cIdModel := ''
Local cCampo := ""
Local cAction := ""
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If(cIdModel == 'CZYDETAIL')//CZY = Tabela de amarração Medição x Adiantamentos(CNX)
oModelCZY := oModel //Qnd cIdModel for CZYDETAIL, oModel será o submodelo(FwFormGridModel) da CZY
If cIdPonto == "FORMLINEPRE"//CN130VCK
cAction := aParam[5]
cCampo := aParam[6]
If cAction == "SETVALUE"
if cCampo == "CZY_VALOR"
if oModelCZY:GetValue(cCampo) > 100
//Apresentar HELP
xRet := .F.
endif
endif
EndIf
ElseIf cIdPonto == "FORMPOS" //CN130VAD
//Realizar validacao
EndIf
EndIf
EndIf
Return xRet |
12. Implementação equivalente CN130VCK/CN130MTINC
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "Protheus.ch"
#INCLUDE "FWMVCDEF.CH"
/*{Protheus.doc} CNTA121()
Possibilitar ao desenvolvedor realizar a mesma operação anteriormente feita no ponto de entrada CN130VCK/CN130MTINC
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local cIdPonto := ''
Local cIdModel := ''
Local oMdlCNQ := Nil
Local oMdlCNR1 := Nil
Local oMdlCNR2 := Nil
If aParam <> NIL
cIdPonto:= AllTrim(aParam[2])
cIdModel:= aParam[3]
If (cIdPonto == "FORMPOS" .And. cIdModel $ 'CNQDETAIL|CNRDETAIL1|CNRDETAIL2|')
If(cIdModel == 'CNQDETAIL') //Descontos
oMdlCNQ := aParam[1]
ElseIf(cIdModel == 'CNRDETAIL1') //Multas/Bonificacoes por Medição
oMdlCNR1 := aParam[1]
ElseIf(cIdModel == 'CNRDETAIL2') //Multas/Bonificacoes por Item
oMdlCNR2 := aParam[1]
EndIf
endif
EndIf
Return xRet |
13. Implementação equivalente CN120RAT
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE 'PROTHEUS.CH'
/*{Protheus.doc} CNTA121()
Possibilita o desenvolvedor manipular o rateio pela tabela CNZ durante o encerramento de uma medição
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := ''
Local cIdPonto := ''
Local cIdModel := ''
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= aParam[2]
cIdModel:= aParam[3]
If cIdPonto == "MODELVLDACTIVE" .And.;
FwIsInCallStack("CN121MedEnc") //No Encerramento --> confere a função na pilha
cChave := CND->(CND_FILIAL+CND_CONTRA+CND_REVISA+CND_NUMMED)
CNZ->(DbSetOrder(2))//CNZ_FILIAL+CNZ_CONTRA+CNZ_REVISA+CNZ_NUMMED+CNZ_ITCONT+CNZ_ITEM
if !( CNZ->(DbSeek(cChave)) )
CNE->(DbSetOrder(5))//CNE_FILIAL+CNE_CONTRA+CNE_REVISA+CNE_NUMMED
cChave := CND->(CND_FILIAL+CND_CONTRA+CND_REVISA+CND_NUMMED)
if CNE->(DbSeek(cChave))
while CNE->(!Eof() .and. CNE_FILIAL+CNE_CONTRA+CNE_REVISA+CNE_NUMMED == cChave)
geraCNZ("GCT000001", "01", 50)//itens por rateio
geraCNZ("GCT000002", "02", 50)//itens por rateio
CNE->(dbSkip())
enddo
endif
endif
EndIf
EndIf
Return xRet
// Função para manipulação por item
Static Function geraCNZ(cCentro, cItem, nPerc)
//Pegando o tamanho total da CNZ_CC
local nTamanho := GetSX3Cache("CNZ_CC", "X3_TAMANHO")
RecLock("CNZ", .T.)
CNZ->CNZ_FILIAL := xFilial("CNZ")
CNZ->CNZ_CONTRA := CND->CND_CONTRA
CNZ->CNZ_REVISA := CND->CND_REVISA
CNZ->CNZ_NUMMED := CND->CND_NUMMED
CNZ->CNZ_FORNEC := "GCT001"
CNZ->CNZ_LJFORN := "01"
CNZ->CNZ_CODPLA := CNE->CNE_NUMERO
CNZ->CNZ_CC := PadR(cCentro, nTamanho)
CNZ->CNZ_ITEM := cItem
CNZ->CNZ_ITCONT := CNE->CNE_ITEM
CNZ->CNZ_PERC := nPerc
//preenche campos
CNZ->(MsUnLock())
Return nil |
14. Geração de multas em planilhas eventuais
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE 'PROTHEUS.CH'
/*{Protheus.doc} CNTA121()
Exemplo de como utilizar o ponto de entrada padrão MVC para gerar multas por item
*/
User Function CNTA121()
Local aParam := PARAMIXB
Local xRet := .T.
Local oModel := ''
Local oMdlCNE:= Nil
Local cIdPonto := ''
Local cIdModel := ''
Local lItem := .T.
If aParam <> NIL
oModel := aParam[1]
cIdPonto:= aParam[2]
cIdModel:= aParam[3]
If cIdPonto == "FORMLINEPOS" .And.;//Validação da linha, é possível utilizar outros eventos se for necessário.
cIdModel == "CNEDETAIL" //submodelo CNE
oMdlCNE := aParam[1] //Submodelo CNEDETAIL
oModel := oMdlCNE:GetModel()//instância do MPFormModel
if CN121RetSt("MEDEVE") //Se for medição eventual
//Incluir uma validação pra verificar se os itens já foram processados anteriormente e prevenir a duplicação das multas etc...
/*lItem=.T. indica que é multa por item e não por planilha*/
CN121CNRIt(oModel, lItem, CN121RetSt('TPMULT')) //Realiza o processamento das multas.
endif
EndIf
EndIf
Return xRet |
15. Validação do contrato. CN120CTU
Bloco de código | ||||
---|---|---|---|---|
| ||||
/*{Protheus.doc} CNTA121() responsável por validar o contrato durante a execução da rotina automática na Medição. Ponto de entrada é executado após a validação de acesso do usuário na Medição do Contrato */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := '' Local cIdPonto := '' Local cIdModel := '' If aParam <> NIL oModel := aParam[1] cIdPonto:= aParam[2] cIdModel:= aParam[3] If cIdPonto == "MODELVLDACTIVE" .And. IsBlind()//não tem interface gráfica conOut("Ponto de Entrada verificado") EndIf EndIf Return xRetanteriormente feita no ponto de entrada CN120ENVL */ User Function CNTA121() Local aParam := PARAMIXB Local xRet := .T. Local oModel := '' Local cIdPonto := '' Local cIdModel := '' If aParam <> NIL oModel := aParam[1] cIdPonto:= aParam[2] cIdModel:= aParam[3] /*O evento de id <MODELVLDACTIVE> será sempre chamado ao iniciar uma operação com o modelo de dados via método Activate do MPFormModel, então para nos certificarmos que a validação só será executada no encerramento tal qual o p.e CN120ENVL, é necessário verificar se a chamada está sendo realizada através da função CN121MedEnc, pra isso utilizamos a função FwIsInCallStack */ If cIdPonto == 'MODELVLDACTIVE' .And. FwIsInCallStack("CN121MedEnc") /*Como o modelo ainda não foi ativado, devemos utilizar as tabelas p/ validação, a única informação que constara em oModel será a operação(obtida pelo método GetOperation), que nesse exemplo sempre será MODEL_OPERATION_UPDATE. */ If (CND->CND_VLTOT > 1000) Help("",1,"CNTA121ENC",,"Nao foi possivel realizar essa operacao",1,1) xRet := .F. EndIf EndIf EndIf Return xRet |