FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
triggers sobre vistas
Deseo hacer un trigger sobre una vista, de forma tal que realice un cálculo sobre algún campo de la vista.
La vista luce asi:
y el trigger luce asi:
El motor de la base de datos no genera ningún tipo de error al crear el trigger sobre la vista pero no hace lo que deseo que haga. La vista me devuelve los siguientes registros Código:
ID_ITEM ID_BODEGA CANTIDAD COSTO TOTAL_COSTO PRIORIDAD 0001 01 20 25 0 5 0001 01 50 25 0 5 0002 01 10 25 0 5 0002 01 20 25 0 5 0003 01 2 25 0 5 0003 01 100 25 0 5 Es posible realizar este tipo de actualizaciones con Firebird? Gracias por su colaboración |
#2
|
||||
|
||||
Hola.
¿ No seria mucho más sencillo incorporar ese calculo en la misma consulta, sin necesidad de ningún trigger ?
NOTA : Desconozco si los triggers sobre vistas, se pueden usar de la forma que deseas. Aunque no lo veo nada claro. Tal como lo tengo entendido solo són para poder hacer modificables las vistas, es decir que si modificas un registro de la vista, salte el trigger para que tu código pueda indicar que tablas hay que modificar realmente. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
Gracias por responder guillotmarc, creo que no explique lo suficiente.
El problema que tengo que resolver es el siguiente: Estoy desarrollando una aplicación que maneja el control de inventarios de una empresa, resulta que el sistema debe costear las existencias de inventario utilizando el método del promedio ponderado. Básicamente, las transacciones son entradas y salidas del almacén donde está la mercancia, para esto he tratado de resolver el problema usando una tabla para las facturas de ventas (Salidas del almacén) y devoluciones de facturas de venta (Entrada del almacén) y otra tabla para los documentos que tiene que ver con las compras de mencancía, estos son Entradas de almacén (Entradas del almacén) y Devoluciones de compra (Salidas del almacén). Para realizar el cálculo del costo promedio los transacciones se realizan así: Código:
Fecha detalle |Entradas |Salidas |saldos |costo unit cant|costo cant|costo cant| costo ----------------------------------------------------------------------- 20/10/03 "compra" 10 150,0000 0 0 10 150,000 15,000 21/10/03 "compra" 40 600,000 0 0 50 750,000 15,000 22/10/03 "venta " 0 0 30 450,000 20 300,000 15,000 23/10/03 "dev.comp" (5) (75,000) 0 0 15 225,000 15,000 22/10/03 "dev.venta" 0 0 (2) (30,000) 17 255,000 15,000 2. En salidas: se registra la cantidad de mercancia vendida; y en la columna del costo el resultado de multiplicar la cantidad por el costo unitario del renglón anterior. 3. En saldos: para obtener los valores de esta columna, a los valores del saldo anterior se le adicionan las entradas o se les disminuyen las salidas. 4. Costo unitario: para obtener el costo unitario se toma la columna de saldo anterior y se divide el costo total entre la cantidad total de cada renglón. El costo total varia siempre que se compra mercancía a precio diferente; cuando se registra la salida se mantiene el último costo unitario. Las estructuras de las tablas de ventas y compras lucen más o menos así:
Lo que desea realizar con la vista es hacer el cálculo del costo promedio de forma automática, debido a que si por algún motivo uno de los registros correspondiente a entradas es retirado no tenga que recorrer toda la tabla para recalcular el costo unitario y mucho menos el saldo.
Hasta ahora no conozco una forma de hacer una consulta SQL que me permita obtener el valor del costo unitario. Por esta razon envio algunos campo de la vista en cero y posteriormente con el trigger deseaba poder modificar dichos campos. Si no es posible hacer esto de que forma podría obtener este resultado? Cómo hago para que me queden bien organizados los valores que tiene forma de tabla como en el ejemplo de arriba, la verdad intenté de varias formas y no logre que quedará organizado. Saludos |
#4
|
||||
|
||||
Hola.
Con el trigger no puedes hacerlo, puesto que no están diseñados para este uso. Puedes utilizar un procedimiento almacenado. Ejplo. sencillo de procedimiento almacenado que devuelve un conjunto de datos :
NOTA: Antes del suspend puedes hacer todos los cálculos necesarios sobre el coste unitario. Para recoger los datos del procedimiento almacenado puedes hacer algo como : select * from "CLIENTES_Lista" Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
Hola
Trataré de solicionar el problemas de acuerdo con tus sugerencias. Gracias por tu valiosa colaboración. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|