Ver Mensaje Individual
  #9  
Antiguo 12-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Jere_84 Ver Mensaje
Esta opción anda muy bien siempre y cuando el usuario vaya cargando los registro en el orden 1, 2, 3, 4...
Tenés toda la razón

Pero algo que remarcó pacopenin: "siendo solo 7 registros" me dió una idea...

Si tu TDataSet soporta la propiedad RecNo podrías hacer:
Código Delphi [-]
...
implementation

type
  TPrevValues = record
    Valor: Currency;
    Porce: Currency;
    Fijo: Currency;
  end;

var
  // Índice 0 valores para reg 1
  vPrev: array[0..7] of TPrevValues;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Sólo si deseas valores manuales para reg 1
  with vPrev[0] do
  begin
    // Valores de ejemplo
    Valor:= 1;  
    Porce:= 1;
    Fijo := 1;
  end;

  // Cargar el arreglo
  with DataSet do
    try
      DisableControls;
      while not Eof do
      begin
        vPrev[RecNo].Valor:= FieldByName('VALOR').AsCurrency;
        vPrev[RecNo].Porce:= FieldByName('PORCENTAJE').AsCurrency;
        vPrev[RecNo].Fijo := FieldByName('IMPORTEFIJO').AsCurrency;
        Next;
      end;
      First;
    finally
      EnableControls;
    end;
end;

procedure TForm1.DataSetBeforeScroll(DataSet: TDataSet);
begin
  with vPrev[DataSet.RecNo] do
  begin
    Valor:= DataSet.FieldByName('VALOR').AsCurrency;
    Porce:= DataSet.FieldByName('PORCENTAJE').AsCurrency;
    Fijo := DataSet.FieldByName('IMPORTEFIJO').AsCurrency;
  end;
end;

procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
var
  Value: Currency;
  ix: Integer;
begin
  with DataSet  do
  begin
    // Registro anterior
    ix := DataSet.RecNo-1;

    if ix = 0 then ix:= 7;  { Sólo si deseas que reg 1 compute con reg 7 }

    Value:= (FieldByName('VALOR').AsCurrency - vPrev[ix].Valor) *
      vPrev[ix].Porce/100 + vPrev[ix].Fijo;

    Edit;
    FieldByName('VALOR').AsCurrency:= Value;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita