Ver Mensaje Individual
  #12  
Antiguo 17-11-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
No se... Seguiste con las mismas asignaciones. lee los comentarios y entenderás un poco lo que trato de decirte

Código Delphi [-]
procedure TfCantidad.BCokClick(Sender: TObject);
var
  //Mejor coloca nombres de variables que signifiquen algo
  //a : Integer; // Cantidad de Articulos
  CantArts: integer; // Cantidad de Articulos
begin
  fmodulo.tVentadetalle.Active := true;
  fmodulo.tProductos.Active := true;

  //Esta validación la coloco acá porque la vienes haciendo en tu código,
  //pero es innecesaria o no estás haciendo bien las cosas ya que en ningún lugar de tus cálculos usas el valor del
  //TEdit Ecantidad. Si bien lo asignas a una variable mas adelante, enseguida a esa misma variable le asignas un 
  //valor traído del dataset
  if (string(Ecantidad.Text).Trim.Length = 0)
    or (not TryStrToInt(Ecantidad.Text, CantArts))  // <= Si la conversión es correcta, aquí ya se asigna el valor del edit a la variable
  then
  begin
    Application.MessageBox('El valor ingresado debe ser mayor a O', 'Drugstore',mb_yesno+mb_iconquestion);
    Exit;
  end;
  
  if fmodulo.tVentadetalle.State in [dsEdit, dsInsert] then
    fmodulo.tVentadetalle.Cancel;

  fmodulo.tVentadetalle.Insert;

  {
  a := (StrToInt(Ecantidad.text)); // Esta asignación la pierdes con la siguiente línea

  //Y no es necesario asignar a variable todo lo del dataset. Puedes usar los valores directamente
  a := fmodulo.tVentadetalle.Fields.FieldByName('cantidad').AsInteger;
  d := fmodulo.qnumventa.Fields.FieldByName('id_venta').AsInteger;
  e := (d + 1);
  fmodulo.tVentadetalle ['id_ventas'] := IntToStr(e);
  fmodulo.tVentadetalle ['id_producto'] := fmodulo.tProductos ['id_producto'];
  f := fmodulo.tProductos.Fields.FieldByName('precio_vent').AsInteger;
  g := (a * f);
  fmodulo.tVentadetalle ['Precio_v'] := IntToStr(g);
  fmodulo.tVentadetalle ['cantidad'] := IntToStr(a);
  }

  //El consecutivo trata de no calcularlo en el programa y dejarlo a que lo calcule la DB. Cuando tengas varios clientes al mismo tiempo vendiendo esto será un dolor de cabeza
  fmodulo.tVentadetalle.Fields.FieldByName('id_ventas').AsString := IntToStr(fmodulo.qnumventa.Fields.FieldByName('id_venta').AsInteger + 1); 
  fmodulo.tVentadetalle.Fields.FieldByName('id_producto').Value := fmodulo.tProductos.Fields.FieldByName('id_producto').Value;
  fmodulo.tVentadetalle.Fields.FieldByName('Precio_v').AsString := IntToStr(fmodulo.tVentadetalle.Fields.FieldByName('cantidad').AsInteger * fmodulo.tProductos.Fields.FieldByName('precio_vent').AsInteger);
  fmodulo.tVentadetalle.Fields.FieldByName('cantidad').AsString := fmodulo.tVentadetalle.Fields.FieldByName('cantidad').AsString;
  fmodulo.tVentadetalle.Post;
  fmodulo.tVentadetalle.Refresh;

  self.Close;
end;

He tratado de utilizar los mismos tipos de datos que al parecer tienes en tu dataset. pero cosas como el precio y cantidad es mejor que los coloques como float. EN un futuro pueden decirte que quieren vender medio paquete de cigarrillos o que el valor de un producto con oferta es de 9.99
__________________
Buena caza y buen remar... http://mivaler.blogspot.com

Última edición por movorack fecha: 17-11-2017 a las 15:39:08.
Responder Con Cita