Bloqueo Asignación de Ubicación Entrada Mercancias

Hola a tod@s.

Estoy intentando por medio de un Transaction Notification, controlar cuando selecciono una ubicación de un almacén que si el volumen total es mayor al que tenga definido me lance mensaje de error.

He creado un campo de usuario donde me calcula el volumen que estoy ocupando y utilizo un atributo de los Datos maestros de ubicación para indicar el máximo que puede ocupar.

Luego por el transaction notification he intentado generar el siguiente código pero no me salta ningún error.

If (:object_type = '10000206') and (:transaction_type='A' or :transaction_type='U') then
	select count(*) into cnt 
	from "OBIN" T0
	INNER JOIN "OIBQ" T1 ON T0."AbsEntry" = T1."BinAbs" 
	INNER JOIN "OITM" T2 ON T2."ItemCode" = T1."ItemCode" 
    INNER JOIN "OITW" T3 ON T3."WhsCode"= T0."WhsCode" and T3."ItemCode" = T1."ItemCode"
    where CAST ( T0."Attr1Val" AS FLOAT)  < CAST (T0."U_U_ADV_UBICACION" AS FLOAT) + (T2."BVolume")  AND  t0."AbsEntry" = :list_of_cols_val_tab_del;

 if :cnt>0 then
		error := 200000123;
		error_message := 'Volumen superior';
	end if;
end if;

Alguien me podría orientar en esto?

Saludos,

el SP TN, creo que no funciona para selección, en todo caso tendrías que hacer el control sobre el documento donde estas haciendo la asignación, y recién allí verificar el calculo de volumen.

Saludos,

Hola Willy_Caldero

pero entonces si lo tengo que hacer sobre la entrada de mercancías como le relaciono la ubicación o ubicaciones ya que no hay ningún campo en el detalla de la entrada de Mercancías (PDN1) que pueda relacionar con el maestro de ubicaciones (OBIN)?.

Saludos

Hola Willy,

he vuelto a revisar el código modificando para que me lo lance sobre PDN1 como me habías comentado y parece que está funcionando.

El código queda de la siguiente manera:

    if (:object_type ='20') AND (:transaction_type='A') then
 select count (*) into cnt
from "OPDN" T0
INNER JOIN "PDN1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN "OIBQ" T2 ON T1."ItemCode" = T2."ItemCode" 
INNER JOIN "OBIN" T3 ON T3."AbsEntry" = T2."BinAbs" and T3."WhsCode"=T1."WhsCode"
INNER JOIN "OITM" T4 ON T4."ItemCode" = T2."ItemCode"
INNER JOIN "OITW" T5 ON T5."WhsCode" = T3."WhsCode" and T5."ItemCode" = T2."ItemCode" 
where CAST (T3."Attr1Val" AS FLOAT) < CAST (T3."U_U_ADV_UBICACION" AS FLOAT) + 
    (T4."BVolume" * T1."Quantity") and T1."DocEntry"= :list_of_cols_val_tab_del;
	if :cnt>0 then
		error := 200000123;
		error_message := 'Volumen superior';
	end if;
end if;

Realizaré un par de pruebas más para asegurar que me calcula bien con todos los escenarios y ya comento por aquí para dar como cerrado el tema.

Gracias

1 me gusta

Hola Willy,

es posible hacer que en el error_message pueda sacar el calculo del volumen que me sobrepasa??

Me está dando error cuando pongo más artículos y quería ver que está calculando.

Saludos

en la variable error_message, puedes concatenar el calculo.

He estado mirando si encontraba algún ejemplo pero no veo la forma de como se podría hacer.

Podrías ponerme algún ejemplo?

Gracias

tienes que cargar una variable con el resultado que debes mostrar, es decir correr de nuevo el query y cargar el resultado a una variable, pero hay un tema mas, hay que asegurarse que la consulta solo devuelva un valor, no varios, asi que usamos “TOP 1”

if :cnt>0 then
                DECLARE Vol as VARCHAR(10);

                select TOP 1 CAST (T3."U_U_ADV_UBICACION" AS FLOAT) + 
    (T4."BVolume" * T1."Quantity") into Vol
from "OPDN" T0
INNER JOIN "PDN1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN "OIBQ" T2 ON T1."ItemCode" = T2."ItemCode" 
INNER JOIN "OBIN" T3 ON T3."AbsEntry" = T2."BinAbs" and T3."WhsCode"=T1."WhsCode"
INNER JOIN "OITM" T4 ON T4."ItemCode" = T2."ItemCode"
INNER JOIN "OITW" T5 ON T5."WhsCode" = T3."WhsCode" and T5."ItemCode" = T2."ItemCode" 
where CAST (T3."Attr1Val" AS FLOAT) < CAST (T3."U_U_ADV_UBICACION" AS FLOAT) + 
    (T4."BVolume" * T1."Quantity") and T1."DocEntry"= :list_of_cols_val_tab_del;
		error := 200000123;
		error_message := 'Volumen superior ' || :Vol;
	end if;

Estoy asumiendo que ese es el calculo del volumen, revisalo.

Saludos,

1 me gusta