yo lo que entiendo es, que los campos calculados solo se asignan en el evento OnCalc, pero yo no lo puedo hacer alli por que para poder asignarle el valor se tienen que cumplir una serie de validaciones, y ese campo solo lo necesito para que me guarde un valor para posterirmente compararlo, no debo ni mistrarlo al usuario solo me va a servir para ver si un registro ya existe no lo vuelva a crear.
Código Delphi
[-]
procedure Tsilfpr0002.PPR0002_INCLUYE_DORE_GENERAL();
begin
Q_Cursor.Close;
Q_Cursor.SQL.Clear;
Q_Cursor.SQL.Add(' SELECT ampp_prov_numero, ampp_mtpr_clave, SUM(ampp_cantidad) AS ampp_cant, SUM(ampp_centimetros_cubicos) AS ampp_cc ');
Q_Cursor.SQL.Add(' FROM sil_ajustes_mp_pedido ');
Q_Cursor.SQL.Add(' WHERE ampp_plan_clave = :gw_plan_clave_prod ');
Q_Cursor.SQL.Add(' AND ampp_ctmn_fecha = (SELECT MAX(ctmn_fecha) ');
Q_Cursor.SQL.Add(' FROM sil_contaminacion ');
Q_Cursor.SQL.Add(' WHERE ctmn_plan_clave = ampp_plan_clave ');
Q_Cursor.SQL.Add(' AND FORMAT(ctmn_fecha,''dd/mm/yyyy'') = :lw_fecha_operacion) ');
Q_Cursor.SQL.Add(' AND IIF(ISNULL(ampp_pedi_serie),:sil_pedi_pedi_serie,ampp_pedi_serie) = :sil_pedi_pedi_serie ');
Q_Cursor.SQL.Add(' AND IIF(ISNULL(ampp_pedi_numero),:sil_pedi_pedi_numero,ampp_pedi_numero) = :sil_pedi_pedi_numero ');
Q_Cursor.SQL.Add(' GROUP BY ampp_prov_numero, ampp_mtpr_clave ');
Q_Cursor.ParamByName('lw_fecha_operacion').Value := lw_fecha_operacion;
Q_Cursor.ParamByName('sil_pedi_pedi_serie').Value := T_PEDI.FieldValues['pedi_serie'];
Q_Cursor.ParamByName('sil_pedi_pedi_numero').Value := T_PEDI.FieldValues['pedi_numero'];
Q_Cursor.ParamByName('gw_plan_clave_prod').Value := gw_plan_clave;
Q_Cursor.Prepare;
Q_Cursor.Open;
while not Q_Cursor.Eof do
begin
...
if not(VarIsNull(lw_prov_numero)) or (lw_prov_numero <> '') then
begin
T_DORE_SD.First;
while not(T_DORE_SD.Eof) and
((T_DORE_SD.FieldByName('dore_origen_dosificacion').Value <> 'S') or
(T_DORE_SD.FieldByName('lw_origen_servicio').Value <> 'P') or
(T_DORE_SD.FieldByName('dore_mtpr_clave').Value <> Q_Cursor.FieldByName('plsm_mtpr_clave').Value) or
(T_DORE_SD.FieldByName('dore_prov_numero').Value <> lw_prov_numero)) do
begin
T_DORE_SD.Next;
end;
if (T_DORE_SD.FieldByName('dore_origen_dosificacion').Value = 'S') and
(T_DORE_SD.FieldByName('lw_origen_servicio').Value = 'P') and
(T_DORE_SD.FieldByName('dore_mtpr_clave').Value = Q_Cursor.FieldByName('plsm_mtpr_clave').Value) and
(T_DORE_SD.FieldByName('dore_prov_numero').Value = lw_prov_numero) then
begin
if (T_DORE_SD.FieldByName('dore_cant_sobre_dosificacion').Value <> lw_cantidad) then
begin
T_DORE_SD.Edit;
T_DORE_SD.FieldByName('dore_cant_sobre_dosificacio').Value := lw_cantidad;
end;
end
else
begin
if not(T_DORE_SD.FieldByName('dore_mtpr_clave').IsNull) then
begin
T_DORE_SD.Append; end;
T_DORE_SD.Append;
T_DORE_SD.FieldByName('dore_origen_dosificacion').Value := 'S';
T_DORE_SD.FieldByName('dore_mtpr_clave').Value := Q_Cursor.FieldValues['plsm_mtpr_clave'];
T_DORE_SD.FieldByName('dore_prov_numero').Value := lw_prov_numero;
T_DORE_SD.FieldByName('dore_cant_sobre_dosificacion').Value := lw_cantidad;
T_DORE_SD.FieldByName('dore_tipo_dosificacion').Value := Q_Cursor.FieldValues['plsm_tipo_dosificacion'];
T_DORE_SD.FieldByName('lw_origen_servicio').Value := 'P';
T_DORE_SD.FieldByName('dore_mtpr_clave').Value := Q_Cursor.FieldValues['plsm_mtpr_clave'];
T_DORE_SD.FieldByName('dore_numero').Value := T_DORE_SD.RecordCount + 1;
T_DORE_SD.FieldByName('dore_usuario_creo').Value := gw_usuario;
T_DORE_SD.FieldByName('dore_fecha_creo').Value := now;
end;
end;
end;
...
Q_Cursor.Next;
end;
Q_Cursor.Close;
lwct_lw_incluye_dore_general := 'N';
end;