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.