Cuando trabajamos con producción y las estructuras de ordenes, algo que sucede en ocasiones son los «dichoso» decimales en los componentes para indicar la proporción con un producto acabado como cuando ese calculo lo multiplicamos por el total de unidades, metros, kg, etc… del producto a producir.
Geinfor ERP nos dota de ciertas herramientas de redondeo o de calculo de formulas en estructuras que son muy útiles, pero con nuestros TRIGGER en la base de datos este trabajo puede ser mucho más rápido y sencillo.
Para no faltar a mi ritual,
NINGUNA DE LAS ACCIONES QUE VOY A EXPLICAR TIENE SOPORTE POR PARTE DE GEINFOR. MUCHO OJO Y BAJO VUESTRA RESPONSABILIDAD
Como os comentaba, GEINFOR ERP nos dota de 2 opciones:
- Un tipo de unidad que siempre redondeará la cantidad necesaria siempre a 0 decimales y con redondeo superior. Esta puede ser perfectamente válida salvo que lo que busquemos es un redondeo «natural». Me explico. Con la función de Geinfor, 6.99 lo redondearía a 7 pero 7.0001 lo llevaría a 8. Pero si es 0.01 es producido por un «error» de decimales en la estructura pues es un poco fastidio
- La otra opción es aprovechar todo el potencial de uso de formulas, pero si ya tenemos muchas estructuras y tenemos que revisarlas y actualizarlas todas para que utilicen la formula es un poco «tostón»
Si nos tiramos a automatizar con triggers, el TR serían el siguiente
CREATE OR REPLACE TRIGGER TR_ESTRUCTURA_ORDENES_CR BEFORE INSERT ON ESTRUCTURA_ORDENES REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL BEGIN ATOMIC IF (SELECT MAESTRO_DE_ARTICULOS.UNIDAD_INTERNA FROM MAESTRO_DE_ARTICULOS WHERE MAESTRO_DE_ARTICULOS.CODIGO_ARTICULO=COMPONENTE)=1 THEN SET N.CANTIDAD=ROUND(N.CANTIDAD,0); END IF; END;
La estructura es fácil, antes de escribir en la tabla, si el componente es de tipo «unidades» aplico un redondeo a la cantidad. De forma que cuando el dato llegue a la tabla es como si el sistema lo hubiese lanzado ya redondeado.
La pregunta sería ¿Y por qué no crea un segundo trigger para cuando modifiquen datos? porque la operativa de geinfor es siempre la de crear el registro nuevo, con lo que un Before Update o un After Update, aunque estuviesen definidos, no se ejecutarían nunca al cambiar las unidades
Espero que os sea útil, suscribiros para que os lleguen avisos de la próxima entrada y no dudéis en comentar o mandar un mensaje con cualquier consulta, aportación o inquietud que tengáis…
… y si algo sale mal… La Culpa de Sistemas 😉