Buenos tardes estimados.
Estoy realizando un desarrollo para poder bloquear los movimientos en los almacenes para cada usuario.
El primer paso fue crear dos tablas de usuario que luego relacione, una cabecera y un detalle.
En la cabecera cargo el usuario y en el detalle coloco los almacenes y un S/N para saber si tiene bloqueado el almacén o no.
El segundo paso fue crear una vista que me devuelva dos columnas, una con el usuario y otra con el codigo del almacen que tiene bloqueado, de esta manera puedo consultar alli los almacenes bloqueados para cada usuario.
CREATE VIEW "VBIT_BloqueoDeAlmacenes" AS
SELECT "@BLOQ_ALM_CABECERA"."U_UsuarioSAP" as "Usuario", "@BLOQ_ALM_DETALLE"."U_AlmacenSAP" as "Almacen"
FROM "@BLOQ_ALM_CABECERA"
INNER JOIN "@BLOQ_ALM_DETALLE" ON "@BLOQ_ALM_DETALLE"."Code"="@BLOQ_ALM_CABECERA"."Code"
WHERE "@BLOQ_ALM_DETALLE"."U_TransferenciaStock"='N'
OR "@BLOQ_ALM_DETALLE"."U_Entrada_Compra"='N'
OR "@BLOQ_ALM_DETALLE"."U_Devolucion_Compra"='N'
OR "@BLOQ_ALM_DETALLE"."U_FCNDNC_Compra"='N'
OR "@BLOQ_ALM_DETALLE"."U_Entrega_Venta"='N'
OR "@BLOQ_ALM_DETALLE"."U_Devolucion_Ventas"='N'
OR "@BLOQ_ALM_DETALLE"."U_FCNDNC_Venta"='N'
OR "@BLOQ_ALM_DETALLE"."U_EntradaMercancias"='N'
OR "@BLOQ_ALM_DETALLE"."U_SalidaMercancias"='N'
OR "@BLOQ_ALM_DETALLE"."U_EmisionProduccion"='N'
OR "@BLOQ_ALM_DETALLE"."U_ReciboProduccion"='N'
Finalmente realice un control dentro del SBO_TransactionNotification que al momento de querer realizar una transacción con movimiento de stock controla que el almacén para ese usuario no este bloqueado.
---------------------------------------------------------------------------------------
-- Control de bloqueo de almacenes por usuario-- INICIO
---------------------------------------------------------------------------------------
---- Transferencia de stock
---------------------------------------------------------------------------------------
IF :object_type = '67' AND (:transaction_type = ('A') OR :transaction_type = ('U')) THEN
SELECT (SELECT "UserSign" FROM OWTR WHERE "DocEntry"= :list_of_cols_val_tab_del) INTO Usuario FROM DUMMY;
--SELECT (SELECT "FromWhsCod" FROM WTR1 WHERE "DocEntry"= :list_of_cols_val_tab_del) INTO AlmacenSalida FROM DUMMY;
--SELECT (SELECT "WhsCode" FROM WTR1 WHERE "DocEntry"= :list_of_cols_val_tab_del) INTO AlmacenEntrada FROM DUMMY;
Encontrado := 0;
numLineas1 := 0;
contador1 := 0;
SELECT (SELECT (MAX(T0."LineNum")-1) FROM WTR1 T0 WHERE T0."DocEntry" = :list_of_cols_val_tab_del) INTO numLineas1 FROM DUMMY;
WHILE contador1 < numLineas1 DO
SELECT (SELECT "FromWhsCod" FROM WTR1 WHERE "LineNum"= :contador1 AND "DocEntry"= :list_of_cols_val_tab_del) INTO AlmacenSalida FROM DUMMY;
--SELECT (SELECT "WhsCode" FROM WTR1 WHERE "LineNum"= :contador1 AND "DocEntry"= :list_of_cols_val_tab_del) INTO AlmacenEntrada FROM DUMMY;
SELECT (SELECT 1 FROM "VBIT_BloqueoDeAlmacenes" WHERE "Usuario" = :Usuario AND "Almacen" = :AlmacenSalida) INTO Encontrado FROM DUMMY;
contador1 := contador1 + 1;
END WHILE;
-- comparo si el almacen de salida es igual a alguno de los almacenes que me trae la subconsulta
IF (:Encontrado = 1) THEN
error := 117;
error_message := N'Almacen bloqueado para el usuario que esta realizando la transaccion';
select :error, :error_message FROM dummy;
Return;
END IF;
END IF;
---------------------------------------------------------------------------------------
-- Control de bloqueo de almacenes por usuario-- FIN
---------------------------------------------------------------------------------------
Actualmente me deja realizar la transferencia, cuando utilizo un almacén de los que están bloqueados.
Me podrían ayudar descifrar el error en el control, seguramente el inconveniente esta allí.
Por el momento solo desarrolle el control para las transferencias de stock y solo controle al almacén de salida… Seguramente una vez que logre hacer funcionar esto los demás sera cuestión de seguir la lógica.
Muchas gracias.