Árvore de páginas

Função: CNTA120 - Medição do contrato


Abrangências:Protheus 10
Versões:Protheus 10
Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível às Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Espanhol , Inglês


Descrição:

Esta rotina é utilizada para cadastrar a medição do contrato.

A medição, na verdade, funciona como uma previsão da nota fiscal que deverá ser emitida pelo fornecedor/empresa no faturamento. No momento do cadastro de cada medição, o usuário deve, obrigatoriamente, indicar todos os campos quantitativos para àquela etapa do contrato.
Sintaxe:

CNTA120 - Medição do contrato ( [ ] )

Retorno:
    ()
Observações
Os itens da Medição do Contrato não são considerados no exemplo pelo motivo da rotina automática inseri-lo sem a manipulação do usuário, ou seja, no momento que é definido o cabeçalho na rotina automática, os itens serão incluídos automaticamente a partir dos itens da planilha do contrato.
Exemplos:

#include "protheus.ch"
#include "tbiconn.ch"

User Function MyCNTA120()

Local aCabec := {}
Local aItem := {}
Local cDoc := ""
Local cArqTrb:= ""
Local cContra := ""
Local cRevisa := ""
Local dData := date()//Data Atual
Local dDataI := dData-0//Data de inicio
Private lMsHelpAuto := .T.
PRIVATE lMsErroAuto := .F.

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ConOut(Repl("-",80))
ConOut(PadC("Rotina Automática para a Medição do Contrato de Compras e Vendas",80))

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "GCT"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

dbSelectArea("CN9")dbgoto(Recno())
cContra := CN9->CN9_NUMERO
cRevisa := CN9→CN9_REVISA


ConOut("Inicio: "+Time())

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

dbSelectArea("CN9")
dbSetOrder(1)

If !dbSeek(xFilial("CN9")+cContra+cRevisa)
     ConOut("Cadastrar contrato: "+cContra)
EndIf

aCabec := {}
aItens := {}

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Filtra parcelas de contratos automaticos ³
//³ pendentes para a data atual ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

cArqTrb := CriaTrab( nil, .F. )
cQuery := "SELECT CNF.CNF_COMPET,CNF.CNF_CONTRA,CNF.CNF_REVISA,CNA.CNA_NUMERO,CNF.CNF_PARCEL,CN9.CN9_FILIAL FROM " + RetSQLName("CNF") + " CNF, " + RetSQLName("CNA") + " CNA, "+ RetSQLName("CN9") +" CN9 WHERE "cQuery += "CNF.CNF_FILIAL = '"+ xFilial("CNF") +"' AND "cQuery += "CNA.CNA_FILIAL = '"+ xFilial("CNA") +"' AND "cQuery += "CN9.CN9_FILIAL = '"+ xFilial("CN9") +"' AND " cQuery += "CN9.CN9_NUMERO = '"+cContra+"' AND "cQuery += "CN9.CN9_REVISA = '"+cRevisa+"' AND " cQuery += "CNF.CNF_NUMERO = CNA.CNA_CRONOG AND "cQuery += "CNF.CNF_CONTRA = CNA.CNA_CONTRA AND "cQuery += "CNF.CNF_REVISA = CNA.CNA_REVISA AND "cQuery += "CNF.CNF_CONTRA = CN9.CN9_NUMERO AND "cQuery += "CNF.CNF_REVISA = CN9.CN9_REVISA AND "cQuery += "CN9.CN9_SITUAC = '05' AND "cQuery += "CNF.CNF_PRUMED >= '"+ DTOS(dDataI) +"' AND "cQuery += "CNF.CNF_PRUMED <= '"+ DTOS(dData) +"' AND "cQuery += "CNF.CNF_SALDO > 0 AND "cQuery += "CNA.CNA_SALDO > 0 AND "cQuery += "CNF.D_E_L_E_T_ = ' ' AND "cQuery += "CNA.D_E_L_E_T_ = ' '"
cQuery := ChangeQuery( cQuery )

dbUseArea( .T., "TopConn", TCGenQry(,,cQuery), cArqTrb, .T., .T. )

If (cArqTrb)->(Eof())
     ConOut("Nao e possivel medir esse contrato! "+cContra)
EndIf

While !(cArqTrb)->(Eof())
     cDoc := CriaVar("CND_NUMMED")
     aAdd(aCabec,{"CND_CONTRA",(cArqTrb)->CNF_CONTRA,NIL})
     aAdd(aCabec,{"CND_REVISA",(cArqTrb)->CNF_REVISA,NIL})
     aAdd(aCabec,{"CND_COMPET",(cArqTrb)->CNF_COMPET,NIL})
     aAdd(aCabec,{"CND_NUMERO",(cArqTrb)->CNA_NUMERO,NIL})
     aAdd(aCabec,{"CND_NUMMED",cDoc,NIL})
     If !Empty(CND->( FieldPos( "CND_PARCEL" ) ))
          aAdd(aCabec,{"CND_PARCEL",(cArqTrb)->CNF_PARCEL,NIL})
     EndIf

     //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
     //³ Executa rotina automatica para gerar as medicoes ³
     //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

     CNTA120(aCabec,aItem,3,.F.)

     //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Executa rotina automatica para encerrar as medicoes ³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    CNTA120(aCabEC,aItem,6,.F.)

     If !lMsErroAuto
          ConOut("Incluido com sucesso! "+cDoc)
     Else
          ConOut("Erro na inclusao!")
     EndIf

     (cArqTrb)->(dbSkip())
EndDo

(cArqTrb)->(dbCloseArea())

RESET ENVIRONMENT

Return(.T.)

Exemplo
#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
        Exemplo2() //Planilha Fixa sem 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 revisao do contrato
	Local cCompet	:= ""//<--Informar a competencia
	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

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



Parâmetros:



Nome

Tipo

Descrição

Default

Obrigatório

Referência




Array of Record