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;