//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
Definição do modelo de Dados
@author alvaro.camillo
@since 05/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function ModelDef()
Local oModel
Local oStr1 := FWFormStruct(1,'ZC3')
Local oStr2 := FWFormStruct(1,'ZC4')
//Bloco a ser executado no Commit
Local bCommit := {|oModel| MLOC003Com(oModel) }
oModel := MPFormModel():New('MLOC003Old', /*bPre*/, /*bPost*/, bCommit, /*bCancel*/)
oModel:SetDescription('Pedidos')
oModel:addFields('ZC3MASTER',,oStr1)
oModel:addGrid('ZC4DETAIL','ZC3MASTER',oStr2)
oModel:SetRelation('ZC4DETAIL', { { 'ZC4_FILIAL', 'xFilial("ZC4")' }, { 'ZC4_COD', 'ZC3_COD' } }, ZC4->(IndexKey(1)) )
Return oModel
//-------------------------------------------------------------------
/*/{Protheus.doc} MLOC003Com
Função de Commit
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function MLOC003Com(oModel)
Local cPadrao := "005" // Lançamento padrão a ser configurado no CT5
Local nTotal := 0 // Variável totalizadora da contabilizacao
Local aFlagCTB := {} // Array com as informações para a gravação do flag de contabilização do registro
Local nHdlPrv := 0 // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
Local cLote := LoteCont("FIN") // Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5
Local cArquivo := "" // Arquivo temporario usado para contabilizacao
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
Begin Transaction
FWFormCommit( oModel )
// Função que verifica se o lançamento padrão foi configurado pelo cliente
If VerPadrao(cPadrao)
// Rotina que abre o capa do lote contábil ( Inicio da Contabilização)
nHdlPrv := HeadProva(cLote,FunName(),Substr(cUsername,1,6),@cArquivo)
EndIf
ZC4->(dbSetOrder(1))//ZC4_FILIAL+ZC4_COD+ZC4_ITEM
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) ))
If ZC4->(dbSeek( xFilial("ZC4") + ZC3->ZC3_COD ))
While ZC4->(!EOF()) .And. ZC4->(ZC4_FILIAL+ZC4_COD) == xFilial("ZC4") + ZC3->ZC3_COD
ZC1->(MsSeek(xFilial("ZC4") + ZC4->ZC4_PROD ))
If nHdlPrv > 0
aAdd(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
nTotal += DetProva(nHdlPrv,cPadrao,FunName(),cLote,,,,,,,,@aFlagCTB)
Endif
ZC4->(dbSkip())
EndDo
If nHdlPrv > 0 .And. ( nTotal > 0 )
// Função que fecha o lote contábil
RodaProva(nHdlPrv, nTotal)
// Função que apresenta a tela de contabilização, realiza aglutinação caso necessária e grava o documento contábil ( CT2 )
cA100Incl(cArquivo,nHdlPrv,3,cLote,lMostra,lAglutina)
Endif
EndIf
End Transaction
Return .T.
|