Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Calculos en una Tabla (https://www.clubdelphi.com/foros/showthread.php?t=10913)

silviodp 01-06-2004 17:03:12

Calculos en una Tabla
 
Hola, mi consulta es la siguiente:

Quiero calcular en mi aplicación el monto del Iva de un determinado producto cuando ingreso el precio del mismo en un DBEdit relacionado con éste campo, es decir ingreso el valor y doy Enter (o tabulador) y que me calcule automáticamente el IVA, el tema está en como hago calcularlo si todavía no tengo grabado el PRECIO en mi tabla y el DBEdit no posee ninguna propiedad Text por ejemplo.
Como o en que evento debería realizarlo?
Gracias, saludos.-

Silvio.-

roman 01-06-2004 17:10:50

Yo creo que te convendría usar un campo calculado. Lo agregas en el editor de campos del dataset y lo calculas en el evento OnCalcFields.

// Saludos

eduarcol 01-06-2004 17:11:07

Yo lo haria en la propiedad onexit del texto

eduarcol 01-06-2004 17:13:26

El problema con el campo calculado es que el valor del iva debe ser almacenado en la tabla

roman 01-06-2004 17:14:49

Cita:

Empezado por eduarcol
El problema con el campo calculado es que el valor del iva debe ser almacenado en la tabla

:confused:

tcp_ip_es 01-06-2004 17:16:34

si que posee una propiedad text aunque no aparezca en el object inspector.... para calcular el iva cuando se pulse enter sería más o menos asi:

Código Delphi [-]
procedure form1.dbEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) then
begin

//Calculo del iva
end
end;


Saludos, Tony

eduarcol 01-06-2004 17:19:28

La verdad Roman es que trate de adivinar sobre le diseño de la base de datos :rolleyes: como el iva es un factor que cambia mucho me imagino que en la tabla de factura guarda el valor resultante

roman 01-06-2004 17:24:20

Quizá por iva entendemos cosas distintas. Pero lo que yo pienso es que si va a usar un evento para calcular el iva lo mismo da que lo calcule en OnCalcFields que me parece más adecuado. A ver, si la tabla es

tabla = (id, precio, ....)

Yo agregaría el campo calculado Iva (que yo entiendo como el impuesto sobre el precio, digamos 15%) y en el evento OnCalcFields:

Código Delphi [-]
DataSet['iva'] := 15*DataSet['precio']/100;

// Saludos

tcp_ip_es 01-06-2004 17:30:17

estoy con Roman(suponiendo que el iva lo quiera meter en otro campo llamado iva) pero como había dicho que lo quería hacerlo al salirse del control o pulsar enter.......

eduarcol 01-06-2004 17:30:34

Entendemos por iva lo mismo, lo unico que diferencia es el diseño de la tabla como te dije antes, :D...
Cita:

Empezado por Roman
tabla = (id, precio, ....)

en cambio

Cita:

Empezado por eduarcol
tabla = (id, precio, Iva ....)

.

en ese caso el iva esta dentro de la tabla, y asumi que lo que queria era el evento dond calcular el valor de un campo que ya existe :D :)

roman 01-06-2004 17:34:05

Cita:

Empezado por eduarcol
tabla = (id, precio, Iva ....)

en ese caso el iva esta dentro de la tabla, y asumi que lo que queria era el evento dond calcular el valor de un campo que ya existe.

De acuerdo, pero en tal caso yo recomendaría rediseñar la tabla a menos que haya una necesidad muy específica para guardar permanentemente el valor de un campo calculado.

// Saludos

eduarcol 01-06-2004 17:38:22

Cita:

Empezado por roman
De acuerdo, pero en tal caso yo recomendaría rediseñar la tabla a menos que haya una necesidad muy específica para guardar permanentemente el valor de un campo calculado.

Yo lo veo desde este punto de vista
Cita:

Empezado por eduarcol
La verdad Roman es que trate de adivinar sobre le diseño de la base de datos como el iva es un factor que cambia mucho me imagino que en la tabla de factura guarda el valor resultante


silviodp 01-06-2004 21:41:24

Calculos en una Tabla
 
Bueno, en mi tabla ya tengo definido el campo Iva, y quiero en éste guardar el valor del mismo permanentemente, en definitiva que me aconsejan hacer??o como??
Gracias.

Silvio.-

jachguate 02-06-2004 05:43:55

El evento apropiado para calcular el IVA, es el evento OnChange del field [importe] o como se llame en tu tabla.

Personalmente creo que la información del iva puede o no ser redundante, de acuerdo a diversos criterios y a la legislación de los diferentes paises. Aca en Guatemala, por ejemplo, todos los artículos (incluyendo alimentos, medicinas, licores y demás yerbas) están sujetos a una tasa única, con lo que regularmente se hace necesario unicamente almacenar dicha tasa en el encabezado de la factura.

Pue'que en otros paises si sea necesario almacenar puntualmente el valor en cada detalle. En todo caso, tu duda está resuelta y yo, al menos, no discutiré tu diseño de base de datos (que ya es harina de otro costal).

Hasta luego.

;)

roman 02-06-2004 06:22:05

Cita:

Empezado por jachguate
y yo, al menos, no discutiré tu diseño de base de datos (que ya es harina de otro costal).

Bueno, realmente yo, al menos, no estaba discutiendo el diseño en el sentido de crítica; simplemente se trataba de una sugerencia para el caso de que fuera una posibilidad que no hubiera considerado. ;)

// Saludos

silviodp 02-06-2004 13:36:14

Calculos en una tabla
 
En el evento OnChange de mi Field 'Precio' (que es como se llama) es el que me convendría utilizar?, y en él asigno al campo Iva, el valor o como es?, la verdad no me doy cuenta?, y en el caso de hacerlo con un campo calculado como sería?
Te comento que la Tasa de Iva acá en la Argentina es del 21%, y algunas cosas como por ejemplo los monitores, etc. es de el 10,5%.
Gracias, saludos.-

Silvio.-

eduarcol 02-06-2004 15:41:55

Cita:

Empezado por silviodp
En el evento OnChange de mi Field 'Precio' (que es como se llama) es el que me convendría utilizar?

Mira se te han dado varias opciones prueba cada una de ellas y en base a los resultados obtenidos prueba cual te conviene mas.

Cita:

Empezado por silviodp
y en él asigno al campo Iva, el valor o como es?, la verdad no me doy cuenta?,

Pues tienes que darte cuenta tu diseñastes la base de datos, asi que solo tu sabras qque valor o porcentaje?? vas a almacenar en ese campo

Cita:

Empezado por silviodp
y en el caso de hacerlo con un campo calculado como sería?

Dejemos que delphi responda eso

Cita:

Empezado por Ayuda de delphi
Occurs when an application recalculates calculated fields.

property OnCalcFields: TDataSetNotifyEvent;

Description

Write an OnCalcFields event handler to take specific action when an application recalculates calculated fields. A calculated field is one that derives its value from the values in one or more fields in the dataset, sometimes with additional processing.

When the AutoCalcFields property is True, OnCalcFields is triggered when:

A dataset is opened.
A dataset is put into dsEdit state.
Focus moves from one visual control to another, or from one column to another is a data-aware grid control and modifications were made to the record.
A record is retrieved from a database.

Note: When the AutoCalcFields property is True, an OnCalcFields event handler should not modify the dataset (or a linked dataset if it is part of a master-detail relationship), because such modifications retrigger the OnCalcField event, leading to recursion.

If an application permits users to change data, OnCalcFields is frequently triggered. To reduce the frequency with which OnCalcFields occurs, set AutoCalcFields to False. When AutoCalcFields is False, OnCalcFields is not called when changes are made to individual fields within a record.

Warning: When the dataset is the master table of a master-detail relationship, OnCalcFields occurs before detail sets have been synchronized with the master table.

Nunca subestime el valor de F1 ;)

Cita:

Empezado por silviodp
Te comento que la Tasa de Iva acá en la Argentina es del 21%, y algunas cosas como por ejemplo los monitores, etc. es de el 10,5%.

Esos son los factores que tienes que estudiar para el diseño de la base de datos

Espero te sirva :D

Por cierto

Cita:

Empezado por Roman
Bueno, realmente yo, al menos, no estaba discutiendo el diseño en el sentido de crítica;

En ningun momento, tampoco fue mi intencion discutir, solo expuse como lo haria y porque :D

jachguate 02-06-2004 17:26:39

Solo te hago notar que si el campo "precio" es el precio unitario, y el "iva" es el iva total de la línea no solo debieras calcular el iva en el onChange del precio, sino también en el de las unidades. Para ello es podes compartir el mismo método en el OnChange de ambos fields, o definir un método, digamos CalculaIva que es invocado desde ambos eventos. La tercera opción es hacerlo "a mano" en cada evento, pero estarias innecesariamente duplicando código... ademas de que al ser necesaria una modificación habrá dos puntos que actualizar, y si para ese entonces ya no lo tenes presente... plaf!... un bug mas... :eek:

Hasta luego.

;)

Kalex 02-02-2010 21:38:34

el calcular el iva no es el problema...como harias si el IVA cambia...kiero k mi software siga funcionando en caso ke el iva cambie al 15 al 16 al 20% o a cualkier otro porcentaje...k me sugieren hacer


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

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