Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TSringGrid + Convertir Double a String (https://www.clubdelphi.com/foros/showthread.php?t=41077)

BlackDaemon 07-03-2007 07:48:14

TSringGrid + Convertir Double a String
 
Bueno.. otra vés molestando por aquí :D
Soy bién nuevo en esto de DElphi pero como me gusta pues le meto con ganas !! :)

Ya ahora estoy haciendo un sistema de facturación y ya casi casi lo terminaré pero estoy en el punto de hacer la factura agregar Items ( productos ) a un componente ( StringGrid ) para luego sacar una suma del precio y mostrarlo en un label ..
Bueno ahora el problema que tengo es el siguiente:

Tengo un FrmVentas donde tengo un StringGrid para ir agregando los Items que tengo en la Dase de Datos ,ahora por el foro leí que es mejor usar un DBGrid para estos menesteres pero bueno.. yo elegí el StringGrid ;) ahora al la cosa va así tengo un boton que me abre otro FrmBuscarItems que es ahí donde se busca el Items por Código ,Código de barra o su Descripción una vés que busca y encuentra el Items o producto correcto tengo un boton que es ACEPTAR ( el cual en teoría devería cerrar el FrmBuscarItems y agregar el Items selecionado al StringGrid el FrmVentas, bueno hastá haý sin problema lo resolví buscando por estos foros :cool: y mi código en mi Botón ACEPTAR ERA el siguiente.. digo "era" por que ya le agregué unas líneas que es donde casca

Código Delphi [-]
procedure TFrmAgregarItems.SBAgregarClick(Sender: TObject);
begin
    FrmVentas.SGListaProductos.Cells[1,FrmVentas.SGListaProductos.RowCount-1] := ECantidad.Text;
    FrmVentas.SGListaProductos.Cells[2,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidad.Caption;
    FrmVentas.SGListaProductos.Cells[3,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigo.Caption;
    FrmVentas.SGListaProductos.Cells[4,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigoBarra.Caption;
    FrmVentas.SGListaProductos.Cells[5,FrmVentas.SGListaProductos.RowCount-1] := DBTDescripcion.Caption;
    FrmVentas.SGListaProductos.Cells[6,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidadPrecio.Caption;

    FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

  Close;
end;


Bueno con ese código puedo agregar un Items a un StringGrid sin ningún problema :) ( se preguntarán por que capturo de los labels.caption en véz de capturar directamente desde el ZQery -> componente de ZEOSlib, pues la verdad no sé xD pero no creo que interfiera en nada )

ya con ese código podía agregar los productos que quería y todo sin problema ... solo estaba probando como agregar Items a un StringGrid

Ahora cuando ya lo tenía dominado ese punto pasé al segundo que era.. agregar el PRECIO de cada Items y luego sumarlos y mostrar en un Label == LSubTotal , ahora les muestro mi código de mi NUEVO botón.. bueno no es nuevo botón pero en teoría devería cumplir una función mas.. que sería agregar el PRECIO en el StringGrid y también sumar TODA la columna de PRECIOS

Código Delphi [-]
procedure TFrmAgregarItems.SBAgregarClick(Sender: TObject);
var i : integer;
    SubTotal : double;
begin
    FrmVentas.SGListaProductos.Cells[1,FrmVentas.SGListaProductos.RowCount-1] := ECantidad.Text;
    FrmVentas.SGListaProductos.Cells[2,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidad.Caption;
    FrmVentas.SGListaProductos.Cells[3,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigo.Caption;
    FrmVentas.SGListaProductos.Cells[4,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigoBarra.Caption;
    FrmVentas.SGListaProductos.Cells[5,FrmVentas.SGListaProductos.RowCount-1] := DBTDescripcion.Caption;
    FrmVentas.SGListaProductos.Cells[6,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidadPrecio.Caption;
    FrmVentas.SGListaProductos.Cells[7,FrmVentas.SGListaProductos.RowCount-1] := DM.ZQAgregarItems.FieldByName('precio1').AsString;

    FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

    SubTotal := 0;
   // Calcula el SubTotal
   For i:=1 to FrmVentas.SGListaProductos.RowCount-1 do
      SubTotal := SubTotal + StrToFloat(FrmVentas.SGListaProductos.Cells[8,i]);
      FrmVentas.LSubTotal.Caption := FormatFloat('%8.2n',SubTotal);
      //FrmVentas.LSubTotal.Caption := FloatToStr(SubTotal);
  Close;
end;

ya el segundo está comentado por que tampoco me funcionó así :(
Con este código igual agrega el Items al StringGrid pero me sale un error

'0.00' IS NOT A VALID FLOATING POINT VALUE

Y para que tengan un poco mas de idea de lo que es el StringGrid les dejo el código como se crea en tiempo de ejecución en el FrmVentas

Código Delphi [-]
procedure TFrmVentas.FormCreate(Sender: TObject);
begin
   SGListaProductos.Cells[0,0] := 'Nº';
   SGListaProductos.Cells[1,0] := 'Cantidad';
   SGListaProductos.Cells[2,0] := 'Unid.';
   SGListaProductos.Cells[3,0] := 'Código';
   SGListaProductos.Cells[4,0] := 'Cód. Barra';
   SGListaProductos.Cells[5,0] := 'Descripción';
   SGListaProductos.Cells[6,0] := 'Unid. P.';
   SGListaProductos.Cells[7,0] := 'Precio';
   SGListaProductos.Cells[8,0] := 'TOTAL';
   SGListaProductos.Cells[1,1] := '0';
   SGListaProductos.Cells[7,1] := '0.00';
   SGListaProductos.Cells[8,1] := '0.00';
end;

Buenooooooooo!!! creo que escribí mucho pero la verdad que me gusta buscar antes de preguntar y no encontré nada en los foros mas que estos temas que por cierto aprendí a hacer converciones pero no lo suficiente para solucionar mi error por mi solo ( que frustrante ) :(

TEMAS PARA CONVERCIONES

http://www.clubdelphi.com/foros/showthread.php?t=13012
http://www.clubdelphi.com/foros/showthread.php?t=10903

Bueno perdón por hacer tan larga la pregunta pero es que soy del lema
Emplea suficiente tiempo en generar una pregunta clara para recibir una respuesta digna

joder no se como va el lema pero algo por el estilo :eek:

jejeje creo que fué un mal chiste :p

ya saludos!!!

PD devería usar un DBGrid para estos trabajos ??
PD2 un ejemplo se agradecería muchisisisimo :D

PD3 ( importante ) Me olvidaba, uso MySQL y el campo de Precio1 es tipo FLOAT si necesitan ese dato

Monchi 07-03-2007 17:55:38

Yo lo hago asi:
Uso un vector que cargo antes de llenar el StringGrid, y cuando lleno el StringGrid calculo el total de la venta que voy a mostrar
Código Delphi [-]
   for i:=0 to g_cantidadarticulos-1 do
   begin
   stgarticulos.RowCount:=stgarticulos.RowCount+1;
   stgarticulos.Cells[0,stgarticulos.RowCount-2]:=inttostr(articulo.codigo);
   stgarticulos.Cells[1,stgarticulos.RowCount-2]:=articulo.descripcion;
   stgarticulos.Cells[2,stgarticulos.RowCount-2]:=rubro.descripcion;
   stgarticulos.Cells[3,stgarticulos.RowCount-2]:=floattostr(g_detalleVenta[i].cantidad);
   stgarticulos.Cells[4,stgarticulos.RowCount-2]:=formatfloat('0.00',g_detalleventa[i].precio);
   stgarticulos.Cells[5,stgarticulos.RowCount-2]:=formatfloat('0.00',(g_detalleventa[i].precio)*g_detalleVenta[i].cantidad);
   total_gravado:=total_gravado+((g_detalleventa[i].precio)*g_detalleVenta[i].cantidad)*(1-(strtofloat(txtdescuento.text)/100));
   end;

BlackDaemon 08-03-2007 16:01:52

Pues la verdad que no entendí muy bién :D
Tienes mas de 2 StringGrid verdad ??
Bueno a ver si álguien mas me da una ayuda que todavía no logré resolverla

saludos y gracias por la respuesta :)

EDIT : sobre el error '0.00' IS NOT A VALID FLOATING POINT VALUE lo que hice fué ir a Panel de Control -> Configuración regional y de Idiomas -> Español ( Bolivia ) -> Personalizar -> tengo estos valores :

Todo eso lo tengo en Números

Símbolo decimal : Punto
Símbolo de separación de miles: Coma
separador de listas : Coma

Todo esto en la pestaña Monedas

Símbolo de decimal : Punto
Símbolo de separación de miles : Coma

saludos

BlackDaemon 08-03-2007 20:14:07

Bueno yo mismo me respondo :D
recuerdan mi código :

Código Delphi [-]
procedure TFrmAgregarItems.SBAgregarClick(Sender: TObject);
var i : integer;
    SubTotal : double;
begin
    FrmVentas.SGListaProductos.Cells[1,FrmVentas.SGListaProductos.RowCount-1] := ECantidad.Text;
    FrmVentas.SGListaProductos.Cells[2,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidad.Caption;
    FrmVentas.SGListaProductos.Cells[3,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigo.Caption;
    FrmVentas.SGListaProductos.Cells[4,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigoBarra.Caption;
    FrmVentas.SGListaProductos.Cells[5,FrmVentas.SGListaProductos.RowCount-1] := DBTDescripcion.Caption;
    FrmVentas.SGListaProductos.Cells[6,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidadPrecio.Caption;
    FrmVentas.SGListaProductos.Cells[7,FrmVentas.SGListaProductos.RowCount-1] := DM.ZQAgregarItems.FieldByName('precio1').AsString;

    FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

    SubTotal := 0;
   // Calcula el SubTotal
   For i:=1 to FrmVentas.SGListaProductos.RowCount-1 do
      SubTotal := SubTotal + StrToFloat(FrmVentas.SGListaProductos.Cells[8,i]);
      FrmVentas.LSubTotal.Caption := FormatFloat('%8.2n',SubTotal);
      //FrmVentas.LSubTotal.Caption := FloatToStr(SubTotal);
  Close;
end;

y me salía ese puñetero error ??
Pues ahora está así y no me sale ese error :)

Código Delphi [-]
procedure TFrmAgregarItems.SBAgregarClick(Sender: TObject);
var i : integer;
    SubTotal : double;
begin
    FrmVentas.SGListaProductos.Cells[1,FrmVentas.SGListaProductos.RowCount-1] := ECantidad.Text;
    FrmVentas.SGListaProductos.Cells[2,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidad.Caption;
    FrmVentas.SGListaProductos.Cells[3,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigo.Caption;
    FrmVentas.SGListaProductos.Cells[4,FrmVentas.SGListaProductos.RowCount-1] := DBTCodigoBarra.Caption;
    FrmVentas.SGListaProductos.Cells[5,FrmVentas.SGListaProductos.RowCount-1] := DBTDescripcion.Caption;
    FrmVentas.SGListaProductos.Cells[6,FrmVentas.SGListaProductos.RowCount-1] := DBTUnidadPrecio.Caption;
    FrmVentas.SGListaProductos.Cells[7,FrmVentas.SGListaProductos.RowCount-1] := DM.ZQAgregarItems.FieldByName('precio1').AsString;

    //FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

    SubTotal := 0;
   // Calcula el SubTotal
   For i:=1 to FrmVentas.SGListaProductos.RowCount-1 do
      SubTotal := SubTotal + StrToFloat(FrmVentas.SGListaProductos.Cells[7,i]);
      FrmVentas.SGSubTotal.Cells[1,0] := Format('%8.2n',[SubTotal]);

  
  Close;
end;

ya ahora decidí mostrar el resultado en un StringGrid pequeñito :) Pero ese no es el problema por que podría haberlo mostrado en el mismo Label que tenía
Ya ahora esta línea :

Código Delphi [-]
//FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

la comenté :D y puedo agregar ahora los Items al StringGrid que contiene los Items sin problema y me da el resultado del precio1 que lo saco con :

Código Delphi [-]
FrmVentas.SGListaProductos.Cells[7,FrmVentas.SGListaProductos.RowCount-1] := DM.ZQAgregarItems.FieldByName('precio1').AsString;

y ya todo bién peroooooo!!! ahora un problema.. como es de suponerse esa línea que comenté lo que hace es cada vés que pasa por ahí aumenta 1 al StringGrid y ahora no aumenta nada :( y pues si agrego otro Item me sobreescribe al que tengo en el StringGrid pero vamos.. eso es lógico por que no hay que aumente a +1 el StringGrid ahora la pregunta.

Por que esa línea me da problemas con el error que tengo en el anterior mensaje ????
Que otra forma tengo de sumar columnas en un StringGrid ??

saludos

Lepe 09-03-2007 12:33:35

Al hacer el bucle, tambien coge la última fila que acabas de añadir en blanco, y al intentar pasar esa celda vacía a Float, es cuando obtienes el error.

Código Delphi [-]
 FrmVentas.SGListaProductos.RowCount := FrmVentas.SGListaProductos.RowCount+1;

    SubTotal := 0;
   // Calcula el SubTotal
   For i:=1 to FrmVentas.SGListaProductos.RowCount-2 do
añade la línea al StringGrid, pero el bucle, hazlo 1 vez menos (ya que sabes que la última línea siempre estará vacía).

Saludos

EMANEMS 04-10-2007 18:38:05

Cita:

Empezado por BlackDaemon (Mensaje 187378)
Pues la verdad que no entendí muy bién :D
Tienes mas de 2 StringGrid verdad ??
Bueno a ver si álguien mas me da una ayuda que todavía no logré resolverla

saludos y gracias por la respuesta :)

EDIT : sobre el error '0.00' IS NOT A VALID FLOATING POINT VALUE lo que hice fué ir a Panel de Control -> Configuración regional y de Idiomas -> Español ( Bolivia ) -> Personalizar -> tengo estos valores :

Todo eso lo tengo en Números

Símbolo decimal : Punto
Símbolo de separación de miles: Coma
separador de listas : Coma

Todo esto en la pestaña Monedas

Símbolo de decimal : Punto
Símbolo de separación de miles : Coma

saludos

HOLA Q TAL QUISIERA VER SI ME PUDIERAN AYUDAR ESTOY EMPESANDO A PROGRAMAR EN DELPHI Y TENGO
UN PROBLEMA CON LOS STRINGGRID

EN UN FOR COLOQUE TRES STRINGGRID
STRINGGRID1
STRINGGRID2
STRINGGRID3

LO QUE QUIERO ES QUE EN EL STRINGGRID3 ME COLOQUE LA SUMA DE LOS NUMERO Q COLOQUE EN EL
STRINGGRID1 Y STRNGGRID2
SEGUN LA POSICION EN LOS CAMPOS LO QUE ESTOY HACIENEDO ES COLOCAR EN UN BUTTON
EL SIG CODIGO

PROCEDURE TFORM1.TOOLBUTTON1CLICK(SENDER: TOBJECT);
BEGIN
STRINGGRID3.CELL[0,0]:=STRINGGRID1.CELL[0,0]+STRINGGRID2.CELL[0,0];
END;

Y ME MARCA EL SIG ERROR INCOMPATIBLE TYPE:'INTEGER' AND 'STRING'
ME PODRIAN AYUDAR A SABER COMO SUMARLOS TOMANDO EN CUENTA LOS PUNTOS DECIMALES Y NUMEROS LARGOS
SELOS AGRADECERE MUCHO GRACIAS

Caral 04-10-2007 18:51:56

hola
Por favor no repitas las preguntas, aqui hay una respuesta, espero te sirva.
Saludos

alexander_lv 06-12-2007 20:59:38

ME MARCA EL SIG ERROR INCOMPATIBLE TYPE:'INTEGER' AND 'STRING'

Código Delphi [-]
PROCEDURE TFORM1.TOOLBUTTON1CLICK(SENDER: TOBJECT);
BEGIN
 STRINGGRID3.CELL[0,0]:=STRINGGRID1.CELL[0,0]+STRINGGRID2.CELL[0,0];
END;


la respuesta es porque no puedes sumar dos cadenas tienes que convertirlas antes de trabajar con ellas

Código Delphi [-]
 PROCEDURE TFORM1.TOOLBUTTON1CLICK(SENDER: TOBJECT);
 BEGIN
 STRINGGRID3.CELL[0,0]:=IntToStr(StrToInt(STRINGGRID1.CELL[0,0])+StrToInt(STRINGGRID2.CELL[0,0]));
 END;

alexander_lv 06-12-2007 21:09:05

devería usar un DBGrid para estos trabajos ??
 
a la pregunta
devería usar un DBGrid para estos trabajos ??


yo personalme tambien uso los StringGrid para mostrar la informacion porque mis aplicaciones son cliente servidor y cuando estan en redes muy malas donde se va mucho la luz o router malos que se caen cada rato que me ha pasado en muchos clientes

se pierde la conexion a la BD y si tengo tengo 20 registros de una factura y no los he grabado y se cae la red pues se pierde

encambio usted tiene toda la informacion en el StringGrid y puedes hacer una reconexxion a la base de datos y no guardar sin problemas

asi lo hago yo y me ha funcionado perfecto


La franja horaria es GMT +2. Ahora son las 18:30:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi