Buenas a todos.
como verán no suelo postear mucho por que con la info que hay en ClubDelphi creo que no es necesário hacerlo
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
ya que está "casi" todo lo que uno necesita para poder realizar "casi" cualquier cosa, estoy aprendiendo muchísimo gracias a este foro y a sus foreros que siempre me han ayudado hasta el momento ( saludos
Caral, Lepe, Roman.. y alguno que se me escapa ) que me resolvieron las dudas hasta el momento.. pero bueno al grano xDD
Resulta que estoy haciendo un sistema de facturación y ahora estoy en la parte de ventas, que es donde mas problemas he tenido y los superé como dije gracias al foro.. pero ahora este problema que tengo ahora me mata!!!
No pude resolverlo es mas. creo que parte de mi por no saber plantearme bién que es lo que necesito o COMO necesito hacerlo.
Bueno lo que quiero hacer es ACTUALIZAR una COLUMNA de un StringGrid con datos de una DB ( MySQL ) que conecto con ZEOS
no tengo problemas para insertar datos.. eliminarlos, etc.
Ahora el problema es que para los que estoy haciendo el programa manejan
6 Precios diferentes de cada producto que se los agrega el momento de agregar el respectivo producto o "Item", bueno ahora cada cliente el momento de darle de alta se le asigna una lista de precio ( cualquiera de los precios )
Ya hasta este punto bién.. ahora lo que pretengo hacer es lo siguiente.
CUando abro el módulo ventas lo primero que me sale es esto
(si, si ya se que está feo pero quiero que sea funcinal xD )
[img=http://img187.imageshack.us/img187/4128/preciosow0.th.jpg]
ahora cuando busco un cliente tiene que cambiar el ComboBox que ven a la derecha el que está encerrado con en un óvalo
Bueno luego de eso comienzo la búqueda del producto por código de producto o código de barras lo encuentro y lo agrego el StringGrid
OJO.- el precio lo toma desde el ComboBox según el número que esté
Bueno y todo lo demás sin problemas.. pero ahora que pasaría si el Cliente quiere que le den con la lista de precio 4 ( precio4 ) por ej y siendo que el tenía la lista de precio 3 ( precio3 ) pues si como se lo imaginaban.. hay que precionar el botón LIMPIAR TODO
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
y comensar a agregar de nuevo con la nueva lista de precios escojida en el ComboBOx perooooooooo como se darán cuenta es una pérdida de tiempo y además el programa no sería efisciente.. daría malos ratos al que lo usa y no me gusta eso, si hago algo lo quiero hacer bién.
Ya ahora lo quiera es que el que usa la app pueda cambiar el item en el COmboBox y automaticamente se ACTUALIZEN TODOS los precios de la respectiva columna
Pero no se como hacer..
Por el momento lo que analicé es hacer con una consulta SQL a la tabla Productos de mi Base de Datos.
TABLA PRODUCTOS.
Código SQL
[-]CREATE TABLE `productos` (
`ID_producto` int(10) unsigned NOT NULL auto_increment,
`CodProducto` varchar(10) NOT NULL,
`CodigoBarra` varchar(15) NOT NULL default '0',
`Descripcion` varchar(30) NOT NULL default '',
`Categoria` varchar(20) NOT NULL default '',
`SubCategoria` varchar(20) NOT NULL default '',
`Unidad` varchar(5) NOT NULL,
`Cantidad` int(11) NOT NULL default '0',
`Proveedor` varchar(20) NOT NULL default '',
`UnidadPrecio` varchar(5) NOT NULL default '',
`PrecioCompraBs` float default '0',
`PrecioCompraSus` float default '0',
`Costo` float default '0',
`Precio1` float NOT NULL default '0',
`Precio2` float default NULL,
`Precio3` float default NULL,
`Precio4` float default NULL,
`Precio5` float default NULL,
`Precio6` float default NULL,
`FechaActualizacion` date NOT NULL default '0000-00-00',
PRIMARY KEY (`ID_producto`),
UNIQUE KEY `CodProducto` (`CodProducto`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
luego de eso pensé primer lugar en buscar el producto ya sea por codProducto o por CodigoBarra que si o si tienen que tenerlo una ves encontrado el producto de la primera columna ( vamos la horizontal, estoy tan confundido que no recuerdo cual es fila y columna en el StringGrid )
una ves buscaod el producto por codproducto o codigobarra y buscar el campo
precio pienso que sería una variable que contenga de acuerdo al ComboBox el respectivo precio ( precio1, precio2,.... )
Luego de eso una ves encontrado el producto por su código y su campo precio con la variable
precio hacer que ACTUALIZE el precio que tiene insertado en el StringGrid... por ej si estaba un producto:
SIlla de madera precio1
que me lo actualice a :
Silla de madera precio2 ( dependiendo de que items tengan en el ComboBox )
y eso hacer con tooooodos los productos que tenga en el StringGrid
Bueno se que sería con unos 2 bucles pero vamos.. soy pura teoría que no se como hacerlo
ajunto una chapucera que intenté pero se que está mal xDD
por lo menos intenté
Código Delphi
[-]procedure TFrmVentas.CBListaPrecioChange(Sender: TObject);
var
i : Integer;
Precio : String;
begin
DM.ZQAgregarItems.Close;
DM.ZQAgregarItems.SQL.Text := 'Select * FROM productos';
DM.ZQAgregarItems.Open;
case CBListaPrecio.ItemIndex of
0:Precio := DM.ZQAgregarItems.FieldByName('Precio1').Value;
1:Precio := DM.ZQAgregarItems.FieldByName('Precio2').Value;
2:Precio := DM.ZQAgregarItems.FieldByName('Precio3').Value;
3:Precio := DM.ZQAgregarItems.FieldByName('Precio4').Value;
4:Precio := DM.ZQAgregarItems.FieldByName('Precio5').Value;
5:Precio := DM.ZQAgregarItems.FieldByName('Precio6').Value;
end;
For i:=0 to SGListaProductos.RowCount-1 Do
Begin
DM.ZQActualizaListaPrecio.Close;
DM.ZQActualizaListaPrecio.SQL.Clear;
DM.ZQActualizaListaPrecio.SQL.Add('SELECT
recio FROM productos');
DM.ZQActualizaListaPrecio.SQL.Add('Where CodProducto = :codigo');
DM.ZQActualizaListaPrecio.ParamByName('precio').AsString := Precio;
DM.ZQActualizaListaPrecio.ParamByName('codigo').AsInteger := StrToInt(SGListaProductos.Cells[3,i]);
DM.ZQActualizaListaPrecio.Open;
End;
Bueno eso lo puse en el evento OnChange del CBListaPrecio que así se llama el ComboBox que dependen de el las listas de precios,
Bueno que datos mas ??
Pues uso un query para agregar los items ahí que se llama
ZQAgregarItems
el código que uso para agregar los items es el siguiente por si a alguien le sirve..
AGREGAR ITEMS A STRINGGRID DESDE BASE DE DATOS MySQL
Código Delphi
[-]if (CBListaPrecio.Text <> '') then
begin
FrmAgregarItems := TFrmAgregarItems.Create(self);
try
FrmAgregarItems.ShowModal;
finally
If FrmAgregarItems.Cancela = False then
Begin
If Cuenta > 1 then SGListaProductos.RowCount := SGListaProductos.RowCount + 1;
SGListaProductos.Cells[1,cuenta] := FrmAgregarItems.ECantidad.Text;
SGListaProductos.Cells[2,cuenta] := DM.ZQAgregarItems.FieldByName('unidad').AsString;
SGListaProductos.Cells[3,cuenta] := DM.ZQAgregarItems.FieldByName('codproducto').AsString;
SGListaProductos.Cells[4,cuenta] := DM.ZQAgregarItems.FieldByName('codigobarra').AsString;
SGListaProductos.Cells[5,cuenta] := DM.ZQAgregarItems.FieldByName('descripcion').AsString;
SGListaProductos.Cells[6,cuenta] := DM.ZQAgregarItems.FieldByName('unidadprecio').AsString;
case CBListaPrecio.ItemIndex of
0:Precio := DM.ZQAgregarItems.FieldByName('Precio1').Value;
1:Precio := DM.ZQAgregarItems.FieldByName('Precio2').Value;
2:Precio := DM.ZQAgregarItems.FieldByName('Precio3').Value;
3:Precio := DM.ZQAgregarItems.FieldByName('Precio4').Value;
4:Precio := DM.ZQAgregarItems.FieldByName('Precio5').Value;
5:Precio := DM.ZQAgregarItems.FieldByName('Precio6').Value;
end;
SGListaProductos.Cells[7,cuenta] := Precio; SGListaProductos.Cells[8,cuenta] := Format('%8.2f',[StrToFloat(Precio) * StrToFloat(SGListaProductos.Cells[1,cuenta])]);
Cuenta := Cuenta +1;
SortGrid(SGListaProductos,0,0);
CalculaTotales;
end;
FrmAgregarItems.Free;
end;
end;
Bueno creo que he sido muy claro en mi duda..
saludos y gracias por adelantado foreros.. y disculpen por aumentar el tamaño de su DB del foro xDD
salud!!!