Histórico da Página
Exemplo de rotina automática - Inclusão de contrato
A RotinaA rotina CNTA300 foi desenvolvida em MVC
, portantoe para realizar
a inclusão, alteração e exclusão de um contrato, automaticamente,as ações via rotina automática, deve-se fazer uso do modelo de dados.
A Seguir mostraremos um exemplo de como realizar a inclusão de um contrato utilizando o modelo de dados da rotina CNTA300.Para mais detalhes sobre a utilização do MVC, consulte
a pagina: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 |
Informações | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||
|
Exemplos
Expandir | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||
| ||||||||||||||||||||
Bloco de código | ||||||||||||||||||||
| ||||||||||||||||||||
#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'
|
Exemplo de Rotina Automática CNTA300
Características do Requisito
Linha de Produto:
Microsiga Protheus
Segmento:
Serviços
Módulo:
Gestão de Contratos
Rotina:
Rotina | Nome Técnico |
CNTA300 | Manutenção de Contratos |
País(es):
Todos
Banco(s) de Dados:
Todos
Sistema(s) Operacional(is):
Todos
title | Lista de funções úteis |
---|
Define o tipo de revisão que será realizada. São tipos de revisão válidos:
"1" - Aditivo
"2" - Reajuste
"3" - Realinhamento
"4" - Readequação
"5" - Paralisação
"6" - Reinício
"7" - Cláusulas
"8" - Contábil
"9" - Índice
"A" - Fornecedor/Cliente
"B" - Grupo de Aprovação
"C" - Renovação
"D" - Multa/Bonificação
"E" - Caução
"F" - Orçamento de Serviços GS
"G" - Aberta
Retorna o tipo de revisão que está sendo realizada, definida pela função A300STpRev()
Redistribui saldo do cronograma.
CN300Aprov(lAuto)
|
Exemplo de rotina automática - Inclusão de contrato
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a inclusão, alteração e exclusão de um contrato, automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a inclusão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Expandir | ||
---|---|---|
| ||
Para contratos de vendas deve-se carregar o modelo CNTA301 ao invés do CNTA300. |
|
Exemplo de rotina automática - Inclusão de contrato com geração do cronograma financeiro/físico, inclusão de contrato com geração do cronograma financeiro e contábil
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
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
Data prevista para que ocorra a primeira medição(exemplo: )
Taxa de Juros para cálculo do valor presente
|
Expandir | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bloco de código | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#Include 'Protheus.ch'
#INCLUDE "FWMVCDEF.CH"
User Function CN300AUTO()
Local aErro := {}
Local oModel := FWLoadModel("CNTA300") //Carrega o modelo
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
//Exemplo de rotina automática - inclusão de contrato com cronograma financeiro e contábil
#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 |
|
Expandir | |||||||||
---|---|---|---|---|---|---|---|---|---|
| |||||||||
|
Expandir | |||||||||
---|---|---|---|---|---|---|---|---|---|
| |||||||||
|
Expandir | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||
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
|
Expandir | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||
|
Exemplo de rotina automática - Revisão aberta
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a revisão automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a revisão do tipo aberta de um contrato utilizando o modelo de dados da rotina CNTA300.
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
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Bloco de código | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||
#Include "Protheus.CH"
#Include "FWMVCDEF.CH"
User Function CN300AUTO()
Local oModel := Nil
Local cContra := " < NÚMERO_DO_CONTRATO > "
Local cTipRev := "NÚMERO_DA_REVISAO_ABERTA"
Local cJustific := "Justificativa da revisão aberta do contrato"
Local cCond := "CONDICAO_DE_PAGAMENTO"
Local lRet := .F.
//=== Preparação do contrato para revisão =============================================================================================
CN9->(DBSetOrder(1))
If CN9->(DbSeek(xFilial("CN9")+cContra)) //- 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.
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.
|
Exemplo de rotina automática - Revisão de realinhamento
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a revisão automaticamente, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a revisão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Bloco de código | ||
---|---|---|
| ||
#Include 'Protheus.ch'
#Include "FWMVCDEF.CH"
User Function CN300AUTO()
Local oModel := Nil
Local cContra := ' < NÚMERO_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)) //- 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 |
Exemplo de rotina automática - Aprovação de revisão (sem alçadas)
A Rotina CNTA300 foi desenvolvida em MVC, portanto para realizar a aprovação, deve-se fazer uso do modelo de dados. A Seguir mostraremos um exemplo de como realizar a aprovação de uma revisão de um contrato utilizando o modelo de dados da rotina CNTA300.
Para mais detalhes sobre a utilização do MVC, consulte a pagina: http://tdn.totvs.com/display/public/mp/AdvPl+utilizando+MVC
Informações | ||
---|---|---|
| ||
A utilização da aprovação de modo automático está vinculada ao fonte CNTA300 posterior a data de 29/05/2018. |
Bloco de código | ||
---|---|---|
| ||
### Exemplo de aprovação utilizando a função CN300Aprov ###
#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 |
Exemplo de mudança de situação de um contrato
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:
Bloco de código | ||
---|---|---|
| ||
### 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 |
Exemplo de paralisação/reinicio de contrato
Abaixo um exemplo de como é possível paralisar e dar reinicio a um contrato:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bloco de código | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### 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
|
Exemplo de inclusão de contrato de vendas
Para contratos de vendas deve-se carregar o modelo CNTA301 ao invés do CNTA300, abaixo um exemplo:
Bloco de código | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
### Exemplo de inclusão de uma contrato de venda ###
#Include 'Protheus.ch'
#Include "FWMVCDEF.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function CN300AUTO()
Local nRet := 0
|
Exemplo de inclusão de contrato com rateios
|
Expandir | |||||
---|---|---|---|---|---|
| |||||
|
Expandir | ||||||
---|---|---|---|---|---|---|
| ||||||
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:
| ||||||
Bloco de código | ||||||
| ||||||
|
Expandir | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Abaixo um exemplo de como é possível paralisar e dar reinicio a um contrato:
|