Mudanças entre as edições de "Pontos de Execução de Scripts"
| Linha 45: | Linha 45: | ||
***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''PEDIDOITENS''']. | ***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''PEDIDOITENS''']. | ||
***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''PEDIDOS''']. | ***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''PEDIDOS''']. | ||
| − | |||
*'''OnChangeItemOrdemServico:''' | *'''OnChangeItemOrdemServico:''' | ||
| Linha 53: | Linha 52: | ||
***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''ORDEMSERVICOITENS''']. | ***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''ORDEMSERVICOITENS''']. | ||
***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''ORDENSSERVICO''']. | ***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''ORDENSSERVICO''']. | ||
| − | |||
*'''OnChangeItemOrcamento:''' | *'''OnChangeItemOrcamento:''' | ||
| Linha 61: | Linha 59: | ||
***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''ORCAMENTOITENS''']. | ***ItemTabela: Corresponde ao nome da tabela de itens do processo. ['''ORCAMENTOITENS''']. | ||
***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''ORCAMENTOS''']. | ***DocumentoTabela: Corresponde ao nome da tabela de documento do processo. ['''ORCAMENTOS''']. | ||
| − | **'''Exemplo:''' | + | |
| + | *'''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. | ||
Edição das 14h28min de 16 de outubro de 2025
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.
- Parâmetros:
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].
- Parâmetros:
- 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].
- Parâmetros:
- 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].
- Parâmetros:
- 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:
- Parâmetros:
[
{"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.
- Parâmetros: