01. DADOS GERAIS
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | Gestão de Contratos |
Função: | CNTA121 - Medições |
Ticket: | 15814349 |
Issue: | DMANMAT02-40860 |
02. SITUAÇÃO/REQUISITO
Algumas 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 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
Exemplo
#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
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas