Scripts de Tela

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.