Histórico da Página
...
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | Gestão de Contratos |
Função: | CNTA260 CNTA121 - Medições Automáticas |
Ticket: | 15814349 |
Issue: | DMANMAT02-40860 |
02. SITUAÇÃO/REQUISITO
O sistema não processava duas parcelas distintas que tivessem a mesma competência e vencimento, gerando apenas uma por vezAlgumas customizações possíveis de serem realizadas através do CNTA120, por exemplo a utilização de contratos sem planilhas(CNA), não eram permitidas na nova rotina de medições(CNTA121).
03. SOLUÇÃO
O sistema foi ajustado para considerar o número da parcela(CNF_PARCEL) durante o processamento, dessa forma gerando todas as medições corretamente.
04. DEMAIS INFORMAÇÕES
...
para possibilitar que essas customizações sejam migradas para a nova versão. O ponto de entrada CN300RST também foi modificado para receber parâmetros adicionais.
04. DEMAIS INFORMAÇÕES
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
/*Exemplo customização com tabelas de usuário que substituem as tabelas do padrão.*/
User Function TstInsCtr()
Local cContrato := "CODIGO_DO_CONTRATO"
CN9->(DbSetOrder(1))
If CN9->(DbSeek(xFilial("CN9") + cContrato))
GenZNAxZNB()
IncMedicao()
EndIf
Return Nil
Static Function GenZNAxZNB()
Local cChaveZNA := CN9->(xFilial("ZNA", CN9_FILCTR) + CN9_NUMERO + CN9_REVISA)
Local cChavCNC := CN9->(xFilial("CNC", CN9_FILCTR) + CN9_NUMERO + CN9_REVISA)
Local cChaveZNB := ""
Local cTipo := "Z0F" //Tipo flexivel com itens
Local cCodProd := "GCT001 "
aEval({'ZNA','ZNB'},{|x| CHKFILE(x) })
CNC->(DbSetOrder(1))//CNC_FILIAL+CNC_NUMERO+CNC_REVISA+CNC_CODIGO+CNC_LOJA
ZNA->(DbSetOrder(1))//ZNA_FILIAL+ZNA_CONTRA+ZNA_REVISA+ZNA_NUMERO
if !(ZNA->(DbSeek( cChaveZNA ))) .And. CNC->(DbSeek(cChavCNC))
RecLock("ZNA", .T.)
ZNA->ZNA_FILIAL:= xFilial("ZNA", CN9->CN9_FILCTR)
ZNA->ZNA_CONTRA:= CN9->CN9_NUMERO
ZNA->ZNA_REVISA:= CN9->CN9_REVISA
ZNA->ZNA_NUMERO:= StrZero(1, GetSx3Cache('CNA_NUMERO','X3_TAMANHO'))
ZNA->ZNA_FORNEC:= CNC->CNC_CODIGO
ZNA->ZNA_LOJA := CNC->CNC_LOJA
ZNA->ZNA_TIPO := cTipo
ZNA->(MsUnlock())
cChaveZNB := ZNA->(ZNA_FILIAL+ZNA_CONTRA+ZNA_REVISA+ZNA_NUMERO)
ZNB->(DbSetOrder(1))
If !(ZNB->(DbSeek(cChaveZNB)))
RecLock("ZNB", .T.)
ZNB->ZNB_FILIAL := ZNA->ZNA_FILIAL
ZNB->ZNB_CONTRA := ZNA->ZNA_CONTRA
ZNB->ZNB_REVISA := ZNA->ZNA_REVISA
ZNB->ZNB_NUMERO := ZNA->ZNA_NUMERO
ZNB->ZNB_PRODUT := cCodProd
ZNB->ZNB_VLUNIT := 1000.00
ZNB->(MsUnlock())
EndIf
endif
Return
Static Function IncMedicao()
Local oModel := FwLoadModel("CNTA121")
Local cChaveZNA := CN9->(xFilial("ZNA", CN9_FILCTR) + CN9_NUMERO + CN9_REVISA)
Local cChaveZNB := ""
Local aErros := {}
Local bTrueWhen := FwBuildFeature( STRUCT_FEATURE_WHEN, ".T.")
oModel:SetOperation(MODEL_OPERATION_INSERT)
If oModel:Activate()
oModel:SetValue("CNDMASTER","CND_CONTRA", CN9->CN9_NUMERO)
if oModel:HasErrorMessage()
/*
Ao setar CND_CONTRA, normalmente o sistema carregaria as planilhas(CXN) da CNA,
por conta disso é possível que o erro <CNTA120COMPET> seja apresentado, se isso ocorrer,
limpar o erro do modelo com oModel:GetErrorMessage(.T.).
Outra alternativa seria utilizar o P.E CN120QCP p/ utilizar a ZNA na consulta das competências.
*/
oModel:GetErrorMessage(.T.)
endif
oModelCXN := oModel:GetModel("CXNDETAIL")
oModelCNE := oModel:GetModel("CNEDETAIL")
ZNA->(DbSetOrder(1))//ZNA_FILIAL+ZNA_CONTRA+ZNA_REVISA+ZNA_NUMERO
If (ZNA->(DbSeek( cChaveZNA )))
CNTA300BlMd(oModelCXN, .F.) //Libera p/ edição
oModelCXN:GetStruct():SetProperty('*',MODEL_FIELD_WHEN, bTrueWhen)
ZNB->(DbSetOrder(1))//ZNB_FILIAL+ZNB_CONTRA+ZNB_REVISA+ZNB_NUMERO
While ZNA->(!Eof() .And. ZNA_FILIAL+ZNA_CONTRA+ZNA_REVISA == cChaveZNA)
If !oModelCXN:SeekLine( {{ 'CXN_NUMPLA' , ZNA->ZNA_NUMERO }} )
if !Empty(oModelCXN:GetValue('CXN_NUMPLA'))
oModelCXN:AddLine()
endif
oModelCXN:LoadValue("CXN_FILIAL", xFilial("CXN"))
oModelCXN:LoadValue("CXN_CONTRA", ZNA->ZNA_CONTRA)
oModelCXN:LoadValue("CXN_REVISA", ZNA->ZNA_REVISA)
oModelCXN:LoadValue("CXN_NUMMED", oModel:GetValue("CNDMASTER", "CND_NUMMED"))
oModelCXN:LoadValue("CXN_NUMPLA", ZNA->ZNA_NUMERO)
oModelCXN:LoadValue("CXN_DTINI ", CN9->CN9_DTINIC)
oModelCXN:LoadValue("CXN_VLTOT ", 0)
oModelCXN:LoadValue("CXN_DTFIM ", CN9->CN9_DTFIM)
oModelCXN:LoadValue("CXN_TIPPLA", ZNA->ZNA_TIPO)
oModelCXN:LoadValue("CXN_DESCRI", Posicione( "CNL" , 1 , xFilial("CNL", CN9->CN9_FILCTR) + ZNA->ZNA_TIPO , "CNL_DESCRI" ) )
oModelCXN:LoadValue("CXN_VLSALD", CN9->CN9_SALDO )
oModelCXN:LoadValue("CXN_FORCLI", ZNA->ZNA_FORNEC )
oModelCXN:LoadValue("CXN_LOJA" , ZNA->ZNA_LOJA )
oModelCXN:LoadValue("CXN_VLPREV", 1000.00 )
oModelCXN:LoadValue("CXN_DTVENC", dDataBase )
oModelCXN:LoadValue("CXN_ZERO" , "0" )
if oModelCXN:SetValue("CXN_CHECK", .T.)
CNTA300BlMd(oModelCNE, .F.) //Libera p/ edição
oModelCNE:GetStruct():SetProperty('*',MODEL_FIELD_WHEN,bTrueWhen)
cChaveZNB := ZNA->(ZNA_FILIAL+ZNA_CONTRA+ZNA_REVISA+ZNA_NUMERO)
While ZNB->(!Eof() .And. ZNB_FILIAL+ZNB_CONTRA+ZNB_REVISA+ZNB_NUMERO == cChaveZNB)
if !Empty(oModelCNE:GetValue('CNE_PRODUT'))
oModelCNE:AddLine()
endif
oModelCNE:LoadValue('CNE_CONTRA',ZNB->ZNB_CONTRA)
oModelCNE:LoadValue('CNE_REVISA',ZNB->ZNB_REVISA)
oModelCNE:LoadValue('CNE_NUMERO',ZNB->ZNB_NUMERO)
oModelCNE:LoadValue('CNE_ITEM' ,StrZero(1, GetSx3Cache('CNB_ITEM','X3_TAMANHO')))
oModelCNE:LoadValue('CNE_DTENT' ,dDataBase)
oModelCNE:LoadValue('CNE_QTAMED',1)
oModelCNE:LoadValue('CNE_SDAMED',1)
oModelCNE:LoadValue('CNE_QTDSOL',1)
oModelCNE:SetValue('CNE_PRODUT' , ZNB->ZNB_PRODUT)
oModelCNE:LoadValue('CNE_DESCRI', 'XPTO')
oModelCNE:SetValue('CNE_QUANT' , 1)
oModelCNE:SetValue('CNE_VLUNIT' , ZNB->ZNB_VLUNIT)
ZNB->(DbSkip())
endDo
endif
EndIf
ZNA->(DbSkip())
endDo
if oModel:VldData()
oModel:CommitData()
endif
EndIf
EndIf
If oModel:HasErrorMessage()
aErros := oModel:GetErrorMessage()
EndIf
If oModel:IsActive()
oModel:DeActivate()
FreeObj(oModel)
EndIf
Return |
05. ASSUNTOS RELACIONADOS
- CN300RST - Modificar verificação de propriedade do contrato
- CN120QCP - Modificar a consulta de validação de competência
HTML |
---|
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } .aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { background: #FF9900; !important } .menu-item.active-tab { border-bottom: none !important; } </style> |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas