Pontos de Execução de Scripts

Revisão de 14h28min de 16 de outubro de 2025 por Alex.vieira (discussão | contribs)

Conceito

Os pontos de execução de scripts permitem associar scripts personalizados a momentos específicos do funcionamento do sistema. Com ele, é possível inserir lógicas adicionais, realizar validações, ajustar cálculos, sem alterar diretamente o código principal. Os pontos de execução são disparados em etapas estratégicas de processos, garantindo flexibilidade e controle sobre comportamentos que precisam ser adaptados conforme a necessidade.

Pontos de Execução Disponíveis

  • OnChangeItemFaturamento: Este ponto de script é acionado durante a alteração de um item na tela de faturamento. Após o processamento das informações relacionadas ao produto, como unidade de medida e valor da tabela de preços, ocorre a chamada deste script. Em seguida, são executadas as rotinas relacionadas às informações fiscais. Vale ressaltar que é possível usar os parâmetros dos campos dos itens para realizar comportamento específicos, ou seja, parâmetros como VALORUNITARIO ou QUANTIDADE é possível consumir.
    • Parâmetros:
      • ItemID: Identificador do item que executou o evento.
      • DocumentoID: Identificar do documento no qual está sendo executado o processo.
      • ItemTabela: Corresponde ao nome da tabela de itens do processo. [ITENS].
      • DocumentoTabela: Corresponde ao nome da tabela de documento do processo. [DOCUMENTOS].
    • Exemplo: O exemplo apresentado mostra como, no ponto de execução OnChangeItemFaturamento, é possível calcular automaticamente o valor de desconto de um item com base na condição de pagamento do documento. Quando o item é alterado, o script é acionado e executa o procedimento CalculoDesconto, que obtém o percentual de desconto definido para a condição de pagamento vinculada ao documento. Com esse percentual em mãos, o script calcula o valor do desconto aplicando-o sobre o valor total do item, considerando quantidade e valor unitário, e arredonda o resultado para duas casas decimais. Esse valor é então atribuído ao parâmetro de retorno VALORDESCONTO, permitindo que seja utilizado no processo de faturamento. O uso de parâmetros como DocumentoTabela e DocumentoID torna o script flexível, permitindo sua aplicação em diferentes processos, como faturamento, pedidos ou orçamentos, sem necessidade de alterações no código.
procedure CalculoDesconto;
var
  Q:TPHQuery;    
begin                                                                                                        
  Q := NewPHQuery;
  try
    Q.Add('SELECT CPAG.C_PERCENTUALDESC '+       
          'FROM CONDICOESPAGAMENTO CPAG '+
          'INNER JOIN '+ParamByName('DocumentoTabela').AsString+' DOC ON DOC.CONDICAOPAGAMENTO = CPAG.ID '+                 
          'WHERE DOC.ID = :DOC');
    Q.ParamByName('DOC').AsLargeInt := ParamByName('DocumentoID').AsLargeInt;    
    Q.Open;                      
    
    ParamByName('VALORDESCONTO').AsFloat := 
      Arredondar((((ParamByName('QUANTIDADE').AsFloat * 
                    ParamByName('VALORUNITARIO').AsFloat) /100) * Q.FieldByName('C_PERCENTUALDESC').AsFloat),2);      
  finally
    Q.Free;                        
  end;              
end;

begin
  CalculoDesconto;
end.
  • OnChangeItemPedidoVenda:
    • Parâmetros:
      • ItemID: Identificador do item que executou o evento.
      • DocumentoID: Identificar do documento no qual está sendo executado o processo.
      • ItemTabela: Corresponde ao nome da tabela de itens do processo. [PEDIDOITENS].
      • DocumentoTabela: Corresponde ao nome da tabela de documento do processo. [PEDIDOS].
  • OnChangeItemOrdemServico:
    • Parâmetros:
      • ItemID: Identificador do item que executou o evento.
      • DocumentoID: Identificar do documento no qual está sendo executado o processo.
      • ItemTabela: Corresponde ao nome da tabela de itens do processo. [ORDEMSERVICOITENS].
      • DocumentoTabela: Corresponde ao nome da tabela de documento do processo. [ORDENSSERVICO].
  • OnChangeItemOrcamento:
    • Parâmetros:
      • ItemID: Identificador do item que executou o evento.
      • DocumentoID: Identificar do documento no qual está sendo executado o processo.
      • ItemTabela: Corresponde ao nome da tabela de itens do processo. [ORCAMENTOITENS].
      • DocumentoTabela: Corresponde ao nome da tabela de documento do processo. [ORCAMENTOS].
  • OnCloseFormPrincipal: Este ponto de script é acionado no momento em que o formulário principal do sistema é encerrado. Ele permite executar rotinas de finalização, registro de logs, ou qualquer outra ação que deva ocorrer antes do fechamento total da aplicação.
    • Parâmetros:
      • CadastrosAbertos: String contendo a lista dos cadastros que estavam abertos no momento do fechamento. O formato é um JSON com informações sobre o nome do cadastro e os identificadores selecionados. Exemplo de formato:
[
 {"Nome": "BOLETOS", "IDs": "459,160"},
 {"Nome": "LANCAMENTOSTESOURARIA", "IDs": "186"}
] 
    • Exemplo: O exemplo abaixo demonstra como utilizar o ponto de execução OnCloseFormPrincipal para impedir o fechamento do sistema caso existam lançamentos de tesouraria não confirmados.
procedure C_FormOnClose;
var 
 pJson:TPHJson;
 I:Integer;
 Q:TPHQuery;
 pExibeErro:Boolean;                
begin
 pExibeErro := False;          
 
 { FormPrincipal }    
 if not (ParamByName('CadastrosAbertos').AsString = ) then  
 begin    
   pJson := TPHJson.Create;
   try
     pJson.LerJson(ParamByName('CadastrosAbertos').AsString);

     for I := 0 to pJson.Count - 1 do
     begin
       { Tela de Lançamento da Tesouraria Aberta }                  
       if (pJson.Linha(I).ElementoDoNome('Nome').Texto = 'LANCAMENTOSTESOURARIA') then
         if not (pJson.Linha(I).ElementoDoNome('IDs').Texto = ) then                 
         begin
           Q := NewPHQuery;
           try
             Q.Add('SELECT ID '+
                   'FROM LANCAMENTOSTESOURARIA ' +
                   'WHERE SITUACAO = 1 '+
                   'AND ID IN ('+pJson.Linha(I).ElementoDoNome('IDs').Texto+')');
             Q.Open;

             pExibeErro := not (Q.Vazia);                                   
           finally
             Q.Free;                                                
           end;              
         end;          
     end;                                        
   finally
     pJson.Free;                            
   end;
 end;   

  if (pExibeErro) then                           
    ErroValidacao('não é possível fechar com lançamento da tesouraria não confirmado.');            
end;

begin                                                                                                                 
  C_FormOnClose;    
end.
  • OnCloseFormCadastro: Este ponto de script é acionado no momento em que um formulário de cadastro é fechado. Ele permite executar ações relacionadas ao fechamento de cadastros específicos.
    • Parâmetros:
      • Cadastro: Nome do cadastro que está sendo fechado.
      • IDs: Identificadores dos registros que estavam selecionados no momento do fechamento.