Árvore de páginas

CONTEÚDO

  1. Visão Geral
  2. Medição com Planilha Fixa com Cronograma
  3. Medição com Planilha Fixa sem Cronograma
  4. Estornando uma medição
  5. Encerrando uma medição
  6. Excluindo uma medição

Atenção: Devido a descontinuidade da rotina CNTA120 a partir de 04/04/2022, será necessário utilizar o ExecAuto da nova rotina de Medição, CNTA121, conforme o link ExecAuto CNTA121

01. VISÃO GERAL

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

02. Medição com Planilha Fixa com Cronograma


Medição com Planilha Fixa com Cronograma
#include 'protheus.ch'
#include 'parmtype.ch'
#INCLUDE "TBICONN.CH"

User Function ExCNT120()
    Local nRet      :=  0
        
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CNDT10"               
        ConOut("INICIO TESTE")		
		Exemplo1() //Planilha Fixa com Cronograma        
        ConOut("FIM TESTE")
    RESET ENVIRONMENT
Return nRet

Static Function Exemplo1()
    Local aCab     := {}//Cabecalho
	Local aItens    := {}//Itens
    Local cContra	:= ""//<--Informar o numero do contrato
	Local cRevisa	:= ""//<--Informar a revisão do contrato
	Local cCompet	:= ""//<--Informar a competência(formato MM/AAAA)
	Local cPlan		:= ""//<--Informar o numero do contrato
	Local cParcel	:= ""//<--Informar o numero do contrato
    Private lMsErroAuto		:= .F.

    aCab := {}
    aAdd(aCab,{"CND_CONTRA",cContra,NIL})
    aAdd(aCab,{"CND_REVISA",cRevisa,NIL})
    aAdd(aCab,{"CND_PARCEL",cParcel,NIL})
    aAdd(aCab,{"CND_COMPET",cCompet,NIL})
    aAdd(aCab,{"CND_NUMERO",cPlan,NIL})

    /*Não é necessario informar itens no array <aItens>, pois eles serão carregados automaticamente*/
    MSExecAuto({|x,y|CNTA120(x,y,3,.F.)},aCab, aItens)//Executa rotina automatica para gerar as medicoes

    if lMsErroAuto
        if !IsBlind()
            MostraErro()
        else            
            aEval(GetAutoGrLog(),{|x|ConOut(x)})            
        endif
    endif
Return

03. Medição com Planilha Fixa sem Cronograma

Exemplo Medição com Planilha Fixa sem Cronograma
User Function ExCNT120()
    Local nRet      :=  0
        
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CNDT10"               
        ConOut("INICIO TESTE")
        Exemplo2() //Planilha Fixa sem Cronograma
        ConOut("FIM TESTE")
    RESET ENVIRONMENT
Return nRet

Static Function Exemplo2()
    Local aCab     := {}//Cabecalho
	Local aItens    := {}//Itens
	Local aItem    := {}//Itens
    Local cContra	:= ""//<--Informar o numero do contrato
	Local cRevisa	:= "   "//<--Informar a revisao do contrato
	Local cCompet	:= ""//<--Informar a competencia(formato MM/AAAA)
	Local cPlan		:= ""//<--Informar o numero do contrato
    Local cParcel	:= ""//<--Informar o numero do contrato
    Private lMsErroAuto		:= .F.

    aCab := {}
    aAdd(aCab,{"CND_CONTRA",cContra,NIL})
    aAdd(aCab,{"CND_REVISA",cRevisa,NIL})    
    aAdd(aCab,{"CND_COMPET",cCompet,NIL})
    aAdd(aCab,{"CND_NUMERO",cPlan,NIL})
    aAdd(aCab,{"CND_PARCEL",cParcel,NIL}) //<-- É preciso informar a parcela, mesmo não tendo cronograma.
    
    aItens := {} //Quando não há cronograma, é necessario informar <aItens>, pois precisamos preencher a quantidade
    aAdd(aItem,{"CNE_ITEM","001",NIL})
    aAdd(aItem,{"CNE_PRODUT","GCT001                        ",NIL})
    aAdd(aItem,{"CNE_QUANT",1,NIL})

    aAdd(aItens, aItem)

    MSExecAuto({|x,y|CNTA120(x,y,3,.F.)},aCab, aItens)//Executa rotina automatica para gerar as medicoes

    if lMsErroAuto
        if !IsBlind()
            MostraErro()
        else            
            aEval(GetAutoGrLog(),{|x|ConOut(x)})            
        endif
    endif
Return

04. Estornando uma medição

Exemplo de estorno de medição
User Function ExCNT120()
    Local nRet      :=  0
         
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CNDT10"              
        ConOut("INICIO TESTE")     
        Exemplo3() //Estorno de uma medição
        ConOut("FIM TESTE")
    RESET ENVIRONMENT
Return nRet
 
Static Function Exemplo3()
    Local aCab     := {}//Cabecalho
    Local aItens    := {}//Itens
    Local cContra   := ""//<--Informar o numero do contrato
    Local cRevisa   := "   "//<--Informar a revisão do contrato
    Local cNumPla   := StrZero(1, Len(CND->CND_NUMERO))//<--Informar o número da planilha
    Local cNumMed   := ""//<--Informar o número da medição
    Local cChave    := ""
    Private lMsErroAuto     := .F.

    CND->(DbSetOrder(1)) //CND_FILIAL+CND_CONTRA+CND_REVISA+CND_NUMERO+CND_NUMMED
    cChave := xFilial("CND") + cContra + cRevisa + cNumPla + cNumMed
    if CND->(DbSeek(cChave))
        
        aCab := {}
        aAdd(aCab,{"CND_NUMMED",CND->CND_NUMMED,NIL})
        aAdd(aCab,{"CND_CONTRA",CND->CND_CONTRA,NIL})
        aAdd(aCab,{"CND_REVISA",CND->CND_REVISA,NIL})
        aAdd(aCab,{"CND_NUMERO",CND->CND_NUMERO,NIL})
        aAdd(aCab,{"CND_PARCEL",CND->CND_PARCEL,NIL})
        aAdd(aCab,{"CND_COMPET",CND->CND_COMPET,NIL})
    
        /*Não é necessario informar itens no array <aItens>, pois eles serão carregados automaticamente*/
        MSExecAuto({|x,y|CNTA120(x,y,7,.F.)},aCab, aItens)//Executa rotina automática para estornar a medição(nOpc=7)
    
        if lMsErroAuto
            if !IsBlind()
                MostraErro()
            else           
                aEval(GetAutoGrLog(),{|x|ConOut(x)})           
            endif
        endif
    endif
 
Return

05. Encerrando uma medição

Exemplo encerramento de medição
User Function ExCNT120()
    Local nRet      :=  0
         
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CNDT10"              
        ConOut("INICIO TESTE")     
        Exemplo5() //Encerramento de uma medição
        ConOut("FIM TESTE")
    RESET ENVIRONMENT
Return nRet

Static Function Exemplo5()
    Local aCab     := {}//Cabecalho
    Local aItens    := {}//Itens
    Local cContra   := ""//<--Informar o numero do contrato
    Local cRevisa   := ""//<--Informar a revisão do contrato
    Local cNumPla   := StrZero(1, Len(CND->CND_NUMERO))//<--Informar o número da planilha
    Local cNumMed   := ""//<--Informar o número da medição
    Local cChave    := ""
    Private lMsErroAuto     := .F.

    CND->(DbSetOrder(1)) //CND_FILIAL+CND_CONTRA+CND_REVISA+CND_NUMERO+CND_NUMMED
    cChave := xFilial("CND") + cContra + cRevisa + cNumPla + cNumMed
    if CND->(DbSeek(cChave))
        
        aCab := {}
        aAdd(aCab,{"CND_NUMMED",CND->CND_NUMMED,NIL})
        aAdd(aCab,{"CND_CONTRA",CND->CND_CONTRA,NIL})
        aAdd(aCab,{"CND_REVISA",CND->CND_REVISA,NIL})
        aAdd(aCab,{"CND_NUMERO",CND->CND_NUMERO,NIL})
        aAdd(aCab,{"CND_PARCEL",CND->CND_PARCEL,NIL})
        aAdd(aCab,{"CND_COMPET",CND->CND_COMPET,NIL})
    
        /*Não é necessario informar itens no array <aItens>, pois eles serão carregados automaticamente*/
        MSExecAuto({|x,y|CNTA120(x,y,6,.F.)},aCab, aItens)//Executa rotina automatica para encerrar a medição(nOpc=6)
    
        if lMsErroAuto
            if !IsBlind()
                MostraErro()
            else           
                aEval(GetAutoGrLog(),{|x|ConOut(x)})           
            endif
        endif
    endif
 
Return

06. Excluindo uma medição

Exemplo de exclusão de medição
User Function ExCNT120()
    Local nRet      :=  0
         
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "GCT" TABLES "CNDT10"              
        ConOut("INICIO TESTE")        
        Exemplo6() //Exclui medição
        ConOut("FIM TESTE")
    RESET ENVIRONMENT
Return nRet
 
Static Function Exemplo6()
    Local aCab     := {}//Cabecalho
    Local aItens    := {}//Itens
    Local cContra   := ""//<--Informar o numero do contrato
    Local cRevisa   := ""//<--Informar a revisão do contrato
    Local cNumPla   := StrZero(1, Len(CND->CND_NUMERO))//<--Informar o número da planilha
    Local cNumMed   := ""//<--Informar o número da medição
    Local cChave    := ""
    Private lMsErroAuto     := .F.

    CND->(DbSetOrder(1)) //CND_FILIAL+CND_CONTRA+CND_REVISA+CND_NUMERO+CND_NUMMED
    cChave := xFilial("CND") + cContra + cRevisa + cNumPla + cNumMed
    if CND->(DbSeek(cChave))
        
        aCab := {}
        aAdd(aCab,{"CND_NUMMED",CND->CND_NUMMED,NIL})
        aAdd(aCab,{"CND_CONTRA",CND->CND_CONTRA,NIL})
        aAdd(aCab,{"CND_REVISA",CND->CND_REVISA,NIL})
        aAdd(aCab,{"CND_NUMERO",CND->CND_NUMERO,NIL})
        aAdd(aCab,{"CND_PARCEL",CND->CND_PARCEL,NIL})
        aAdd(aCab,{"CND_COMPET",CND->CND_COMPET,NIL})
    
        /*Não é necessario informar itens no array <aItens>, pois eles serão carregados automaticamente*/
        MSExecAuto({|x,y|CNTA120(x,y,5,.F.)},aCab, aItens)//Executa rotina automatica para excluir a medição(nOpc=5)
    
        if lMsErroAuto
            if !IsBlind()
                MostraErro()
            else           
                aEval(GetAutoGrLog(),{|x|ConOut(x)})           
            endif
        endif
    endif
 
Return