- Criado por Philipe dos Santos Pompeu , última alteração em 05 jan, 2023
A rotina CNTA300 foi desenvolvida em MVC e para realizar as ações via rotina automática, deve-se fazer uso do modelo de dados. Para mais detalhes sobre a utilização do MVC, consulte http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC.
A seguir mostraremos alguns exemplos de rotina automática relacionados ao contrato utilizando o modelo de dados da rotina CNTA300.
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | TOTVS Backoffice (Linha Protheus) - Gestão de Contratos (SIGAGCT) |
Função: | CNTA300 - Contratos |
País: | Todos |
Banco(s) de Dados: | Todos |
Sistema(s) Operacional(is): | Todos |
Lista de funções úteis
Função | Utilização | Referente ao botão |
---|---|---|
A300STpRev("< TIPO_DE_REVISÃO >") | Define o tipo de revisão que será realizada. São tipos de revisão válidos: "1" - Aditivo | |
A300GTpRev() | Retorna o tipo de revisão que está sendo realizada, definida pela função A300STpRev() | |
CN300PrCF | Função que processa a inclusão do cronograma financeiro/físico | Incluir cronograma financeiro/físico |
CN300DelCrg() | Exclui cronograma financeiro e físico | Excluir cronograma financeiro/físico |
CN300PrcCC() | Inclui cronograma contábil | Incluir cronograma contábil |
CN300DelCtb() | Exclui cronograma contábil | Excluir cronograma contábil |
CN300RdSld(oModel) | Redistribui saldo do cronograma. | Redistribuir saldo |
CN300AtCrs(oModel) | Atualizar cronograma financeiro e físico | Atualizar cronograma financeiro/físico |
CN300Reaju(oModel) | Realiza reajuste baseado em índices | Executar reajuste |
CN300Aprov(lAuto) | Realiza aprovação de revisão posicionada. | Aprovar revisão |
A300GTMenu | Retorna se está ocorrendo uma operação de inclusão de revisão, aprovação de revisão ou adiantamento | Possíveis retornos:
|
Exemplos
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := FWLoadModel("CNTA300") //Carrega o modelo oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("24/02/2017") ) oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '000000000000069' ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '3' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , '001 ' ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , '01' ) //Planilhas do Contrato oModel:LoadValue( 'CNADETAIL' , 'CNA_CONTRA' , '000000000000069' ) oModel:SetValue( 'CNADETAIL' , 'CNA_NUMERO' , '000001' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , '001 ' ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , '01' ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , '004' ) //Itens da Planilha do Contrato oModel:SetValue( 'CNBDETAIL' , 'CNB_ITEM' , '001' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , '001 ' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PEDTIT' , '1' ) //Cronograma Financeiro SetMVValue("CN300CRG","MV_PAR01",1) SetMVValue("CN300CRG","MV_PAR02",30) SetMVValue("CN300CRG","MV_PAR03",1) SetMVValue("CN300CRG","MV_PAR04","02/2017") SetMVValue("CN300CRG","MV_PAR05", cTod("24/02/2017")) SetMVValue("CN300CRG","MV_PAR06", 1) SetMVValue("CN300CRG","MV_PAR07", " ") SetMVValue("CN300CRG","MV_PAR08", 0) Pergunte("CN300CRG",.F.) CN300PrCF(.T.) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() EndIf Return
Para contratos de vendas deve-se carregar o modelo CNTA301 ao invés do CNTA300.
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() Local nRet := 0 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" ConOut("INICIO TESTE") ExCtrVenda() ConOut("FIM TESTE") RESET ENVIRONMENT Return nRet Static Function ExCtrVenda() Local aErro := {} Local oModel := Nil Local cContrat := "EXCTRVENDA" oModel := FWLoadModel('CNTA301') oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() //Cabeçalho do Contrato oModel:SetValue('CN9MASTER','CN9_NUMERO', cContrat) oModel:SetValue('CN9MASTER','CN9_DTINIC', dDataBase) oModel:SetValue('CN9MASTER','CN9_UNVIGE', '2') oModel:SetValue('CN9MASTER','CN9_VIGE', 6 ) oModel:SetValue('CN9MASTER','CN9_MOEDA', 1) oModel:SetValue('CN9MASTER','CN9_TPCTO', "031") oModel:SetValue('CN9MASTER','CN9_CONDPG', "000") oModel:SetValue('CN9MASTER','CN9_AUTO', '1') //Cliente/Fornecedor do Contrato oModel:SetValue('CNCDETAIL','CNC_CLIENT' , "CN300R") oModel:SetValue('CNCDETAIL','CNC_LOJACL' , "01") //Planilhas do Contrato oModel:SetValue('CNADETAIL','CNA_NUMERO', PadL("1", Len(CNA->CNA_NUMERO),"0")) oModel:SetValue('CNADETAIL','CNA_CLIENT', "CN300R") oModel:SetValue('CNADETAIL','CNA_LOJACL', "01") oModel:SetValue('CNADETAIL','CNA_TIPPLA', "Z0F") //Itens da Planilha do Contrato oModel:SetValue('CNBDETAIL','CNB_ITEM', PadL("1", Len(CNB->CNB_ITEM),"0")) oModel:SetValue('CNBDETAIL','CNB_PRODUT' ,'GCT000000000000000000000000001') oModel:SetValue('CNBDETAIL','CNB_QUANT' ,6) oModel:SetValue('CNBDETAIL','CNB_TS' , '501') If (oModel:VldData()) /*Valida o modelo como um todo*/ oModel:CommitData()//--Grava Contrato EndIf CN9->(DbSetOrder(1)) If(oModel:HasErrorMessage()) aErro := oModel:GetErrorMessage() AEval( aErro, { | x | ConOut( x ) + CRLF } ) ElseIf(CN9->(DbSeek(xFilial("CN9") + cContrat))) ConOut("Contrato gravado com sucesso.") EndIf Return
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() Local nRet := 0 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" ConOut("INICIO TESTE") IncCtrRateio() ConOut("FIM TESTE") RESET ENVIRONMENT Return nRet /*Exemplo de inclusão de contrato com rateios(CNZ)*/ Static Function IncCtrRateio() Local aErro := {} Local oModel := Nil Local oModelCNB := Nil Local oModelCNZ := Nil Local cContrat := "CONTRARATEIO" oModel := FWLoadModel('CNTA300') oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() //Cabeçalho do Contrato oModel:SetValue('CN9MASTER','CN9_NUMERO', cContrat) oModel:SetValue('CN9MASTER','CN9_DTINIC', dDataBase) oModel:SetValue('CN9MASTER','CN9_UNVIGE', '2') oModel:SetValue('CN9MASTER','CN9_VIGE', 6 ) oModel:SetValue('CN9MASTER','CN9_MOEDA', 1) oModel:SetValue('CN9MASTER','CN9_TPCTO', "001") oModel:SetValue('CN9MASTER','CN9_CONDPG', "000") oModel:SetValue('CN9MASTER','CN9_AUTO' , '1') //Cliente/Fornecedor do Contrato oModel:SetValue('CNCDETAIL','CNC_CODIGO', "GCT001") oModel:SetValue('CNCDETAIL','CNC_LOJA' , "01") //Planilhas do Contrato oModel:SetValue('CNADETAIL','CNA_NUMERO' , PadL("1", Len(CNA->CNA_NUMERO),"0")) oModel:SetValue('CNADETAIL','CNA_FORNEC' , oModel:GetValue('CNCDETAIL','CNC_CODIGO')) oModel:SetValue('CNADETAIL','CNA_TIPPLA' , "Z0F") oModelCNB := oModel:GetModel("CNBDETAIL") oModelCNZ := oModel:GetModel("CNZDETAIL") //Primeiro produto oModelCNB:SetValue('CNB_ITEM' , StrZero(1, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' ,'GCT000000000000000000000000001') oModelCNB:SetValue('CNB_QUANT' ,6) oModelCNB:SetValue('CNB_VLUNIT' ,500) //Rateio do primeiro item oModelCNZ:SetValue('CNZ_ITEM' ,StrZero(1, Len(CNZ->CNZ_ITEM))) oModelCNZ:SetValue('CNZ_PERC' ,50) oModelCNZ:SetValue('CNZ_CC' ,'GCT000001') oModelCNZ:AddLine() oModelCNZ:SetValue('CNZ_ITEM' ,StrZero(2, Len(CNZ->CNZ_ITEM))) oModelCNZ:SetValue('CNZ_PERC' ,50) oModelCNZ:SetValue('CNZ_CC' ,'GCT000002') //Segundo produto oModelCNB:AddLine() oModelCNB:SetValue('CNB_ITEM' , StrZero(2, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' ,'GCT000000000000000000000000002') oModelCNB:SetValue('CNB_QUANT' ,6) oModelCNB:SetValue('CNB_VLUNIT' ,500) //Rateio do segundo item oModelCNZ:SetValue('CNZ_ITEM' ,StrZero(1, Len(CNZ->CNZ_ITEM))) oModelCNZ:SetValue('CNZ_PERC' ,70) oModelCNZ:SetValue('CNZ_CC' ,'GCT000003') oModelCNZ:AddLine() oModelCNZ:SetValue('CNZ_ITEM' ,StrZero(2, Len(CNZ->CNZ_ITEM))) oModelCNZ:SetValue('CNZ_PERC' ,30) oModelCNZ:SetValue('CNZ_CC' ,'GCT000005') If (oModel:VldData()) /*Valida o modelo como um todo*/ oModel:CommitData()//--Grava Contrato EndIf CN9->(DbSetOrder(1)) If(oModel:HasErrorMessage()) aErro := oModel:GetErrorMessage() AEval( aErro, { | x | ConOut( x ) } ) ElseIf(CN9->(DbSeek(xFilial("CN9") + cContrat))) ConOut("Contrato gravado com sucesso.") EndIf Return
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" ConOut("INICIO TESTE") ExemploAdt() ConOut("FIM TESTE") RESET ENVIRONMENT Return /*Exemplo da utilização dos adiantamentos sem interface gráfica*/ Static Function ExemploAdt() Local oModel := NIL Local cModelId := "" Local cContra := "CONTRATOADT" Local cChave := xFilial("CN9") + cContra Local aErro := {} Local oMdlCNX := NIL Local cNumero := "" CN9->(DbSetOrder(1)) If CN9->(DbSeek(cChave)) A300lAdian(.T.) //Ativa operação adiantamento cModelId:= CN9->(IIF(CN9_ESPCTR == '1', 'CNTA300', 'CNTA301')) oModel := FwLoadModel(cModelId) oModel:SetOperation(MODEL_OPERATION_UPDATE) If oModel:Activate() oMdlCNX := oModel:GetModel("CNXDETAIL") cNumero := StrZero(oMdlCNX:Length(), GetSx3Cache('CNX_NUMERO','X3_TAMANHO')) oMdlCNX:SetValue('CNX_NUMERO', cNumero) If cModelId == 'CNTA301'//Venda oMdlCNX:SetValue('CNX_CLIENT', oModel:GetValue('CNCDETAIL', 'CNC_CLIENT')) oMdlCNX:SetValue('CNX_LOJACL', oModel:GetValue('CNCDETAIL', 'CNC_LOJACL')) Else//Compra oMdlCNX:SetValue('CNX_FORNEC', oModel:GetValue('CNCDETAIL', 'CNC_CODIGO')) oMdlCNX:SetValue('CNX_LJFORN', oModel:GetValue('CNCDETAIL', 'CNC_LOJA')) EndIf oMdlCNX:SetValue('CNX_VLADT', 1000) oMdlCNX:SetValue('CNX_BANCO', '000')//gatilhará agência(CNX_AGENCI) e conta(CNX_CONTA) If oModel:VldData() oModel:CommitData() EndIf EndIf if oModel:HasErrorMessage() aErro := aClone(oModel:GetErrorMessage()) endif If oModel:IsActive() oModel:DeActivate() EndIf FreeObj(oModel) A300lAdian(.F.) //Desativa operação adiantamento If !Empty(aErro) VarInfo('Erro apresentado:', aErro) EndIf EndIf Return
#INCLUDE "PROTHEUS.CH" #INCLUDE "FWMVCDEF.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() Local nRet := 0 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" ConOut("INICIO TESTE") IncMultPlan() ConOut("FIM TESTE") RESET ENVIRONMENT Return nRet /*Exemplo de inclusão de contrato com múltiplas planilhas*/ Static Function IncMultPlan() Local aErro := {} Local oModel := Nil Local oModelCNB := Nil Local oModelCNA := Nil Local cContrat := "CTRMULTIPLAN" Local nX := 0 Local nQtdPlan := 3 oModel := FWLoadModel('CNTA300') oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() //Cabeçalho do Contrato oModel:SetValue('CN9MASTER','CN9_NUMERO', cContrat) oModel:SetValue('CN9MASTER','CN9_DTINIC', dDataBase) oModel:SetValue('CN9MASTER','CN9_UNVIGE', '2') oModel:SetValue('CN9MASTER','CN9_VIGE', 6 ) oModel:SetValue('CN9MASTER','CN9_MOEDA', 1) oModel:SetValue('CN9MASTER','CN9_TPCTO', "001") oModel:SetValue('CN9MASTER','CN9_CONDPG', "000") oModel:SetValue('CN9MASTER','CN9_AUTO' , '1') //Cliente/Fornecedor do Contrato oModel:SetValue('CNCDETAIL','CNC_CODIGO', "GCT001") oModel:SetValue('CNCDETAIL','CNC_LOJA' , "01") oModelCNB := oModel:GetModel("CNBDETAIL") oModelCNA := oModel:GetModel("CNADETAIL") for nX := 1 to nQtdPlan If !(Empty(oModelCNA:GetValue('CNA_NUMERO'))) oModelCNA:AddLine() EndIf //Planilhas do Contrato oModelCNA:LoadValue('CNA_NUMERO' , StrZero(nX, Len(CNA->CNA_NUMERO))) oModelCNA:SetValue('CNA_FORNEC' , oModel:GetValue('CNCDETAIL','CNC_CODIGO')) oModelCNA:SetValue('CNA_TIPPLA' , "Z0F") //Primeiro produto oModelCNB:SetValue('CNB_ITEM' , StrZero(1, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' ,'GCT000000000000000000000000001') oModelCNB:SetValue('CNB_QUANT' ,6) oModelCNB:SetValue('CNB_VLUNIT' ,500) //Segundo produto oModelCNB:AddLine() oModelCNB:SetValue('CNB_ITEM' , StrZero(2, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' ,'GCT000000000000000000000000002') oModelCNB:SetValue('CNB_QUANT' ,6) oModelCNB:SetValue('CNB_VLUNIT' ,500) next nX If (oModel:VldData()) /*Valida o modelo como um todo*/ oModel:CommitData()//--Grava Contrato EndIf CN9->(DbSetOrder(1)) If(oModel:HasErrorMessage()) aErro := oModel:GetErrorMessage() AEval( aErro, { | x | ConOut( x ) } ) ElseIf(CN9->(DbSeek(xFilial("CN9") + cContrat))) ConOut("Contrato gravado com sucesso.") EndIf Return
A função CN300PrCF(.T.) permite que se gere automaticamente o cronograma financeiro/físico pela rotina automática da mesma maneira que se faz pela tela(pelo botão Outras Ações → Incluir cronograma financeiro/físico).
A função recebe como argumento a variável lógica .T. para efetuar a inclusão do cronograma financeiro/físico
Utilidade | Valor | |
---|---|---|
1 | Periodicidade(tipo numérico) | 1=Mensal, 2=Quinzenal, 3=Diário, 4=Condição Pagamento |
2 | Dias(tipo numérico) | Número de dias para avançar nas parcelas do cronograma |
3 | Último dia do mês?(Tipo numérico) | 1 = SIM ou 2= NÃO Indica se a data prevista de medição deve ser ajustada para o último dia do mês de competência |
4 | Competência de início?(tipo caractere) | Deve ser composta por mês/ano no formato MM/AAAA(Exemplo: 12/2018) |
5 | Data prevista da 1º medição(tipo data) | Data prevista para que ocorra a primeira medição(exemplo: ) |
6 | Quantidade de parcelas(tipo numérico) | Número de parcelas do cronograma |
7 | Condição de Pagamento(tipo caractere) | Código da condição de pagamento que as parcelas do cronograma devem ser geradas |
8 | Taxa de Juros(tipo numérico) | Taxa de Juros para cálculo do valor presente |
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local aErro := {} Local oModel := FWLoadModel("CNTA300") //Carrega o modelo oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("24/02/2017") ) oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '000000000000069' ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '3' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , '001 ' ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , '01' ) //Planilhas do Contrato oModel:LoadValue( 'CNADETAIL' , 'CNA_CONTRA' , '000000000000069' ) oModel:SetValue( 'CNADETAIL' , 'CNA_NUMERO' , '000001' ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , '001 ' ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , '01' ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , '004' ) //Itens da Planilha do Contrato oModel:SetValue( 'CNBDETAIL' , 'CNB_ITEM' , '001' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , '001 ' ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PEDTIT' , '1' ) //Cronograma Financeiro SetMVValue("CN300CRG","MV_PAR01",1) // Periodicidade : 1= Mensal, 2=Quinzenal, 3= Diário, 4= Cond. Pag. SetMVValue("CN300CRG","MV_PAR02",30) // Dia(s)? SetMVValue("CN300CRG","MV_PAR03",1) // Ultimo dia do mês? 1 = sim, 2 = não SetMVValue("CN300CRG","MV_PAR04","02/2018") // Competência Inicio? SetMVValue("CN300CRG","MV_PAR05", cTod("20/02/2018")) // Data prevista 1º Medição SetMVValue("CN300CRG","MV_PAR06", 1) // Quantidade de parcelas SetMVValue("CN300CRG","MV_PAR07", " ") // Condição de Pagamento? SetMVValue("CN300CRG","MV_PAR08", 0) // Taxa de Juros para cálculo do valor presente Pergunte("CN300CRG",.F.) CN300PrCF(.T.) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() else aErro := oModel:GetErrorMessage() TmsMsgErr(aErro) EndIf Return
#Include 'Protheus.ch' #INCLUDE "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := FWLoadModel("CNTA300") //Carrega o modelo Local cFornec1 := "GCT001" oModel:SetOperation(MODEL_OPERATION_INSERT) // Seta operação de inclusão oModel:Activate() // Ativa o Modelo //Cabeçalho do contrato oModel:SetValue( 'CN9MASTER' , 'CN9_NUMERO' , '780000000000088' ) oModel:SetValue( 'CN9MASTER' , 'CN9_DTINIC' , Ctod("20/04/2022") ) oModel:SetValue( 'CN9MASTER' , 'CN9_UNVIGE' , '2' ) oModel:SetValue( 'CN9MASTER' , 'CN9_VIGE' , 12 ) oModel:SetValue( 'CN9MASTER' , 'CN9_MOEDA' , 1 ) oModel:SetValue( 'CN9MASTER' , 'CN9_TPCTO' , '001' ) oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , '000' ) oModel:SetValue( 'CN9MASTER' , 'CN9_AUTO' , '1' ) //Cliente/Fornecedor do Contrato oModel:SetValue( 'CNCDETAIL' , 'CNC_CODIGO' , cFornec1 ) oModel:SetValue( 'CNCDETAIL' , 'CNC_LOJA' , "01" ) //Planilhas do Contrato oModel:SetValue('CNADETAIL','CNA_NUMERO', PadL("1", Len(CNA->CNA_NUMERO),"0") ) oModel:SetValue( 'CNADETAIL' , 'CNA_FORNEC' , cFornec1 ) oModel:SetValue( 'CNADETAIL' , 'CNA_LJFORN' , "01" ) oModel:SetValue( 'CNADETAIL' , 'CNA_TIPPLA' , "Z06" ) //Itens da Planilha do Contrato oModel:SetValue('CNBDETAIL','CNB_ITEM', PadL("1", Len(CNB->CNB_ITEM),"0") ) oModel:SetValue( 'CNBDETAIL' , 'CNB_PRODUT' , "GCT000000000000000000000000001" ) oModel:SetValue( 'CNBDETAIL' , 'CNB_QUANT' , 1 ) oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 1000 ) //cronograma financeiro SetMVValue("CN300CRG","MV_PAR01",1) SetMVValue("CN300CRG","MV_PAR02",30) SetMVValue("CN300CRG","MV_PAR03",1) SetMVValue("CN300CRG","MV_PAR04","04/2022") SetMVValue("CN300CRG","MV_PAR05", cTod("20/04/2022")) SetMVValue("CN300CRG","MV_PAR06", 1) SetMVValue("CN300CRG","MV_PAR07", " ") SetMVValue("CN300CRG","MV_PAR08", 0) Pergunte("CN300CRG",.F.) //Gera Cronograma Financeiro CN300PrCF(.T.) //Cronograma contábil SetMVValue("CN300CTB","MV_PAR01", cTod("20/04/2022")) SetMVValue("CN300CTB","MV_PAR02",1) SetMVValue("CN300CTB","MV_PAR03",'H-CT004-PL01') SetMVValue("CN300CTB","MV_PAR04",1) SetMVValue("CN300CTB","MV_PAR05", 30) Pergunte("CN300CTB",.F.) //Gera Cronograma Contábil CN300PrcCC(.T.) //Validação e Gravação do Modelo If oModel:VldData() oModel:CommitData() EndIf Return
Revisão do Contrato
Atente-se para o fato que apenas a última revisão do contrato pode ser revisada, tal qual ocorre em tela, por isso é imprescindível que se posicione na revisão vigente.
Neste exemplo, é feita a revisão do tipo aberta de um contrato com tipo de planilha semi fixo por agrupador.
Para mais detalhe sobre os tipos de planilha, consulte a página: Tipos de Planilha
#Include "Protheus.CH" #Include "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := Nil Local cContra := " < NÚMERO_DO_CONTRATO > " Local cRevisa := ' < REVISÃO DO CONTRATO >' Local cTipRev := "NÚMERO_DA_REVISAO_ABERTA" Local cJustific := "Justificativa da revisão aberta do contrato" Local cCond := "CONDICAO_DE_PAGAMENTO" Local cLog := "" Local lRet := .F. //=== Preparação do contrato para revisão ============================================================================================= CN9->(DBSetOrder(1)) If CN9->(DbSeek(xFilial("CN9")+cContra+cRevisa)) //- Posicionamento no contrato que será revisado. A300STpRev("G") //- Define o tipo de revisão que será realizado. oModel := FWLoadModel("CNTA300") //- Carrega o modelo de dados do contrato. oModel:SetOperation(MODEL_OPERATION_INSERT) //- Define operação do modelo. Será INSERIDA uma revisão. if (lRet := oModel:Activate(.T.))//- Ativa o modelo. É necessária a utilização do parâmetro como true (.T.) para realizar uma copia. //=== Preenchimento das alterações da revisão. ======================================================================================= //== Cabeçalho oModel:SetValue( 'CN9MASTER' , 'CN9_TIPREV' , cTipRev) //- É obrigatório o preenchimento do tipo de revisão do contrato. oModel:SetValue( 'CN9MASTER' , 'CN9_JUSTIF' , cJustific) //- É obrigatório o preenchimento da justificativa de revisão do contrato. oModel:SetValue( 'CN9MASTER' , 'CN9_CONDPG' , cCond) //- Nesse exemplo, estamos utilizando a revisão aberta para alterar a condição de pagamento oModel:SetValue( 'CXMDETAIL' ,'CXM_VLMAX' , 1000) //- Alterando o valor máximo do agrupador de estoque //== Validação e Gravação do Modelo lRet := oModel:VldData() .And. oModel:CommitData() endif If !lRet .And. oModel:HasErrorMessage() //Operação falhou aEval(oModel:GetErrorMessage(),{|x| cLog+= IIF(ValType(x) == 'C', x, '')+ Chr(13)+Chr(10) }) if !IsBlind() GCTLog(cLog) else ConOut(cLog) endif EndIf EndIf Return lRet
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function CN300AUTO() Local oModel := Nil Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' < REVISÃO DO CONTRATO >' Local cTipRev := ' < TIPO_DE_REVISÃO > ' Local cJustific := 'Justificativa da revisão do contrato' Local lRet := .F. //=== Preparação do contrato para revisão ============================================================================================= CN9->(DBSetOrder(1)) If CN9->(DbSeek(xFilial("CN9")+cContra+cRevisa)) //- Posicionamento no contrato que será revisado. A300STpRev("3") //- Define o tipo de revisão que será realizado. oModel := FWLoadModel("CNTA300") //- Carrega o modelo de dados do contrato. oModel:SetOperation(MODEL_OPERATION_INSERT) //- Define operação do modelo. Será INSERIDA uma revisão. oModel:Activate(.T.) //- Ativa o modelo. É necessária a utilização do parâmetro como true (.T.) para realizar uma copia. //=== Preenchimento das alterações da revisão. ======================================================================================= //== Cabeçalho oModel:SetValue( 'CN9MASTER' , 'CN9_TIPREV' , cTipRev) //- É obrigatório o preenchimento do tipo de revisão do contrato. oModel:SetValue( 'CN9MASTER' , 'CN9_JUSTIF' , cJustific') //- É obrigatório o preenchimento da justificativa de revisão do contrato. //== Qualquer alteração possível na execução manual pode ser automatizada. oModel:SetValue( 'CNBDETAIL' , 'CNB_VLUNIT' , 0.0010) //- Alteração do valor unitário do item. CN300RdSld(oModel) //- Realiza a redistribuição do saldo da planilha //== Validação e Gravação do Modelo lRet := oModel:VldData() .And. oModel:CommitData() EndIf Return lRet
O exemplo abaixo demonstra uma revisão do tipo Aditivo, neste caso em questão, é adicionada na revisão duas planilhas, em que é informado dois produtos em cada e onde é incluído o cronograma financeiro para cada planilha.
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" #INCLUDE "TBICONN.CH" User Function CN300AUTO() Local oModel := Nil Local oModelCN9 := Nil Local oModelCNA := Nil Local oModelCNB := Nil Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' < REVISÃO_DO_CONTRATO >' Local cTipRev := ' < TIPO_DE_REVISÃO > ' Local cProd := ' < SEU_PRODUTO > ' Local cProd2 := ' < SEU_SEGUNDO_PRODUTO >' Local cJustific := 'Justificativa da revisão do contrato' Local nQtdPlan := 2 // Quantidade de planilhas que serão adicionadas Local cTipPlan := '< SEU TIPO DE PLANILHA que permita cronograma financeiro >' Local nX := 0 Local nLinPlan := 0 Local cLog := '' Local lRet := .F. PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" //Preparação do contrato para revisão CN9->(DBSetOrder(1)) If CN9->(DbSeek(xFilial("CN9")+cContra+cRevisa)) //- Posicionamento no contrato que será revisado. A300STpRev("1") //- Tipo de revisão aditivo oModel := FWLoadModel("CNTA300") //- Carrega o modelo de dados do contrato. oModel:SetOperation(MODEL_OPERATION_INSERT) //- Define operação do modelo. Será INSERIDA uma revisão. oModel:Activate(.T.) //- Ativa o modelo. É necessária a utilização do parâmetro como true (.T.) para realizar uma copia. // Preenchimento das alterações da revisão de aditivo. // Cabeçalho oModelCN9:= oModel:GetModel("CN9MASTER") oModelCN9:SetValue( 'CN9_TIPREV' , cTipRev) //- É obrigatório o preenchimento do tipo de revisão do contrato. oModelCN9:SetValue( 'CN9_JUSTIF' , cJustific) //- É obrigatório o preenchimento da justificativa de revisão do contrato. oModelCNA:= oModel:GetModel('CNADETAIL') oModelCNB:= oModel:GetModel('CNBDETAIL') // Adiciona planilha For nX := 1 to nQtdPlan oModelCNA:AddLine() nLinPlan := oModelCNA:GetLine() //Planilhas do Contrato oModelCNA:LoadValue('CNA_NUMERO' , StrZero(nLinPlan, Len(CNA->CNA_NUMERO))) oModelCNA:SetValue('CNA_FORNEC' , oModel:GetValue('CNCDETAIL','CNC_CODIGO')) oModelCNA:SetValue('CNA_TIPPLA' , cTipPlan) //Primeiro produto da planilha adicionada oModelCNB:LoadValue('CNB_ITEM' , StrZero(1, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' , cProd) oModelCNB:SetValue('CNB_QUANT' , 6) oModelCNB:SetValue('CNB_VLUNIT' , 500) //Segundo produto da planilha adicionada oModelCNB:AddLine() oModelCNB:LoadValue('CNB_ITEM' , StrZero(2, Len(CNB->CNB_ITEM))) oModelCNB:SetValue('CNB_PRODUT' , cProd2) oModelCNB:SetValue('CNB_QUANT' , 6) oModelCNB:SetValue('CNB_VLUNIT' , 500) //Adiciona cronograma financeiro as planilhas SetMVValue("CN300CRG","MV_PAR01" , 1) // Periodicidade : 1= Mensal, 2=Quinzenal, 3= Diário, 4= Cond. Pag. SetMVValue("CN300CRG","MV_PAR02" , 30) // Dia(s)? SetMVValue("CN300CRG","MV_PAR03" , 1) // Ultimo dia do mês? 1 = sim, 2 = não SetMVValue("CN300CRG","MV_PAR04" , "05/2024") // Competência Inicio? SetMVValue("CN300CRG","MV_PAR05" , cTod("15/05/2024")) // Data prevista 1º Medição SetMVValue("CN300CRG","MV_PAR06" , 3) // Quantidade de parcelas SetMVValue("CN300CRG","MV_PAR07" , " ") // Condição de Pagamento? SetMVValue("CN300CRG","MV_PAR08" , 0) // Taxa de Juros para cálculo do valor presente //indica que não exibirá a tela do pergunte CN300CRG por se tratar de rotina automática Pergunte("CN300CRG",.F.) //Gera automaticamente o cronograma financeiro/físico pela rotina automática CN300PrCF(.T.) Next nX //Validação e Gravação do Modelo lRet := oModel:VldData() .And. oModel:CommitData() If !lRet .And. oModel:HasErrorMessage() //Operação falhou aEval(oModel:GetErrorMessage(),{|x| cLog+= IIF(ValType(x) == 'C', x, '')+ Chr(13)+Chr(10) }) If !IsBlind() GCTLog(cLog) Else ConOut(cLog) Endif EndIf EndIf Return lRet
#Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function CN300AUTO() Local cFilCont := ' < FILIAL_DO_CONTRATO > ' Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' <NÚMERO_DA_REVISÃO> ' Local nRet := 0 Local cMsgErro := "" Local lRet := .F. //=== Preparação do contrato para revisão ============================================================================================= CN9->(DBSetOrder(1)) If CN9->( DbSeek( cFilCont + cContra + cRevisa )) nRet := CN300Aprov(.T.,,@cMsgErro) //- Função retorna 0 em caso de falha e 1 em caso de sucesso, também retorna a mensagem de erro por referência através do parâmetro cMsgErro. If nRet == 1 lRet := .T. Else VarInfo("","Erro ao aprovar o contrato "+cContra+" "+cMsgErro) EndIf EndIf Return lRet
Para mudar a situação de um contrato não é necessário instanciar o modelo de dados, pois a rotina de mudança de situação(função CN100Situac) carrega sozinha o modelo e realiza as alterações necessários. Abaixo um exemplo:
### Exemplo de alteração de situação utilizando a função CN100Situac ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" /* É possível mudar para as situações conforme abaixo: "01"=Cancelado "03"=Emitido "05"=Vigente "06"=Paralisado "07"=Sol Fina. "08"=Finalizado "11"=Rejeitado */ User Function CN300SITU() Local cFilCont := ' < FILIAL_DO_CONTRATO > ' Local cContra := ' < NÚMERO_DO_CONTRATO > ' Local cRevisa := ' <NÚMERO_DA_REVISÃO> ' CN9->(DBSetOrder(1)) If CN9->( DbSeek( cFilCont + cContra + cRevisa ))//Deve se posicionar no contrato que terá sua situação alterada CN100Situac('CN9',CN9->(Recno()),4, "05",.T.)//Muda a situação do contrato para vigente EndIf Return lRet
Abaixo um exemplo de como é possível paralisar e dar reinicio a um contrato:
### Exemplo de paralisação de uma contrato e seu reinicio ### #Include 'Protheus.ch' #Include "FWMVCDEF.CH" User Function TsRVPar() Local cContra := '[NUMERO DO CONTRATO]' Local cRevisa := Space(3)//Deve ser substituído pela revisão PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CN9T10" dDatabase := CToD("20/04/2020") IncluiRev(cContra, cRevisa,"005") //Inclui revisão de paralisação cRevisa := CnUltRev(cContra, cFilAnt) AprovRev(cContra, cRevisa) //Aprova revisão de paralisação dDatabase := DaySum(dDatabase, 1) IncluiRev(cContra, cRevisa,"006")//Inclui revisão de reinicio cRevisa := CnUltRev(cContra, cFilAnt) AprovRev(cContra, cRevisa) //Aprova revisão RESET ENVIRONMENT Return Nil Static Function IncluiRev(cContra, cRevisao, cTipRev) Local aErro := {} Local oModel:= Nil CN0->(DbSetOrder(1))//CN0_FILIAL+CN0_CODIGO CN9->(DBSetOrder(1)) If (CN9->(DbSeek(xFilial("CN9") + cContra + cRevisao)) .And. CN0->( DbSeek(xFilial("CN0") + cTipRev) )) A300STpRev(CN0->CN0_TIPO) //Define o tipo de revisão a ser realizado oModel := FWLoadModel('CNTA300') //CNTA300 = Compras, pra vendas usar CNTA301 oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate(.T.) oModel:SetValue('CN9MASTER','CN9_TIPREV' , cTipRev) oModel:SetValue('CN9MASTER','CN9_JUSTIF' , "Teste revisão") If CN0->CN0_TIPO == "5" //paralisacao oModel:SetValue('CN9MASTER','CN9_MOTPAR' , "001") oModel:SetValue('CN9MASTER','CN9_DTFIMP' , DaySum(dDatabase, 1)) EndIf lResult := (oModel:VldData() .And. oModel:CommitData()) If (!lResult) aErro := oModel:GetErrorMessage()//Obtem a mensagem de erro Endif oModel:DeActivate() oModel:Destroy() EndIf Return Static Function AprovRev(cContra, cRevisa) Local aArea := CN9->(GetArea()) Local lResult := .F. CN9->(DBSetOrder(1)) if CN9->(DbSeek(xFilial("CN9") + cContra + cRevisa)) lResult := (CN300Aprov(.T.) == 0) endif RestArea(aArea) Return lResult