TN Orden de Fabricación


#1

Buen día, estoy tratando de crear un bloque para que impida el cierre de una Orden de Fabricación si no contiene al menos una entrega de componentes, de momento uso un segundo campo que luego sería un UDF en caso de ser necesario el cierre sin entrega de componentes, esto es lo que tengo les agradezco su ayuda:

IF (@object_type = ‘202’)and @transaction_type in (‘L’)
BEGIN
IF EXISTS
(select T0.[DocNum] FROM
OWOR T0
LEFT JOIN IGE1 T1 ON T0.[DocNum] = T1.[BaseRef]
LEFT JOIN OIGE T2 ON T1.[DocEntry] = T2.[DocEntry] where T0.[DocEntry] = CAST(@list_of_cols_val_tab_del AS NVARCHAR(15))
and T2.[DocNum] IS NULL and T0.[PickRmrk] IS NULL)
BEGIN
SET @error_message = ‘No puede cerrar la OF sin Entregar Componentes’
SET @error = 2122
END
END


#2

Buen día @Oscar1900

Que buen punto, aunque seria ideal no deje cerrar un OF hasta que se entreguen todos los componentes y se reciban todos artículos terminados!!

Espero compartas tu solución aunque parcial, porque aquí en la empresa padecemos de lo mismo, en usuario de las OF las cierra a su criterio sin darse cuenta que esto genera diferencias en el inventario y desviaciones en la producción (costos)

Saludos…


#3

Hola @Oscar1900
Con esta consulta es suficiente para efectuar la validacion, reemplazala en el IF de tu codigo

SELECT COUNT (T0."DocEntry") FROM OWOR T0 WHERE T0."CmpltQty" >0 AND T0."DocEntry" = @list_of_cols_val_tab_del

Saludos,
Andres Ramirez Jaramillo :colombia:


#4

Jajaja a veces nos complicamos solos y buscamos soluciones extraordinarias… claro con solo el campo de cantidad completada nos damos cuenta… Gracias Andrés


#5

Hice la prueba pero si me deja cerrarla


#6

Solucionado con la siguiente TN:

IF (@object_type =‘202’ and @transaction_type = ‘U’)

BEGIN
IF (SELECT Status FROM OWOR WHERE DocEntry = @list_of_cols_val_tab_del) = ‘L’
— Si el estado del documento es Cerrado
BEGIN

IF ( ((SELECT PickRmrk FROM OWOR WHERE DocEntry = @list_of_cols_val_tab_del) is null)
and
(
((SELECT CmpltQty FROM OWOR WHERE DocEntry = @list_of_cols_val_tab_del)= ‘0’)
or ((SELECT SUM(T0.IssuedQty) FROM WOR1 T0 INNER JOIN OWOR T1 ON T0.DocEntry = T1.DocEntry WHERE T0.DocEntry = @list_of_cols_val_tab_del)= ‘0’)
)
)

BEGIN

SET @error=1
SET @error_message = ‘Falta algún paso, Entrega de Componentes o Recibo de Producción’

END
END
END


#7

@Oscar1900
No necesitas ejecutar 3 consultas. con una sola es suficiente.

SELECT COUNT (T0."DocEntry") FROM OWOR T0 WHERE T0."CmpltQty" >0 AND T0."Status"='L' AND PickRmrk IS NULL AND T0."DocEntry" = @list_of_cols_val_tab_del

Andres Ramirez Jaramillo :colombia: