Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No atino a encontrar como...... (https://www.clubdelphi.com/foros/showthread.php?t=15661)

Phacko 31-10-2004 03:21:34

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

marcoszorrilla 31-10-2004 11:29:31

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.

Phacko 01-11-2004 05:10:23

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

marcoszorrilla 01-11-2004 10:13:50

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.

Phacko 02-11-2004 00:13:33

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 :p .

Pablo Carlos 02-11-2004 15:32:56

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;

Phacko 03-11-2004 20:57:28

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.

Lepe 04-11-2004 11:30:23

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.

Phacko 04-11-2004 21:24:01

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.

marcoszorrilla 04-11-2004 23:19:00

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.

Phacko 05-11-2004 00:10:43

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.

Javier Buendia 05-11-2004 01:14:33

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.



La franja horaria es GMT +2. Ahora son las 13:26:11.

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