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;