Ir al contenido


Foto

Operar celdas de stringgrid matematicamente


  • Por favor identifícate para responder
23 respuestas en este tema

#21 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 05 agosto 2014 - 03:32

Lo de la estructura de fondo lo entiendo, es que yo ya tengo la base de datos, lo que te preguntaba es al terminar de agregar articulos cuando el cliente termino su compra...como inserto lo que tengo en la tabla, aunque fuera con el modelo tuyo o con el mio(de cualquier manera)?

Y de paso te muestro el codigo(de lo que vi en internet) en el boton agregar producto:



delphi
  1. procedure TForm4.Button1Click(Sender: TObject);
  2. begin
  3.   if (GrillaProd.SelectedRows.Count=1) then
  4.     begin
  5.       ShowMessage('seleccione al menos un producto');
  6.     end
  7.     else
  8.       if (Edit3.Text='') then
  9.           begin
  10.             ShowMessage('Especifique la cantidad a vender');
  11.           end
  12.  
  13.       else
  14.     begin
  15.     //obtengo idprod para llenar ticket
  16.       Form3.ZQuery1.ParamByName('idp').AsInteger:=GrillaProd.DataSource.DataSet.FieldByName('idproducto').AsInteger;
  17.         with Form3.ClientDataSet1 do
  18.           begin
  19.             Open;
  20.           Insert;
  21.             FieldByName('cantidad').AsFloat:=StrToFloat(Edit3.Text);
  22.             FieldByName('nombre').AsString:=ZQuery1.FieldByName('nombre').AsString;
  23.  
  24.             FieldByName('preciou').AsFloat:=ZQuery1.FieldByName('preciou').AsFloat;
  25.             FieldByName('total').AsFloat:=((StrToFloat(Edit3.Text)) * (ZQuery1.FieldByName('preciou').AsFloat));
  26.  
  27.           if State in [dsEdit,dsInsert] then
  28.               Post;
  29.             if ChangeCount>0 then
  30.               begin
  31.                 ApplyUpdates(0);
  32.  
  33.               end;
  34.  
  35.         end;
  36.         Form3.StringGrid1.Cells[1,0]:=Form3.ClientDataSet1.FieldByName('totalticket').AsString;
  37.       end;
  38. end;


  • 0

#22 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 05 agosto 2014 - 04:42

giulichajari, más allá de ese código, te comento que lo único que debes hacer es traspasar como más te plazca los datos de esa tabla temporal a la base de datos permanente. Para esto podrías usar un ciclo para los detalles y una vez para la cabecera y totales.

El problema es que el tema trasciende la programación para llegar al análisis y es complicado si no se conoce lo que tienes hecho en detalle.

Una vez obtenido todos los datos de la factura:
1. Pasar los datos de la cabecera a la tabla de venta
2. Iniciar un ciclo que incluya las filas de la tabla temporal y los pase a las filas de la tabla de detalles de venta
3. Termine la transacción
Eso es todo.

Lo que sí te recomiendo al margen de todo este tema, es que no acostumbres utilizar los nombres automáticos para los objetos, en vez de esto pónle nombre a todo.

Por que no subes una impresión de pantalla, la definición de los datos, etc. y lo vemos, así te puedo ayudar.

Saludos

  • 0

#23 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 06 agosto 2014 - 01:46

Tengo estas tablas:



sql
  1. CREATE TABLE ticket(
  2. idticket INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3. numero INTEGER,
  4. importe DECIMAL(10,2),
  5. fechae DATE,
  6. horae TIME,
  7. idsucursal INTEGER,
  8. FOREIGN KEY (idsucursal) REFERENCES sucursal(idsucursal)
  9. );
  10. CREATE TABLE categoria(
  11. idcategoria INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  12. descripcion VARCHAR(100)
  13. );
  14. CREATE TABLE marca(
  15. idmarca INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  16. descripcion VARCHAR(100)
  17. );
  18. CREATE TABLE producto(
  19. idproducto INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  20. stock INTEGER,
  21. idmarca INTEGER,
  22. medida VARCHAR(20),
  23. nombre VARCHAR(100),
  24. preciou DECIMAL(10,2),
  25. iva DECIMAL(3,2),
  26. idcategoria INTEGER,
  27. pedir bool,
  28. FOREIGN KEY (idcategoria) REFERENCES categoria(idcategoria),
  29. FOREIGN KEY (idmarca) REFERENCES marca(idmarca)
  30. );
  31. CREATE TABLE clientes(
  32. idcliente INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  33. idpersona INTEGER,
  34. CUIT INTEGER,
  35. CUIL INTEGER,
  36. FOREIGN KEY (idpersona) REFERENCES persona(idpersona)
  37. );
  38. CREATE TABLE cliticket(
  39. idcliente INTEGER,
  40. idticket INTEGER,
  41. FOREIGN KEY (idticket) REFERENCES ticket(idticket),
  42. FOREIGN KEY (idcliente) REFERENCES clientes(idcliente)
  43. );
  44. CREATE TABLE ventas(
  45. idticket INTEGER,
  46. idproducto INTEGER,
  47. cantidad DECIMAL(10,2),
  48. FOREIGN KEY (idproducto) REFERENCES producto(idproducto),
  49. FOREIGN KEY (idticket) REFERENCES ticket(idticket)
  50. );



Ticket tiene los datos unicos del ticket: numero importe, etc;
ventas tendra un registro para cada producto con su id de ticket,
y cliticket tiene el cliente asociado.

Y en el boton hacer ticket(cuando ya lo vamos a emitir tengo.)



delphi
  1. procedure TForm3.Button4Click(Sender: TObject);
  2. var
  3. ticket:Isucursales1.Tticket;
  4. venta:Isucursales1.Tventa;
  5.  
  6.  
  7. begin
  8.       ticket:=Isucursales1.Tticket.Create;
  9.       venta:=Isucursales1.Tventa.Create;
  10.  
  11.  
  12.                 with ticket do
  13.                   begin
  14.                   numero:=ClientDataSet1.FieldByName('numero').AsInteger;
  15.                   importe:=StrToFloat(StringGrid1.Cells[1,0]);
  16.                     fechae:=DateToStr(Now());
  17.                     horae:=TimeToStr(Now());
  18.                         idsucursal:=1;
  19.                   end;
  20.                   GetIsucursales.hacerticket(ticket);
  21.                 while not Grillaticket.DataSource.DataSet.Eof do
  22.                   begin
  23.                     with venta do
  24.                       begin
  25.                         idproducto:=Grillaticket.DataSource.DataSet['idproducto'];
  26.                         cantidad:=Grillaticket.DataSource.DataSet['cantidad'];
  27.                         GetIsucursales.ventas(venta);
  28.                       end;
  29.                   end;
  30.  
  31. end;



Porque un error que me da esto es que me inserta un registro en la tabla productos..
  • 0

#24 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 07 agosto 2014 - 05:51

Bueno, encontre en la web que podria tener un datamodule, y luego tener un Tclientdataset con su dataset provider correspondiente, es decir deberia tener uno para el ticket y otro para los productos por ejemplo. Pero lo que pasa es que en el problema que planteo, diseñe unas clases TRemotable, porque tengo un webservice, pero al utilizar insert y post en un clientdataset esto ya no es necesario. No se que me pueden decir..
  • 0




IP.Board spam blocked by CleanTalk.