#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
//-------------------------------------------------------------------
/*/{Protheus.doc} ML003CTB
Classe interna implementando o Observer do Commit
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Class ML003CTB FROM FWObserver
DATA cPadrao // Lançamento padrão a ser configurado no CT5
DATA nTotal // Variável totalizadora da contabilizacao
DATA aFlagCTB // Array com as informações para a gravação do flag de contabilização do registro
DATA nHdlPrv // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
DATA cLote
DATA cArquivo // Arquivo temporario usado para contabilizacao
Method new()
Method update()
Method openCTB()
Method closeCTB()
Method writeLineCTB()
End Class
Method updatedestroy(oObserver,cAction,aParam)
End Class ML003CTB
Local oModel := Nil
Local cModelId := ""
Local cAlias := ""
Local lNewRecord:= .F.
If cAction =="BEFORE_TTS"
oModel := aParam[1]
self:openCTB(oModel)
EndIf
If cAction =="AFTER"
oModel := aParam[1]
cModelId:= aParam[2]
cAlias:= aParam[3]
lNewRecord:= aParam[4]
self:writeLineCTB(oModel,cModelId,cAlias,lNewRecord)
EndIf
If cAction == "AFTER_TTS"
oModel := aParam[1]
self:closeCTB(oModel)
EndIf
return
Method new () Class
//-------------------------------------------------------------------
/*/{Protheus.doc} new
Método construtor da classe.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method new() Class ML003CTB
self:cPadrao := "005"
self:nTotal := 0
self:aFlagCTB := {}
self:nHdlPrv := 0
self:cLote := ""
self:cArquivo := ""
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} openCTB
Bloco para ser executado antes da transação para abrir o header de contabilizaçãoupdate
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method openCTB(oModelupdate(oObserver,cAction,aParam) Class ML003CTB
Local lRetoModel := .T.
self:cPadrao Nil
Local cModelId := "005"
Local // Lançamento padrão a ser configurado no CT5
self:nTotal := 0 // Variável totalizadora da contabilizacao
self:aFlagCTB := {} // Array com as informações para a gravação do flag de contabilização do registro
self:nHdlPrv := 0 // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
self:cLote := LoteCont("FIN") // Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5
self:cArquivo := "" // Arquivo temporario usado para contabilizacao
// Função que verifica se o lançamento padrão foi configurado pelo cliente
If VerPadrao(self:cPadrao)
// Rotina que abre o capa do lote contábil ( Inicio da Contabilização)
self:nHdlPrv := HeadProva(self:cLote,FunName(),Substr(cUsername,1,6),@self:cArquivo)
EndIf
Return lRet
//------------------cAlias := ""
Local lNewRecord:= .F.
If cAction =="BEFORE_TTS"
oModel := aParam[1]
self:openCTB(oModel)
EndIf
If cAction =="AFTER"
oModel := aParam[1]
cModelId:= aParam[2]
cAlias:= aParam[3]
lNewRecord:= aParam[4]
self:writeLineCTB(oModel,cModelId,cAlias,lNewRecord)
EndIf
If cAction == "AFTER_TTS"
oModel := aParam[1]
self:closeCTB(oModel)
EndIf
return
//-------------------------------------------------------------------
/*/{Protheus.doc} openCTB
Bloco para ser executado antes da transação para abrir o header de contabilização
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
/*/{Protheus.doc} writeLineCTB
Bloco para ser executado depois da gravação.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method writeLineCTB(oModel,cModelId,cAlias,lNewRecord) Class ML003CTB
Local lRet := .T.
Local aArea:= GetArea()
If cAlias == "ZC4"
ZC0->(dbSetOrder(1))//ZC0_FILIAL+ZC0_COD+ZC0_LOJA
ZC1->(dbSetOrder(1))//ZC1_FILIAL+ZC1_COD
ZC0->(MsSeek(xFilial("ZC0") + ZC3->(ZC3_CLIENT + ZC3_LOJA) ))
ZC1->(MsSeek(xFilial("ZC4") + ZC4->ZC4_PROD ))
If self:nHdlPrv > 0
aAdd(self:aFlagCTB,{"ZC4_LA","S","ZC4",ZC4->(Recno()),0,0,0})
// Função que interpreta todas as sequencias de lançamento configurada pelo usuário e cria as linhas de lançamento contábil
// Executada uma vez para cada registro que quer ser contabilizado
self:nTotal += DetProva(self:nHdlPrv,self:cPadrao,FunName(),self:cLote,,,,,,,,@self:aFlagCTB)
Endif
Endif
RestArea(aArea)
ReturnMethod openCTB(oModel) Class ML003CTB
Local lRet := .T.
self:cPadrao := "005" // Lançamento padrão a ser configurado no CT5
self:nTotal := 0 // Variável totalizadora da contabilizacao
self:aFlagCTB := {} // Array com as informações para a gravação do flag de contabilização do registro
self:nHdlPrv := 0 // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
self:cLote := LoteCont("FIN") // Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5
self:cArquivo := "" // Arquivo temporario usado para contabilizacao
// Função que verifica se o lançamento padrão foi configurado pelo cliente
If VerPadrao(self:cPadrao)
// Rotina que abre o capa do lote contábil ( Inicio da Contabilização)
self:nHdlPrv := HeadProva(self:cLote,FunName(),Substr(cUsername,1,6),@self:cArquivo)
EndIf
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} closeCTBwriteLineCTB
Bloco para ser executado depois da transaçãogravação.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method closeCTBwriteLineCTB(oModel,cModelId,cAlias,lNewRecord) Class ML003CTB
Local lRet := .T.
Local lMostra aArea:= .T. // Verifica se mostra ou nao tela de contabilização
Local lAglutina := .F. // Verifica se aglutina lançamentos com as mesmas entidades contábeis
If GetArea()
If cAlias == "ZC4"
ZC0->(dbSetOrder(1))//ZC0_FILIAL+ZC0_COD+ZC0_LOJA
ZC1->(dbSetOrder(1))//ZC1_FILIAL+ZC1_COD
ZC0->(MsSeek(xFilial("ZC0") + ZC3->(ZC3_CLIENT + ZC3_LOJA) ))
ZC1->(MsSeek(xFilial("ZC4") + ZC4->ZC4_PROD ))
If self:nHdlPrv > 0 .And. ( self:nTotal > 0 )
aAdd(self:aFlagCTB,{"ZC4_LA","S","ZC4",ZC4->(Recno()),0,0,0})
// Função que fechainterpreta otodas lote contábil
RodaProvaas sequencias de lançamento configurada pelo usuário e cria as linhas de lançamento contábil
// Executada uma vez para cada registro que quer ser contabilizado
self:nTotal += DetProva(self:nHdlPrv, self:nTotal)
// Função que apresenta a tela de contabilização, realiza aglutinação caso necessária e grava o documento contábil ( CT2 )
cA100Incl(self:cArquivo,self:nHdlPrv,3,self:cLote,lMostra,lAglutina)
Endif
Return lRet
cPadrao,FunName(),self:cLote,,,,,,,,@self:aFlagCTB)
Endif
Endif
RestArea(aArea)
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} closeCTB
Bloco para ser executado depois da transação.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method closeCTB(oModel) Class ML003CTB
Local lRet := .T.
Local lMostra := .T. // Verifica se mostra ou nao tela de contabilização
Local lAglutina := .F. // Verifica se aglutina lançamentos com as mesmas entidades contábeis
If self:nHdlPrv > 0 .And. ( self:nTotal > 0 )
// Função que fecha o lote contábil
RodaProva(self:nHdlPrv, self:nTotal)
// Função que apresenta a tela de contabilização, realiza aglutinação caso necessária e grava o documento contábil ( CT2 )
cA100Incl(self:cArquivo,self:nHdlPrv,3,self:cLote,lMostra,lAglutina)
Endif
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} destroy
Método responsável por limpar as váriaveis (principalmente arrays) utilizadas na classe para
evitar leak de memória.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method destroy() Class ML003CTB
aSize(self:aFlagCTB, 0)
Return
|