Ajustar Centro de Custo dos Lançamentos Contábeis
O Script nomeado de "PH_CBAjustarLancamentosCC" é responsável por realizar a inclusão dos centros de custos nos lançamentos contábeis dos documentos, onde a conta contábil utilizada está marcada para exigir centro de custo e não possuí o lançamento do centro de custo informado.
procedure CBAjustarLancamentosCC; var Q,QCC:TPHQuery; CC:TPHServerClass; begin Q := NewPHQuery; try // SELECIONA TODOS OS LANÇAMENTOS CONTÁBEIS QUE NÃO POSSUEM LANÇAMENTO DE CENTRO DE CUSTO // PORÉM A CONTA CONTÁBIL ESTÁ MARCADA PARA EXIGIR CENTRO DE CUSTO Q.Add('SELECT DISTINCT A.ID, '+ ' A.VALOR '+ 'FROM CBLANCAMENTOS A '+ 'INNER JOIN CBCONTASCONTABEIS B ON B.ID = A.CONTACONTABIL '+ 'INNER JOIN CBDOCUMENTOS C ON C.ID = A.CBDOCUMENTO '+ 'WHERE B.ID = :CCB '+ 'AND B.EXIGIRCENTROCUSTO = S '+ 'AND NOT EXISTS (SELECT C.ID '+ ' FROM CBLANCAMENTOCC C '+ ' WHERE C.LANCAMENTO = A.ID)'); Q.ParamByName('CCB').AsLargeInt := ParamByName('FCBID').AsLargeInt; Q.Open; if (Q.RecordCount > 0) then begin QCC := NewPHQuery; try QCC.Tabela := 'CBLANCAMENTOCC'; while not Q.Eof do begin // REALIZA A GERAÇÃO DO LANÇAMENTO DO CENTRO DE CUSTO COM BASE NOS LANÇAMENTOS CONTÁBEIS LOCALIZADOS PELO SQL QCC.NovoRegistro; QCC.FieldByName('LANCAMENTO').AsLargeInt := Q.FieldByName('ID').AsLargeInt; QCC.FieldByName('CENTROCUSTO').AsLargeInt := ParamByName('FCCID').AsLargeInt; QCC.FieldByName('PERCENTUAL').AsFloat := 100; QCC.FieldByName('VALOR').AsFloat := Q.FieldByName('VALOR').AsFloat; QCC.Post; Q.Next; end; finally QCC.Free; end; end; finally Q.Free; end; end;
Na procedure "ChamarNoServidor" é necessário preencher os parâmetros "FCCID" que é o ID do centro de custo que será informado nos lançamentos contábeis, e também é necessário informar o parâmetro "FCBID" que é o ID da conta contábil que será utilizada para verificar os lançamentos contábeis que não tem o lançamento do centro de custo.
Essa procedure faz a chamado do procedimento acima ("CBAjustarLancamentosCC") pelo servidor, por conta de funcionalidades como "NovoRegistro" e para performace de não precisar ir ao servidor realizar cada Insert na tabela.
procedure ChamarNoServidor; var ScriptObj:TPHProcScript; begin ScriptObj := TPHProcScript.Create; try ScriptObj.ScriptNome := 'PH_CBAjustarLancamentosCC'; ScriptObj.Procedimento := 'CBAjustarLancamentosCC'; // Parâmetro responsável por passar o ID do Centro de Custo ScriptObj.ParamByName('FCCID').AsLargeInt := 7; // Parâmetro responsável por passar o ID da Conta Contábil ScriptObj.ParamByName('FCBID').AsLargeInt := 5; ScriptObj.Executar; finally ScriptObj.Free; end; end;