Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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


Bloco de código
themeEclipse
#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'				)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGREJ'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGCAU'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_ASSINA'	, Ctod("24/02/2017")	)

//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'				)
oModel:SetValue(	'CNADETAIL' 	, 'CNA_FLREAJ'	, '2'					)

//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

oModel:GetModel('CNFDETAIL'):SetNoInserLine(.F.)
oModel:GetModel('CNFDETAIL'):SetNoUpdateLine(.F.)

oModel:LoadValue( 'CNFDETAIL'	, 'CNF_NUMERO' 	, '000071'				)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PARCEL' 	, '01'					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_COMPET'	, '02/2017'			)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLPREV"	, 500					)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLREAL"	, 0						)
oModel:SetValue( 'CNFDETAIL'	, "CNF_SALDO"		, 500					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PRUMED'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_DTVENC'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_TXMOED'	, 1						)

oModel:GetModel('CNFDETAIL'):AddLine()

oModel:LoadValue( 'CNFDETAIL'	, 'CNF_NUMERO' 	, '000071'				)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PARCEL' 	, '02'					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_COMPET'	, '02/2017'			)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLPREV"	, 500					)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLREAL"	, 0						)
oModel:SetValue( 'CNFDETAIL'	, "CNF_SALDO"		, 500					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PRUMED'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_DTVENC'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_TXMOED'	, 1						)

//Validação e Gravação do Modelo
If oModel:VldData() 
	oModel:CommitData() 
EndIf

Return

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

Informações
titleLista de funções úteis
FunçãoUtilizaçãoReferente 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
"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


A300GTpRev()

Retorna o tipo de revisão que está sendo realizada, definida pela função A300STpRev()


CN300AddCrg(aPergunte)Inclui cronograma financeiro e físicoIncluir cronograma financeiro/físico
CN300DelCrg()Exclui cronograma financeiro e físicoExcluir cronograma financeiro/físico
CN300PrcCC()Inclui cronograma contábilIncluir cronograma contábil
CN300DelCtb()Exclui cronograma contábilExcluir cronograma contábil
CN300RdSld(oModel)

Redistribui saldo do cronograma.

Redistribuir Saldo
CN300AtCrs(oModel)Atualizar cronograma financeiro e físicoAtualizar cronograma financeiro/físico
CN300Reaju(oModel)Realiza reajuste baseado em indicesExecutar reajuste
CN300Aprov(lAuto)
Realiza aprovação de revisão posicionada.Aprovar Revisão

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


Bloco de código
themeEclipse
#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'				)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGREJ'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGCAU'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_ASSINA'	, Ctod("24/02/2017")	)

//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'				)
oModel:SetValue(	'CNADETAIL' 	, 'CNA_FLREAJ'	, '2'					)

//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

oModel:GetModel('CNFDETAIL'):SetNoInserLine(.F.)
oModel:GetModel('CNFDETAIL'):SetNoUpdateLine(.F.)

oModel:LoadValue( 'CNFDETAIL'	, 'CNF_NUMERO' 	, '000071'				)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PARCEL' 	, '01'					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_COMPET'	, '02/2017'			)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLPREV"	, 500					)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLREAL"	, 0						)
oModel:SetValue( 'CNFDETAIL'	, "CNF_SALDO"		, 500					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PRUMED'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_DTVENC'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_TXMOED'	, 1						)

oModel:GetModel('CNFDETAIL'):AddLine()

oModel:LoadValue( 'CNFDETAIL'	, 'CNF_NUMERO' 	, '000071'				)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PARCEL' 	, '02'					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_COMPET'	, '02/2017'			)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLPREV"	, 500					)
oModel:SetValue( 'CNFDETAIL'	, "CNF_VLREAL"	, 0						)
oModel:SetValue( 'CNFDETAIL'	, "CNF_SALDO"		, 500					)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_PRUMED'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_DTVENC'	, Ctod("24/02/2017")	)
oModel:SetValue( 'CNFDETAIL'	, 'CNF_TXMOED'	, 1						)

//Validação e Gravação do Modelo
If oModel:VldData() 
	oModel:CommitData() 
EndIf

Return

Exemplo de rotina automática - Inclusão de contrato com geração do cronograma financeiro/físico


A função CN300AddCrg(aPergunte) 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 o vetor aPergunte, que é composto conforme abaixo:


UtilidadeValor
1Periodicidade(tipo numérico)1=Mensal, 2=Quinzenal, 3=Diário, 4=Condição Pagamento
2Dias(tipo numérico) Número de dias para avançar nas parcelas do cronograma
3Último dia do mês?(tipo lógico)

.T. = SIM ou .F.=NÃO

Indica se a data prevista de medição deve ser ajustada para o último dia do mês de competência

4Competência de início?(tipo caractere)Deve ser composta por mês/ano no formato MM/AAAA(Exemplo: 12/2018)
5Data prevista da 1º medição(tipo data)

Data prevista para que ocorra a primeira medição(exemplo:  )

6Quantidade de parcelas(tipo numérico)Número de parcelas do cronograma
7Condição de Pagamento(tipo caractere)Código da condição de pagamento que as parcelas do cronograma devem ser geradas
8Variável do tipo lógico

Variável de controle interno, deve ser composta conforma abaixo:

Se for Periodicidade mensal e Ultimo dia do Mês=SIM, então seu valor deve ser .T., caso contrario deve ser .F.

Bloco de código
themeEclipse
#Include 'Protheus.ch'
#INCLUDE "FWMVCDEF.CH"
User Function CN300AUTO()
Local aPergunte := {}
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'				)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGREJ'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_FLGCAU'	, '2'					)
oModel:SetValue( 'CN9MASTER'	, 'CN9_ASSINA'	, Ctod("24/02/2017")	)

//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'				)
oModel:SetValue(	'CNADETAIL' 	, 'CNA_FLREAJ'	, '2'					)

//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
aAdd(aPergunte,1)//Periodicidade: 1=Mensal, 2=Quinzenal, 3=Diario, 4=Cond. Pag.
aAdd(aPergunte,30)//Dia(s)?
aAdd(aPergunte,.T.)//Ultimo dia do mes? .T.=SIM, .F.=NAO
aAdd(aPergunte,"12/2018")//Competencia de inicio?
aAdd(aPergunte,CToD("20/12/2018"))//Data prevista 1º medicao
aAdd(aPergunte,12)//Quantidade de parcelas
aAdd(aPergunte,"   ")//Condicao de Pagamento?
aAdd(aPergunte,.F.)//Se for mensal(Periodicidade: 1=Mensal) e Ultimo dia do Mes=SIM, entao deve ser .T., caso contrario .F.
	
//Gera cronograma de forma automatica
CN300AddCrg(aPergunte)

//Validação e Gravação do Modelo
If oModel:VldData() 
	oModel:CommitData()
else
	aErro := oModel:GetErrorMessage()
	TmsMsgErr(aErro)
EndIf

Return

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
themeEclipse
#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
titleImportante

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
themeEclipse
### 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 

//=== Preparação do contrato para revisão =============================================================================================
CN9->(DBSetOrder(1))
If CN9->( DbSeek( cFilCont + cContra + cRevisa ))
	nRet := CN300Aprov(.T.) 		//- Função retorna 0 em caso de falha e 1 em caso de sucesso.
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
themeEclipse
### 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> '
Private aRetAuto := {"05"} //É necessário a declaração dessa variável, um vetor com a situação desejada

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