Árvore de páginas

Versões comparadas

Chave

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

CONTEÚDO

Indice_btn

01. VISÃO GERAL

Objetivo desse documento é exemplificar a utilização do ExecAuto da nova rotina de MediçõesDocumentos(CNTA121CNTA171). 

...

...

Para alternativas para os pontos de entrada, acessar a página CNTA121 - Exemplos pontos de entrada_MVC

Para uma lista com o De/Para dos pontos de entrada do CNTA120 para o CNTA121, acessar a página GCT0084_Nova_Medição_CNTA121

...

02. Inclusão de um novo documento

Bloco de código
titleExemplo medição inclusão de um contrato fixo com itensnovo documento
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de inclusão de um novo documento*/
User Function CNT121_002Exemplo001()	
	    Local oModel	    := Nil
	Local cCodCTR	NIL
    Local oMdlCNK   := "CNTA121EXEMP002"
	Local cNumMed	Nil
    Local oMdlCXR   := ""
	Local aMsgDeErroNil
    Local cContra   := {}
	Local lRet		:= .F.	
	
	CN9->(DbSetOrder(1))
		
	If CN9->(DbSeek("TREINAMENTO1954"
    Local cChave    := xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		oModelcContra
    Local aErro     := {}
    Local cNumero   := FWLoadModel("CNTA121")
		
		oModel:SetOperation(MODEL_OPERATION_INSERT)
		If(oModel:CanActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)			
			oModel:GetModel('CNEDETAIL'):GoLine(1)
			oModel:SetValue( 'CNEDETAIL' , 'CNE_QUANT' 	, 1)			
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

03. Medição sem itens

Bloco de código
titleExemplo medição sem itens
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_001()	
	Local oModel	:= Nil
	Local cCodCTR	:= "CNTA121EXEMP001"
	Local cNumMed	:= ""
	Local aMsgDeErro:= {}
	Local lRet		:= .F.	
	
	CN9->(DbSetOrder(1))
		
	If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		oModel := FWLoadModel("CNTA121")
		
		oModel:SetOperation(MODEL_OPERATION_INSERT)
		If(oModel:CanActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)
			
			oModel:GetModel('CNEDETAIL'):LoadValue('CNE_ITEM', PadL("1", CNE->(Len(CNE_ITEM)), "0"))//Adiciona um item a planilha			
			oModel:SetValue( 'CNEDETAIL' , 'CNE_PRODUT'	, 'GCT000000000000000000000000002')
			oModel:SetValue( 'CNEDETAIL' , 'CNE_QUANT' 	, 1000)
			oModel:SetValue( 'CNEDETAIL' , 'CNE_VLUNIT' , 1 )
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

04. Medição com rateio pré-configurado

Bloco de código
titleMedição com rateio pré-configurado
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_003()	
	Local oModel	:= Nil
	Local cCodCTR	:= "CNTA121EXEMP003"
	Local cNumMed	:= ""
	Local aMsgDeErro:= {}
	Local lRet		:= .F.
	Local aRatPreCfg:= {}
	
	CN9->(DbSetOrder(1))
		
	If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		oModel := FWLoadModel("CNTA121")
		
		oModel:SetOperation(MODEL_OPERATION_INSERT)
		If(oModel:CanActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)			
			oModel:GetModel('CNEDETAIL'):GoLine(1)
			oModel:SetValue( 'CNEDETAIL' , 'CNE_QUANT' 	, 1)
			
			aAdd(aRatPreCfg,{'CTJ_FILIAL', xFilial("CTJ")})
			aAdd(aRatPreCfg,{'CTJ_RATEIO', 'GCT001'})
		
			CN121RatP(oModel, Nil, aRatPreCfg)//Importa rateio pre-configurado
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

05. Medição com rateio

Bloco de código
titleMedição com rateio manual
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_004()	
	Local oModel	:= Nil
	Local cCodCTR	:= "CNTA121EXEMP004"
	Local cNumMed	:= ""
	Local aMsgDeErro:= {}
	Local lRet		:= .F.
	
	CN9->(DbSetOrder(1))
		
	If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		oModel := FWLoadModel("CNTA121")
		
		oModel:SetOperation(MODEL_OPERATION_INSERT)
		If(oModel:CanActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)			
			
			oModel:GetModel('CNEDETAIL'):GoLine(1)
			oModel:SetValue( 'CNEDETAIL' , 'CNE_QUANT' 	, 1)

			/*Os rateios abaixo serao incluidos pra corrente do modelo da CNE*/
			oModel:SetValue("CNZDETAIL","CNZ_PERC"	, 50)
			oModel:SetValue("CNZDETAIL","CNZ_CC"		, '000000001')
			oModel:SetValue("CNZDETAIL","CNZ_CONTA"	, '01234')
			oModel:SetValue("CNZDETAIL","CNZ_ITEMCT"	, '0000000')
			oModel:SetValue("CNZDETAIL","CNZ_CLVL"	, '000001')
		
			oModel:GetModel('CNZDETAIL'):AddLine()
			oModel:SetValue("CNZDETAIL","CNZ_ITEM"	, '02')
			oModel:SetValue("CNZDETAIL","CNZ_PERC"	, 50)
			oModel:SetValue("CNZDETAIL","CNZ_CC"	, '000000002')
			oModel:SetValue("CNZDETAIL","CNZ_CONTA"	, '01235')
			oModel:SetValue("CNZDETAIL","CNZ_ITEMCT", '00001')
			oModel:SetValue("CNZDETAIL","CNZ_CLVL"	, '000002')
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

06. Medição configurada para ignorar produtos bloqueados

Bloco de código
titleIgnorando os produtos bloqueados da planilha
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_005()
	Local oModel	:= Nil
	Local cCodCTR	:= "CNTA121EXEMP005"
	Local cNumMed	:= ""
	Local aMsgDeErro:= {}
	Local lRet		:= .F.
	
	CN9->(DbSetOrder(1))
		
	If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		oModel := FWLoadModel("CNTA121")
		
		oModel:SetOperation(MODEL_OPERATION_INSERT)
		If(oModel:CanActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_IGITEM", .T.)//Configura para ignorar produtos bloqueados
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)			
			
			oModel:GetModel('CNEDETAIL'):GoLine(1)
			oModel:SetValue( 'CNEDETAIL' , 'CNE_QUANT' 	, 1)
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

07. Obtendo a lista de competências

Bloco de código
titleObtendo a lista de competências de um contrato
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_006()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP006"
	Local aCompets	:= {}
	Local nCompet	:= 0
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F.
     
    CN9->(DbSetOrder(1))
         
    If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão

		/* <CtrCompets> retorna a lista de competências possíveis para o contrato, deve-se estar posicionado no contrato(CN9).
			O array é composto pelas competências no formato MM/AAAA, exemplo:
			{
				'05/2020',
				'06/2020',
				'07/2020'
			}
			O campo <CND_RCCOMP> recebe o índice desse vetor correspondente a competência à ser medida, porém o índice deve ser convertido para caractere.
			No exemplo acima, caso se deseje medir a competência '05/2020', cujo índice no vetor é um(1), deve-se passar o valor '1'(caractere) para o campo <CND_RCCOMP>.
		*/
		aCompets := CtrCompets()

		nCompet := aScan(aCompets, {|x| AllTrim(x) == '05/2020' })		

        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_INSERT)
        If(oModel:CanActivate())           
            oModel:Activate()
            oModel:SetValue("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)

			
            oModel:SetValue("CNDMASTER","CND_RCCOMP"    , cValToChar(nCompet))//Selecionar competência
            
            oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)//Marcar a planilha(nesse caso apenas uma)
             
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
         
        If(oModel:HasErrorMessage())
            aMsgDeErro := oModel:GetErrorMessage()
        Else
            cNumMed := CND->CND_NUMMED          
            oModel:DeActivate()        
            lRet := CN121Encerr(.T.) //Realiza o encerramento da medição			
        EndIf
    EndIf  
Return lRet

08. Estorno de uma medição

Bloco de código
titleEstornando uma medição
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_007()
    Local cCodCTR   := "CNTA121EXEMP007"
    Local cMedErro  := ""
    Local lRet      := .F. 
     
    CND->(DbSetOrder(1))
         
    If CND->(DbSeek(xFilial("CND") + cCodCTR))//Posicionar na CND para realizar o estorno
        CN121Estorn(.T.,/*lAprRev*/, @cMedErro)
        lRet := Empty(cMedErro) //Vazio caso nao ocorra nenhum erro
    EndIf  
Return lRet

09. Exclusão de uma medição

Bloco de código
titleExcluindo uma medição
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_008()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP008"
    Local aMsgDeErro:= {}
    Local lRet      := .F.
     
    CND->(DbSetOrder(1))
         
    If CND->(DbSeek(xFilial("CND") + cCodCTR))//Posicionar na CND para realizar a exclusão
        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_DELETE)
        If(oModel:CanActivate())           
            oModel:Activate()
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
        
        lRet := !(oModel:HasErrorMessage())
        If(!lRet)
            aMsgDeErro := oModel:GetErrorMessage()
        EndIf
    EndIf  
Return lRet

10. Inclusão medição com multa/bonificação por planilha

Bloco de código
titleInclusão medição com multa/bonificação por planilha
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_009()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP009"
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F. 
     
    CN9->(DbSetOrder(1))
         
    If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_INSERT)
        If(oModel:CanActivate())           
            oModel:Activate()
            oModel:SetValue("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)
            oModel:SetValue("CNDMASTER","CND_RCCOMP"    ,"1")//Selecionar competência
             
            oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)//Marcar a planilha(nesse caso apenas uma)
            
            oModel:GetModel('CNRDETAIL1'):GoLine(1)//<CNRDETAIL1> é o submodelo das multas da planilha(CXN)
            oModel:SetValue("CNRDETAIL1","CNR_TIPO"     , '1')//1=Multa/2=Bonificação
            oModel:SetValue("CNRDETAIL1","CNR_DESCRI"   , 'TESTE MULTA')
            oModel:SetValue("CNRDETAIL1","CNR_VALOR"    , 100)
            
            oModel:GetModel('CNRDETAIL1'):AddLine()            
            oModel:SetValue("CNRDETAIL1","CNR_TIPO"     , '2')//1=Multa/2=Bonificação
            oModel:SetValue("CNRDETAIL1","CNR_DESCRI"   , 'TESTE BONIFICACAO')
            oModel:SetValue("CNRDETAIL1","CNR_VALOR"    , 101)
             
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
         
        If(oModel:HasErrorMessage())
            aMsgDeErro := oModel:GetErrorMessage()
        Else
            cNumMed := CND->CND_NUMMED          
            oModel:DeActivate()        
            lRet := CN121Encerr(.T.) //Realiza o encerramento da medição                   
        EndIf
    EndIf  
Return lRet

11. Inclusão medição com multa/bonificação por item da planilha

Bloco de código
titleInclusão medição com multa/bonificação por item da planilha
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_010()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP010"
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F. 
     
    CN9->(DbSetOrder(1))
         
    If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_INSERT)
        If(oModel:CanActivate())           
            oModel:Activate()
            oModel:SetValue("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)
            oModel:SetValue("CNDMASTER","CND_RCCOMP"    ,"1")//Selecionar competência
             
            oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)//Marcar a planilha(nesse caso apenas uma)
            
            oModel:GetModel('CNEDETAIL'):GoLine(1)//Posiciona no item da medicao desejada

            oModel:GetModel('CNRDETAIL2'):GoLine(1)//<CNRDETAIL2> é o submodelo das multas dos itens da planilha(CNE)
            oModel:SetValue("CNRDETAIL2","CNR_TIPO"     , '1')//1=Multa/2=Bonificação
            oModel:SetValue("CNRDETAIL2","CNR_DESCRI"   , 'TESTE MULTA')
            oModel:SetValue("CNRDETAIL2","CNR_VALOR"    , 100)
            
            oModel:GetModel('CNRDETAIL2'):AddLine()            
            oModel:SetValue("CNRDETAIL2","CNR_TIPO"     , '2')//1=Multa/2=Bonificação
            oModel:SetValue("CNRDETAIL2","CNR_DESCRI"   , 'TESTE BONIFICACAO')
            oModel:SetValue("CNRDETAIL2","CNR_VALOR"    , 101)
             
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
         
        If(oModel:HasErrorMessage())
            aMsgDeErro := oModel:GetErrorMessage()
        Else
            cNumMed := CND->CND_NUMMED          
            oModel:DeActivate()        
            lRet := CN121Encerr(.T.) //Realiza o encerramento da medição                   
        EndIf
    EndIf  
Return lRet

12. Inclusão medição marcando todas as planilhas

Bloco de código
titleInclusão medição marcando todas as planilhas
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_011()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP011"
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F. 
	Local nX		:= 0
     
    CN9->(DbSetOrder(1))
         
    If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_INSERT)
        If(oModel:CanActivate())           
            oModel:Activate()
            oModel:SetValue("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)
            oModel:SetValue("CNDMASTER","CND_RCCOMP"    ,"1")//Selecionar competência
            
			For nX := 1 To oModel:GetModel("CXNDETAIL"):Length() //Marca todas as planilhas
				oModel:GetModel("CXNDETAIL"):GoLine(nX)
            	oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)
			Next nX
                       
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
         
        If(oModel:HasErrorMessage())
            aMsgDeErro := oModel:GetErrorMessage()
        Else
            cNumMed := CND->CND_NUMMED          
            oModel:DeActivate()        
            lRet := CN121Encerr(.T.) //Realiza o encerramento da medição                   
        EndIf
    EndIf  
Return lRet

13. Inclusão medição marcando planilhas específicas

Bloco de código
titleInclusão medição marcando planilhas específicas
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_012()
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP012"
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F. 
     
    CN9->(DbSetOrder(1))
         
    If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
        oModel := FWLoadModel("CNTA121")
         
        oModel:SetOperation(MODEL_OPERATION_INSERT)
        If(oModel:CanActivate())           
            oModel:Activate()
            oModel:SetValue("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)
            oModel:SetValue("CNDMASTER","CND_RCCOMP"    ,"1")//Selecionar competência
			
			//Marca planilha de acordo com a linha informada
			oModel:GetModel("CXNDETAIL"):GoLine(1) //Marca planilha 000001
            oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)
			oModel:GetModel("CXNDETAIL"):GoLine(2) //Marca planilha 000002
            oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)

            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf
        EndIf
         
        If(oModel:HasErrorMessage())
            aMsgDeErro := oModel:GetErrorMessage()
        Else
            cNumMed := CND->CND_NUMMED          
            oModel:DeActivate()        
            lRet := CN121Encerr(.T.) //Realiza o encerramento da medição       
    CN9->(DbSetOrder(1))
    if CN9->(DbSeek(cChave))
        oModel := FwLoadModel("CNTA171")
        oModel:SetOperation(MODEL_OPERATION_INSERT)

        if oModel:Activate()
            oMdlCNK := oModel:GetModel("CNKMASTER")

            oMdlCNK:SetValue("CNK_DESCRI"	, "DOC 001 - INCLUSAO")
            oMdlCNK:SetValue("CNK_CONTRA"	, CN9->CN9_NUMERO)
            oMdlCNK:SetValue("CNK_TPDOC"	, "001")
            oMdlCNK:SetValue("CNK_DTEMIS"	, dDatabase)
            oMdlCNK:SetValue("CNK_DTVALI"	, dDatabase+30)
            oMdlCNK:SetValue("CNK_OBS"	    , "Exemplo inclusão")

            if AliasInDic('CXR')
                oMdlCXR := oModel:GetModel("CXRDETAIL")
                cNumero := StrZero(oMdlCXR:Length(), GetSx3Cache('CXR_ITEM','X3_TAMANHO'))
                oMdlCXR:SetValue("CXR_ITEM"	, cNumero)
                oMdlCXR:SetValue("CXR_NOME"	, "Responsavel XPTO")
                oMdlCXR:SetValue("CXR_EMAIL", "[email protected]")

                oMdlCXR:AddLine()
                oMdlCXR:SetValue("CXR_ITEM"	, Soma1(cNumero))
                oMdlCXR:SetValue("CXR_NOME"	, "Auxiliar XPTO")
                oMdlCXR:SetValue("CXR_EMAIL", "[email protected]")

            endif
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

        If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf
    EndIf  endif

Return lRet

...

03. Alteração de um documento

Bloco de código
firstline1
titleExemplo Inclusão medição com TES informada no itemAlteração de um documento
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

 "FWMVCDEF.CH"  

/*Exemplo de alteração de um documento*/ 
User Function CNT121_013Exemplo002()	
	    Local oModel	    := NIL
    Local oMdlCNK   := Nil
    Local oMdlCXR   := Nil
	Local cCodCTR	    Local cContra   := "CNTA121EXEMP013TREINAMENTO1954"
	Local cNumMed	    Local cChave    := xFilial("CNK"
	Local aMsgDeErro) + cContra
    Local aErro     := {}
	Local lRet		:= .F.	
	
	CN9
    CNK->(DbSetOrder(13))
		
	If CN9//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusão
		cChave))
        oModel := FWLoadModelFwLoadModel("CNTA121CNTA171")
		
		        oModel:SetOperation(MODEL_OPERATION_INSERTUPDATE)
		If(
        if oModel:CanActivateActivate())			
			oModel:Activate()
			oModel:SetValue("CNDMASTER","CND_CONTRA"	,CN9->CN9_NUMERO)
			oModel:SetValue("CNDMASTER","CND_RCCOMP"	,"1")//Selecionar competência
			
			oModel:SetValue("CXNDETAIL","CXN_CHECK"	, .T.)//Marcar a planilha(nesse caso apenas uma)
		
			oModel:GetModel('CNEDETAIL'):GoLine(1) //Posiciona na linha desejada
			oModel:SetValue('CNEDETAIL', 'CNE_TES', '001')//Preenche TES - Este campo aceita tipo de entrada e saída.
			
			If (oModel:VldData()) /*Valida o modelo como um todo*/
				oModel:CommitData()
			EndIf
		EndIf
		
		If(oModel:HasErrorMessage())
			aMsgDeErro := oModel:GetErrorMessage()
		Else
			cNumMed := CND->CND_NUMMED			
			oModel:DeActivate()			
			lRet := CN121Encerr(.T.) //Realiza o encerramento da medição					
		EndIf
	EndIf	
Return lRet

15. Inclusão de medição com múltiplas naturezas

Bloco de código
titleExemplo inclusão de medição com múltiplas naturezas
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CNT121_014() 
    Local oModel    := Nil
    Local cCodCTR   := "CNTA121EXEMP014"
    Local cNumMed   := ""
    Local aMsgDeErro:= {}
    Local lRet      := .F.
     
    CN9->(DbSetOrder(1))
            oMdlCNK := oModel:GetModel("CNKMASTER")
            
            oMdlCNK:SetValue("CNK_OBS"	    , "Exemplo Modificação")
            if AliasInDic('CXR')
                oMdlCXR := oModel:GetModel("CXRDETAIL")
                oMdlCXR:GoLine(2)                
                oMdlCXR:SetValue("CXR_NOME"	, "Operacao de Atualização")
            endif
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
 
      If CN9->(DbSeek(xFilial("CN9") + cCodCTR))//Posicionar na CN9 para realizar a inclusãoFreeObj(oModel)

        If !Empty(aErro)
        oModel := FWLoadModel("CNTA121")
    VarInfo('Erro apresentado:', aErro)            
        oModel:SetOperation(MODEL_OPERATION_INSERT)EndIf
    endif

Return

04. Exclusão de um documento

Bloco de código
firstline1
titleExclusão de um documento
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de exclusão  If(oModel:CanActivate())     de um documento*/  
User Function Exemplo003()
    Local oModel 
   := NIL
    Local cContra   oModel:Activate():= "TREINAMENTO1954"
    Local cChave       oModel:SetValue:= xFilial("CNDMASTER","CND_CONTRA"    ,CN9->CN9_NUMERO)CNK") + cContra
    Local aErro       oModel:SetValue("CNDMASTER","CND_RCCOMP":= {}

    ,"1")//Selecionar competênciaCNK->(DbSetOrder(3))//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(cChave))
        
oModel := FwLoadModel("CNTA171")
          oModel:SetValue("CXNDETAIL","CXN_CHECK" , .T.)//Marcar a planilha(nesse caso apenas uma)          
SetOperation(MODEL_OPERATION_DELETE)

        if oModel:Activate()            
  
 			/*CXO=Múltiplas naturezas | CXP = Distribuição das naturezas em CC*/
            If oModel:SetValue("CXODETAIL","CXO_ITEM", StrZero(1, Len(CXO->CXO_ITEM) ))
VldData()
                oModel:SetValue("CXODETAIL","CXO_NATURE", 'GCT0000001'CommitData()
            oModel:SetValue("CXODETAIL","CXO_PERC"  , 50)EndIf

        endif

    oModel:SetValue("CXPDETAIL","CXP_ITEM"   , StrZero(1, Len(CXP->CXP_ITEM) ))
if oModel:HasErrorMessage()
            aErro := aClone(oModel:SetValue("CXPDETAIL","CXP_CC"    , "GCT000001")
GetErrorMessage())
        endif

       oModel:SetValue("CXPDETAIL","CXP_CONTA" , "GCT00000000000000001" If oModel:IsActive()
            oModel:SetValue("CXPDETAIL","CXP_PERC"  , 50DeActivate()
        EndIf
    
    FreeObj(oModel)

        oModel:GetModel('CXPDETAIL'):AddLine(If !Empty(aErro)
            oModel:SetValue("CXPDETAIL","CXP_ITEM"  , StrZero(2, Len(CXP->CXP_ITEM) ))
  VarInfo('Erro apresentado:', aErro)          oModel:SetValue("CXPDETAIL","CXP_CC"    , "GCT000002")
        EndIf
    endif

Return

04. Integração com o Totvs Assinatura Eletrônica(TAE)

Aviso
titleAutenticação

Antes de realizar a integração sem interface gráfica, é necessário que o usuário realize a autenticação em tela ao menos uma vez, para que o usuário/senha do TAE fique gravado no profile do usuário do Protheus. 

Bloco de código
firstline1
titleIntegração com TAE
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de integração com o TAE*/   
User Function Exemplo004(oModel:SetValue("CXPDETAIL","CXP_CONTA" , "GCT00000000000000002")
            oModel:SetValue("CXPDETAIL","CXP_PERC"  , 50)
            
            oModel:GetModel('CXODETAIL'):AddLine()
    Local oModel       oModel:SetValue("CXODETAIL","CXO_ITEM"  , StrZero(2, Len(CXO->CXO_ITEM) ))
            oModel:SetValue("CXODETAIL","CXO_NATURE", 'FIN0000001')
            oModel:SetValue("CXODETAIL","CXO_PERC"  , 50)

            oModel:SetValue("CXPDETAIL","CXP_ITEM"  , StrZero(1, Len(CXP->CXP_ITEM) ))
     := NIL    
    Local cContra   := "TREINAMENTO1954"
    Local cChave    := xFilial("CNK") + cContra
    Local aErro     := {}

    CNK->(DbSetOrder(3))//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(cChave))
       oModel:SetValue("CXPDETAIL","CXP_CC"    , "GCT000003") /*
            oModel:SetValue("CXPDETAIL","CXP_CONTA" , "GCT00000000000000003")
  ATENÇÃO: 
          oModel:SetValue("CXPDETAIL","CXP_ITEMCT", "GCT000001")
   É NECESSÁRIO REALIZAR A OPERAÇÃO UMA VEZ EM  oModel:SetValue("CXPDETAIL","CXP_CLVL"  , "GCT000001")
      TELA PARA QUE O USUÁRIO/SENHA FIQUE ARMAZENADA NO PROFILE DO USUÁRIO,
      oModel:SetValue("CXPDETAIL","CXP_PERC"  ,DEPOIS 50)
DISSO SERÁ POSSÍVEL REALIZAR A OPERAÇÃO SEM INTERFACE GRÁFICA.    
        
    oModel:GetModel('CXPDETAIL'):AddLine()
     */
        oModel:SetValue("CXPDETAIL","CXP_ITEM"  , StrZero(2, Len(CXP->CXP_ITEM) ))
   CN171SOpSg(1)//1- Envia/publica documento; 2- Republica documento; 3- Atualiza situação da assinatura
        oModel oModel:SetValue= FwLoadModel("CXPDETAIL","CXP_CC"CNTA171")
    , "GCT000004")   oModel:SetOperation(MODEL_OPERATION_UPDATE)

        if 
oModel:Activate()            oModel:SetValue("CXPDETAIL","CXP_PERC"  , 50)
             
            If (oModel:VldData()) /*Valida o modelo como um todo*/
                oModel:CommitData()
            EndIf

        EndIfendif

         
        If(if oModel:HasErrorMessage())
            aMsgDeErroaErro := aClone(oModel:GetErrorMessage()
        Else
     )
       cNumMed := CND->CND_NUMMED endif

        If  oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

    lRet := CN121Encerr(.T.) //Realiza o encerramento da medição    If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf

        EndIfCN171SOpSg(0)//Restaura operação
    endif

Return lRet
HTML
<!-- esconder o menu --> 


<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;
}
</style>