Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-12-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
ayuda con mantenimiento de sistema

bueno como comente hace unos dias estoy en actualizacion de un pequeño punto de venta y quiero actualizar el form de facturacion, para ello utilizo un TStringGrid como detalle de factura pero la verdad es engorroso mostrar informacion en el ya lo he hecho de hecho funciona, pero he oido que todo este codigo se podria evitar si pudiera crear una tabla temporal con el componente JVMemorydataset de l aJEDi, ya logre crear la tabla y agregar elementos, pero no se como interactuar con ellos y como afectaria a mi base de produstos.

ongo el codigo que utilizo para llegar en Tsgrind Grid espero algun consejo pero de antamno muchas gracias
Código Delphi [-]
procedure TFfactura.txtcodigoExit(Sender: TObject);
var
 wprecio_total:Double;
 i:Integer;
 {variables para modificaciones}
 wcodigomodificar,wdescripcionmodificar:string;
 wventa_totalmodificada:Double;
 wdescuentomodificar,wpreciomodificar:Double;
 wtotalmodificar:Double;
 wOK:Boolean;
 begin
 wcodigobarras:=Trim(Ffactura.txtcodigo.Text);
  if wcodigobarras<>'' then
   begin
    For i:=1 to Ffactura.SGFact.RowCount-1 do
     if Ffactura.SGFact.Cells[0,i] = Trim(wcodigobarras) then
      begin
       wOK:=True;
       {codigo para cuando el registro ya existe en el detalle de la factura}
       if wOK=True then
        begin
         {tomo los registros que existen en el flexgrid de acuerdo al registro que voy agregar}
         wcantidadmodificar:=StrToFloat(SGFact.Cells[2,i]);//tomo el valor de la cantidad que tengo en el flexgrid
         wpreciomodificar:=StrToFloat(Ffactura.SGFact.Cells[3,i]);//paso el valor del precio a la variablde de precio
         wcodigomodificar:=Ffactura.SGFact.Cells[0,i]; //tomo el codigo de barras
         wdescripcionmodificar:=Ffactura.SGFact.Cells[1,i]; //tomo la descripcion

         if (wcantidadmodificar<=0) and (wdescuento_considerar=0) then
          begin
           Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
           Ffactura.SGFact.Cells[1,Cuenta]:=wdescripcionmodificar;
           Ffactura.wprecio_venta:=wprecio_venta;//StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
           Ffactura.SGFact.Cells[2,Cuenta]:=FloatToStr(wcantidad_venta+1);
           Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
           //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
           Ffactura.SGFact.Cells[4,Cuenta]:='0.00';//pongo descuento igual a cero
           //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
           wcantidad_venta:=1;
           wdescuento_considerar:=0;
           wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
           wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
           wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
           SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
           //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
           //calculo totales
           calcula_totales;
           wcantidad_venta:=0;
           wdescuento_considerar:=0;
           Ffactura.txtcodigo.Text:='';
           ffactura.txtcodigo.SetFocus;
           Cuenta:=Cuenta+1;
           exit;
          end;
          if (wcantidad_venta>=1) and (wdescuento_considerar=0) then
           begin
            Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
            Ffactura.SGFact.Cells[1,Cuenta]:=wdescripcionmodificar;//(FieldByname('nombre').AsString);//agrego nombre del producto
            Ffactura.wprecio_venta:=wprecio_venta;//StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
            Ffactura.SGFact.Cells[2,Cuenta]:=FloatToStr(wcantidad_venta+1);
            Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
            //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
            Ffactura.SGFact.Cells[4,Cuenta]:='0.00';//pongo descuento igual a cero
            //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
            //wcantidad_venta:=1;
            wdescuento_considerar:=0;
            wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
            wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
            wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
            SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
            //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
            //calculo totales
            calcula_totales;
            wcantidad_venta:=0;
            wdescuento_considerar:=0;
            Ffactura.txtcodigo.Text:='';
            ffactura.txtcodigo.SetFocus;
            Cuenta:=Cuenta+1;
            exit;
           end;
           if (wcantidad_venta>=1) and (wdescuento_considerar>0) then
            begin
             Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
             Ffactura.SGFact.Cells[1,Cuenta]:=wdescripcionmodificar;//(FieldByname('nombre').AsString);//agrego nombre del producto
             Ffactura.wprecio_venta:=wprecio_venta;//StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
             Ffactura.SGFact.Cells[2,Cuenta]:=FloatToStr(wcantidad_venta);
             Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
             //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
             Ffactura.SGFact.Cells[4,Cuenta]:=FloatToStr(wdescuento_considerar);
             //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
             //wcantidad_venta:=1;
             wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
             wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
             wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
             SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
             //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
             //calculo totales
             calcula_totales;
             wcantidad_venta:=0;
             wdescuento_considerar:=0;
             Ffactura.txtcodigo.Text:='';
             ffactura.txtcodigo.SetFocus;
             Cuenta:=Cuenta+1;
             exit;
            end;
         Exit;
        end;
      end;
    {verifico la informacion del resultado para ver si agrego por primera vez el producto}
   if wOK=False then
    begin
     if wcodigobarras<>'' then
        begin
         with Fmodulo.Qry_Temp do
          begin
           Close;
           sql.clear;
           SQL.Add('select * from articulo');
           SQL.Add('where codigobarras=:Pcodigobarras');
           Parameters.ParamByName('pcodigobarras').Value:=Trim(wcodigobarras);
           try
            open;
             if not Fmodulo.Qry_Temp.IsEmpty then
              begin
               while not Fmodulo.Qry_Temp.Eof do
                begin
                 If Cuenta > 1 then SGFact.RowCount := SGFact.RowCount + 1;
                 if (wcantidad_venta<=0) and (wdescuento_considerar=0) then
                  begin
                   Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
                   Ffactura.SGFact.Cells[1,Cuenta]:=(FieldByname('nombre').AsString);//agrego nombre del producto
                   Ffactura.wprecio_venta:=StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
                   Ffactura.SGFact.Cells[2,Cuenta]:='1';
                   Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
                   //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
                   Ffactura.SGFact.Cells[4,Cuenta]:='0.00';//pongo descuento igual a cero
                   //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
                   wcantidad_venta:=1;
                   wdescuento_considerar:=0;
                   wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
                   wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
                   wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
                   SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
                   //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
                   //calculo totales
                   calcula_totales;
                   wcantidad_venta:=0;
                   wdescuento_considerar:=0;
                   Ffactura.txtcodigo.Text:='';
                   ffactura.txtcodigo.SetFocus;
                   Cuenta:=Cuenta+1;
                   exit;
                  end;
                  if (wcantidad_venta>=1) and (wdescuento_considerar=0) then
                   begin
                    Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
                     Ffactura.SGFact.Cells[1,Cuenta]:=(FieldByname('nombre').AsString);//agrego nombre del producto
                     Ffactura.wprecio_venta:=StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
                     Ffactura.SGFact.Cells[2,Cuenta]:=FloatToStr(wcantidad_venta);
                     Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
                     //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
                     Ffactura.SGFact.Cells[4,Cuenta]:='0.00';//pongo descuento igual a cero
                     //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
                     //wcantidad_venta:=1;
                     wdescuento_considerar:=0;
                     wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
                     wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
                     wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
                     SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
                     //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
                     //calculo totales
                     calcula_totales;
                     wcantidad_venta:=0;
                     wdescuento_considerar:=0;
                     Ffactura.txtcodigo.Text:='';
                     ffactura.txtcodigo.SetFocus;
                     Cuenta:=Cuenta+1;
                     exit;
                   end;
                   if (wcantidad_venta>=1) and (wdescuento_considerar>0) then
                    begin
                     Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;//agrego codigo de wcodigobarras
                     Ffactura.SGFact.Cells[1,Cuenta]:=(FieldByname('nombre').AsString);//agrego nombre del producto
                     Ffactura.wprecio_venta:=StrToFloat(FieldByname('precioventa').AsVariant);//pongo el precio de venta en la variable de precio
                     Ffactura.SGFact.Cells[2,Cuenta]:=FloatToStr(wcantidad_venta);
                     Ffactura.SGFact.Cells[3,Cuenta]:=FloatToStr(Ffactura.wprecio_venta);//pongo el precio del articulo con formato de miles
                     //Ffactura.SGFact.Cells[3,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[3,Cuenta]));
                     Ffactura.SGFact.Cells[4,Cuenta]:=FloatToStr(wdescuento_considerar);
                     //pongo las variables de cantidad y descuento en numero para poder realizar operaciones
                     //wcantidad_venta:=1;
                     wimporte_del_descuento:=((wprecio_venta*wdescuento_considerar)/100);
                     wprecio_con_descuento:=(wprecio_venta-wimporte_del_descuento);
                     wventa_total_importe:=(wcantidad_venta * wprecio_con_descuento);
                     SGFact.Cells[5,Cuenta]:=FloatToStr(wventa_total_importe);
                     //Ffactura.SGFact.Cells[5,Cuenta]:=FormatFloat('###,###,###,##0.00', StrToFloat(Ffactura.SGFact.Cells[5,Cuenta]));
                     //calculo totales
                     calcula_totales;
                     wcantidad_venta:=0;
                     wdescuento_considerar:=0;
                     Ffactura.txtcodigo.Text:='';
                     ffactura.txtcodigo.SetFocus;
                     Cuenta:=Cuenta+1;
                     exit;
                    end;
                  Next;
                end;
              end
              else
              begin
               Application.MessageBox('No existe Producto en almacén'+CHR(13)+'con el Código de Barras proporcionado.','Error de Búsqueda',MB_TASKMODAL+ MB_ICONERROR);
               Ffactura.txtcodigo.Text:='';
               Ffactura.txtcodigo.SetFocus;
               Exit;
              end;
           except
            on E:EOleException do
             begin
              MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
             end;
           end;
          end;
        end;
     Exit;
    end;

   end;
 end;
Responder Con Cita
  #2  
Antiguo 27-12-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por microbiano Ver Mensaje
...ya logre crear la tabla y agregar elementos, pero no se como interactuar con ellos y como afectaria a mi base de produstos.
No he trabajado con el componente que comentas, pero sí con algunos que te dan funcionalidades similares; TClientDataset o las tablas en memoria de las Rx o de las Quantum.

Normalmente la forma de interactuar con estos registros es similar a como lo harías con una tabla normal; Con los mismos métodos y de la misma manera, así que no se cual es el problma en ese sentido. Si ya has conseguido crearla y añadir elementos, el resto de operaciones deben se similares.

Estas tablas almacenan datos en memoria, en tu caso las líneas de la factura. Lo lógico es que se creen elementos nuevos que luego debes volcar a la tabla física (INSERT), o que cargues elementos ya existentes y después de las modificaciones debas actualizar la tabla física (UPDATE).

En el caso de TClientDataSet, te facilita acceder "fácilmente" a los cambios realizados (nuevos registros, actualizaciones y borrados) en memoria que debes volcar a la tabla física y tienes operaciones para realizarlas. En el resto deberás buscar en las propiedades si hay alguna propiedad que te marca si cada registro ha sufrido cambios. Si no existen, deberás hacer el recorrido de forma manual e ir comparando 1 a 1.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 27-12-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
gracias amigo neftali, que posibilida existe de que me ponga un ejemplo de como se hacer.


de antemano muchas gracias por la respuesta amigo mio.
Responder Con Cita
  #4  
Antiguo 27-12-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por microbiano Ver Mensaje
gracias amigo neftali, que posibilida existe de que me ponga un ejemplo de como se hacer.
Como ya te he dicho, el problema es que no he trabajado con este componente y no sé cómo es.

Si se tratara de TClientDataSet, por ejemplo, basta con buscar en la ayuda o en los foros sobre ApplyUpdates, que es el método encargado de "volcar" los cambios que se han realizado en memoria sobre la Base de Datos física.
Una vez realizados los cambios, el componente te devuelve información del proceso y de los posibles errores que haya podido haber. Para ello hay eventos y métodos (Reconcile, OnReconcileError,...).

Hay otros como el de las QuantumGrid, que sólo te da un descendiente de TDataSet, pero no te facilita el trabajo de actualizar; Así que todo eso debes hacerlo de forma manual. Recorrer el DataSet en memoria e ir realizando las operaciones (Insert, delete, Update) sobre la Base de Datos física de forma manual.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 27-12-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
ok no te preocupes de antemano muchas gracias :-)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mantenimiento a Access Jucho69 Conexión con bases de datos 17 22-05-2010 11:43:38
Cuanto cobrar por mantenimiento del sistema? nfrfabian Varios 4 10-11-2007 00:12:15
Mantenimiento De Registro RDELROSARIOM Conexión con bases de datos 1 22-04-2005 23:15:34
Curso de mantenimiento del sistema para principiantes. marcoszorrilla Humor 0 16-11-2003 09:41:10


La franja horaria es GMT +2. Ahora son las 10:10:23.


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
Copyright 1996-2007 Club Delphi