Mudanças entre as edições de "Scripts de Tela"

(Exemplo 1)
 
Linha 1: Linha 1:
===Exemplo 1===
 
 
Exemplo de script para o preenchimento do valor da última venda no cadastro do item junto ao orçamento de vendas.
 
Exemplo de script para o preenchimento do valor da última venda no cadastro do item junto ao orçamento de vendas.
  

Edição atual tal como às 19h10min de 20 de junho de 2021

Exemplo de script para o preenchimento do valor da última venda no cadastro do item junto ao orçamento de vendas.

Função para retornar o valor da ultima venda.

function RetornaValorUltimaVenda: Double;
var        
  Q: TPHQuery;                                               
begin
  Q := NewPHQuery;  
  try      
   Q.Add('SELECT ITE.VALORUNITARIO, '+        
         '       PED.NUMERO '+        
         'FROM PEDIDOITENS ITE '+        
         'INNER JOIN PEDIDOS PED ON PED.ID = ITE.PEDIDO '+                                             
         'WHERE ITE.ITEM = :ITEM '+
         'AND PED.PESSOA = :PESSOA '+
         'AND ITE.SITUACAO IN(5,6) '+
         'AND PED.NUMERO = (SELECT MAX(C.NUMERO) '+
         '                  FROM PEDIDOITENS B '+
         '                  INNER JOIN PEDIDOS C ON C.ID = B.PEDIDO '+
         '                  INNER JOIN PESSOAS D ON D.ID = C.PESSOA '+
         '                  WHERE B.ITEM = :ITEM '+
         '                  AND D.ID = :PESSOA '+
         '                  AND B.SITUACAO IN(5,6)) ');
    Q.ParamByName('ITEM').AsInteger   := ORCAMENTOITENS. FieldByName('ITEM').asInteger;
    Q.ParamByName('PESSOA').AsInteger := ORCAMENTOITENS.DataSetPai.FieldByName('PESSOA').asInteger;
    Q.Open;
 
    Result := Q.FieldByName('VALORUNITARIO').asFloat;                                      
  finally
    Q.Free;
  end;      
end;            

No evento "OnEditChange" do campo ITEM é realizada a chamada da função quando o item estiver em modo de edição.

procedure CampoItemOnChange;
var
  valor: double;                                        
begin
  if (ORCAMENTOITENS.State in [dsEdit, dsInsert])then
  begin
    valor := RetornaValorUltimaVenda;
    if valor > 0 then
      ORCAMENTOITENS.FieldByName('VALORUNITARIO').asFloat := valor;                                                        
  end;                                                          
end;            

Nos script de tela, ao final sempre teremos a atribuição dos eventos. É este ponto do script que é executado pelo sistema ao iniciar o engenho do script, os demais procedimento, só serão chamadas se atribuídos a algum outro objeto.

begin
  ORCAMENTOITENS.CampoDoNome('ITEM').OnEditChange := @CampoItemOnChange;                                          
end.