Ver Mensaje Individual
  #1  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Reputación: 12
feliz-58 Va por buen camino
Question Agregando articulos a un StringGrid

Saludos, gracias por haber colaborando conmigo en uno que otro punto y por siempre estar dispuestos a ayudarme a aprender cosas nuevas de ustedes que saben mucho de esto.

Tengo un string grid, al cual quiero agregar artículos y quitar según sea el caso, ya en este foro he preguntado sobre quitar y me han dado formas eficientes de hacerlo, pero un inconveniente al agregar.

Mi string grid consta de 7 columnas:
1- Referencia -------------------- Para que aquí valla el código del articulo
2- Cantidad -------------------- Obviamente la cantidad de cuantos artículos se van a facturar
3- Concepto -------------------- La descripción del articulo
4- Precio --------------------- El precio individual de cada articulo
5- Neto --------------------- Aquí el total de cantidad x Precio
6- ITBIS ---------------------- Aquí si aplica ITBIS, Neto * 18/100
7- Total ---------------------- Neto + ITBIS

Como saben, para que no pierda el formato de las cabeceras, un strind Grid debe al menos contener 1 fila adicional aparte de la fila del encabezado. Aquí comienza mi inconveniente.

Para agregar articulos hago esto:
Código Delphi [-]
Var
Precios, Neto, Impuesto  : Real;
Begin
SG.Row := SG.Rowcount - 1;
SG.Cells[0, SG.Row] := IntToStr(CodProd);
SG.Cells[1, SG.Row] := FaddProducto.Ecantidad.Text;
SG.Cells[2, SG.Row] := FaddProducto.Qtemp.FieldByName('Descripcion').AsString;
// Precio 1 -----------------------------------------------
if FaddProducto.RB1.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio.Text);
// Precio 2 -----------------------------------------------
if FaddProducto.RB2.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio2.Text);
// Precio 3 -----------------------------------------------
if FaddProducto.RB3.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio3.Text);
// Precio 4 -----------------------------------------------
if FaddProducto.RB4.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio4.Text);
//----------------------------------------------------------
SG.Cells[3, SG.Row] := FloattoStr(Precios);
SG.Cells[4, SG.Row] := FloatToStr(Precios * Strtofloat(FaddProducto.Ecantidad.Text));
Neto:= Precios * Strtofloat(FaddProducto.Ecantidad.Text);
// Impuesto ------------------------------------------------
if Faddproducto.AplicaITBIS.Checked = true then
Begin
SG.Cells[5, SG.Row] := FaddProducto.Qtemp.FieldByName('ITBIS').AsVariant/100 * Precios;
Impuesto:= FaddProducto.Qtemp.FieldByName('ITBIS').AsVariant/100 * PrecioS;
SG.Cells[6, SG.Row] :=  Floattostr(neto+Impuesto);
end
else
Begin
SG.Cells[5, SG.Row] := '0';
SG.Cells[6, SG.Row] :=  Floattostr(neto);
end;
//----------------------------------------------------------
SG.RowCount := SG.RowCount + 1;
end;

Que pasa con esto, que siempre al final, tengo que dejar el "SG.RowCount := SG.RowCount + 1;" Para que la siguiente linea este lista para introducir el nuevo articulo.

¿Que Necesito?
Quiero una forma eficiente de ignorar si es el primer articulo que se va a agregar (ya que hay una fila vacía en el string grid) o si es otro (2do, 3ro, Etc), para no tener que dejar una fila vacia al final de cada ves que agrego un articulo, es decir que la fila se cree en el momento que se va a insertar el articulo. Ya que si pongo "SG.RowCount := SG.RowCount + 1;" al inicio del código, la primera ves que se inserta, deja un espacio vació, obviamente porque ya había uno ahí.

Gracias!
Responder Con Cita