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 31-10-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
No atino a encontrar como......

Que tal, como se encuentran?????

Tengo mil dudas, si me lo permiten he aqui una de ellas, estoy realizando una aplicación con bases de datos en D6 y Pdx, sucede que necesito presentar en un Grid el contenido de una tabla de productos y en base a la información en ella, del precio por ejemplo, realizar operaciones con la cantidad vendida, el problema que me atora es que la cantidad vendida se debe registrar en el mismo Grid y el resultado del precio por la cantidad vendida debe registrarse también en el mismo Grid. Pense acerlo con DBGrid ya que debo guardar en registro de venta por cliente, pero a la hora de los cálculos......, despues pense en usar StringGrid pasandole los registros pero lo mismo a la hora de acceder a los valores en los registros y pasar el resultado a la tabla.

De antemano agradesco su tiempo y ayuda.

Gracias
Responder Con Cita
  #2  
Antiguo 31-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Como la cantidad vendida cambiará a cada momento, está claro que no se puede guardar en este tabla.

Si tienes una tabla con las unidades vendidas, normalmente será la tabla de líneas de factura de venta y otra con los productos y precios, lo lógico sería ejecutar un encuentro entre tablas por medio de SQL y presentar de esta manera en cada momento puntual las unidades vendidas y el precio total de estas.

Estoy partiendo de que todas se vendan al precio tarifa, lo cual pienso no será así, puesto que habrá descuentos, precios especiales....

Yo lo que hago en previsioón de este tipo de contingencias es que la línea de ventas, grabo la fecha, el precio de compra del producto, el precio tarifa y el precio de venta, aunque parezca un poco redundante, esto da una autonomía a la hora de hacer las consultas, puesto que tirando solamente de las líneas tengo la fecha de venta, el vendedor, el precio, las unidades y si hay que calcular rendimientos tamibién tengo el precio de compra.....

Lo primero que apunte quedaría algo como esto:
Código SQL [-]
  Select P.Producto, P.precio, L.Unidades, P.Precio * L.Unidades as Total
  From Productos as P And LineasVentas As L
  Where P.Codigo = L.CodProducto
  And L.FechaVenta > '01/31/2004'

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 01-11-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Gracias.......

Muchas gracias.

En verdad agradesco tu tiempo, pero tengo otra duda al respecto, se supone que el usuario tiene la libertad de desplazarse por el Grid para anotar la cantidad que se vende por producto, vamos, en el Grid se presentara un campo Cantidad (que lo captura el usuario en el momento de la venta), Producto, Existencia y Costo, y al momento que el usuario captura la cantidad de producto que se vende (en el Grid) debe de aparecer el costo de la compra de ese producto, es decir, la cantidad de producto por su costo en otro campo del Grid y así sucesivamente con todos los productos hasta que se totalice la compra, obteniendose en otro campo (Sub Total o Total) y en otro control (por ejemplo un DBEdit) el total de la compra de cada cliente, esto para llevar un control de compras por cliente y realizar la impresión del recibo o factura correspondiente. Mi problema es que ignoro como hacer esto, es decir, no se como manejar un campo independiente para capturar la cantidad que se vende, y por consiguiente como asignar a otro campo el resultado de la venta de cada producto todo en el mismo grid (de hecho parte de mi duda, es sobre como hacer referencia a los valores dentro de cada campo del DBGrid por cada registro, pense en la propiedad Value pero creo que....... no va por ahi, asi es de que le agradeceria mucho su ayuda u orientación.
Gracias mil.

Phacko

Última edición por Phacko fecha: 01-11-2004 a las 07:14:28. Razón: incompleto
Responder Con Cita
  #4  
Antiguo 01-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Entoncés la cosa es mucho más simple, tienes que programa el evento OnChange de los campos afectados en el cálculo.

Por ejemplo si lo que cambían son las unidades y queremos que automáticamente nos calcule el total, puesto que el precio ya lo tenemos al elegir el producto, en el evento onChange del Campo unidades:
Código Delphi [-]
 MITablaTotal.Value:=MiTablaUnidades.Value * MiTablaPrecio.Value;

Y si hubiera algún campo más implicado en este cálculo hacer lo propio, si fueran muchos los campos, sería mejor crear un procedimiento y llamarlo desde el evento OnChange de los campos implicados.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 02-11-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Gracias.......

Gracias Marcos, quiza ya este saturado de tanto darle vueltas, pero no he conseguido hacer lo que pretendo, he pensado en usar un campo en la misma tabla de catalogo de productos para capturar las cantidades que se venden para hacer las anotaciones en cada venta y al termino de ésta limpiar dicho campo y se afecte únicamente el campo “existencia“ que de hecho se debe modificar después que se ha hecho la venta. Pero el problema que aun tengo es que no he podido asignar valores directamente a los campos, he revisado y no he encontrado donde tengo el error, realice lo que me indicaste y nada (a no ser que haga referencia a los campos en forma equivocada: nombre del componente Ttable seguido del nombre del campo sin separarlo con punto, lo intente separándolos y tampoco incluso ose usar el nombre de la tabla y los mismo, a sope), prove con:

TAble1.FieldByName('CostoCompra').AsInteger:=Table1.FieldByName('Cantidad').AsInteger*Table1.FieldBy Name('Precio').AsInteger;

Y tampoco. El Grid deberia mostrar algo así:

Cantidad Producto Existencia Precio CostoCompra
Piñas 10 10.00
Col 15 6.00
Melon 8 11.00

donde se debe, como ya lo he dicho, capturar la cantidad y el CostoCompra deberia presentarse.

Me siento avergonzado por tanta Guerra que doy, pero ya tengo algunos días así, tome el texto “el lado oscuro de Delphi 4” y no he atinado a resolverlo, por ello me porto muy macho y aguanto mi vergüenza para volver a preguntar.
De ante mano agradesco su tiempo y sobre todo su ayuda.

Gracias.

A, cuando saque el programa, aun tengo esperanza, vamos mitas en las ganancias .

Última edición por Phacko fecha: 02-11-2004 a las 01:45:06. Razón: Incompleto
Responder Con Cita
  #6  
Antiguo 02-11-2004
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Chequea este código que envio... precisamente, creo, es lo que necesitas... aqui intervienen varias tablas... espero te sirva. Saludos
Código Delphi [-]
procedure TfrmFacturacion.tblItemsNotaBeforePost(DataSet: TDataSet);
begin
 tblItemsNotaITE_Total.AsFloat :=
 tblItemsNotaITE_Cantidad.AsFloat *
 tblItemsNotaPrecio.AsFloat;
 tblItemsNotaITE_id_NotaCredito.AsInteger :=
 tblNotaCreditoNotaCredito_id.AsInteger;
 if tblItemsNotaITE_Cantidad.AsString = '' then
  ShowMessage('Indique la cantidad de productos');
end;
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.
Responder Con Cita
  #7  
Antiguo 03-11-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Continuo en lo mismo

Muchas gracias por su ayuda, pero aun sigo con el mismo problema, probe lo que me sugirieron y nada. No he entendido como es que debo hacer referencia a los valores en cada campo, ya trate de la siguiente manera:
NombreComponenteTTableNombredelCampo.Value:=NombreComponenteTTableNombredelCampo.Value*......
por ejemplo: TablaPInicio.Value:=TablaPCantidad.Value*TablaPPrecio.Value;
manda mensaje diciendo que TablaPInicio no esta declarado.

Y de esta otra forma:
TablaP['inicio'].Value:=TablaP['Cantidad'].Value*TablaP['Cantidad'].Value;
Tambien de esta forma:
TablaP['inicio'].AsFloat:=TablaP['Cantidad'].AsFloat*TablaP['Precio'].AsFloat
y en ambos casos manda el siguiente error "Variant does not reference an automation object"

En otra parte del programa donde se capturan los datos de clientes, empleo lo siguiente:
Tabla.FieldByName('Nombre').AsString:=ENombre.Text;
y me trabaja muy bien, trate con esto y nada. Elimine todo del form y comence nuevamente pero sigue lo mismo, estoy que me jalo los pelos, bueno ya me los arranque, que puede ser????.

Gracias por su ayuda, si tuvieran alguna idea de lo que pasa, se los agradesco como no tienen idea, que me lo hagan saber.
Responder Con Cita
  #8  
Antiguo 04-11-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como bien dices hay 400 formas de acceder a un campo. La que se está usando en este hilo debe seguir una pequeña norma.

das doble clic en la tabla, boton derecho y añadir campos (tener todos los campos ahí es lo que se conoce como "Campos persistentes").

Despues de esto, Si la tabla está en un datamodule llamado DTM y la tabla se llama Table1 y el campo CostoCompra haremos referencia como:

DTM.TAble1CostoCompra.AsXXX


Añadir que si usas Value estarás trabjando con tipos Variants, si pones AsXXXX usarás el tipo concreto que quieras, para este caso, creo conveniente usar AsCurrency o AsFloat

Saludos

Un detalle más, si modificas el nombre de un campo en la base de datos, o bien creas uno nuevo, deberás volver a añadir los campos persistentes para que Delphi se actualice.

Última edición por Lepe fecha: 04-11-2004 a las 11:34:18.
Responder Con Cita
  #9  
Antiguo 04-11-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
De ninguna forma.....

Gracias por su ayuda, pero continuo con el mismo problema.

Estoy haciendo lo que me han indicado en un nuevo proyecto, para evitar vicios que tenga en el proyecto anterior.

Tengo una tabla "Operaciones.db" y un componente TTable "Table1" en la form y un "DBGrid1", los campos de la tabla son: Nombre, Salario, Dias, Neto.

Capturo nombre, salario y dias y nada que se actualiza el campo "Neto" con la operacion de Salario*Dias, lo hago de la siguiente forma:

Table1Neto.AsInteger:=Table1Salario.AsInteger*Table1Dias.AsInteger;

con lo que me da el siguiente error:
[Error] Unit1.pas(46): Undeclared identifier: 'Table1Neto'

Que estoy haciendo mal????

Gracias.
Responder Con Cita
  #10  
Antiguo 04-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues el error está bien claro, o el componente Ttable, no se llama Table1 o bien el campo en cuestión
no se llama neto.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 05-11-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Lo he verificado

Gracias Marcos, pero en efecto son sus nombres, de hecho pense en esa posibilidad y después de verificar 2 ocaciones opté por seleccionar copiar y pegar los nombres y adivina... lo mismo, ya no me da error (algo que movi...) pero no pasa nada en la tabla.
Responder Con Cita
  #12  
Antiguo 05-11-2004
Javier Buendia Javier Buendia is offline
Registrado
 
Registrado: jun 2003
Posts: 5
Poder: 0
Javier Buendia Va por buen camino
Mira a ver si el error esta en los campo persistentes

Pues eso que revises los campos persistentes del tTable,
de todas formas el codigo lo tienes que situar en el evento beforepost del tTable

Un Saludo


Cita:
Empezado por Phacko
Gracias por su ayuda, pero continuo con el mismo problema.

Estoy haciendo lo que me han indicado en un nuevo proyecto, para evitar vicios que tenga en el proyecto anterior.

Tengo una tabla "Operaciones.db" y un componente TTable "Table1" en la form y un "DBGrid1", los campos de la tabla son: Nombre, Salario, Dias, Neto.

Capturo nombre, salario y dias y nada que se actualiza el campo "Neto" con la operacion de Salario*Dias, lo hago de la siguiente forma:

Table1Neto.AsInteger:=Table1Salario.AsInteger*Table1Dias.AsInteger;

con lo que me da el siguiente error:
[Error] Unit1.pas(46): Undeclared identifier: 'Table1Neto'

Que estoy haciendo mal????

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


La franja horaria es GMT +2. Ahora son las 18:00:28.


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