Sp que valida bodega

Buenos dias compañeros, no acostumbro a poner muchos POST aqui porque bueno no tengo casos puntuales, por eso es que pido ayuda aqui a expertos en la materia que me ayuden en algo. tengo un SP de esta forma:


--   IF @object_type in ('202') AND @transaction_type in ('A','U')  BEGIN 
--       IF (SELECT COUNT(*) 
--           FROM  OIGE T0  INNER JOIN IGE1 T1 ON T0.DocEntry = T1.DocEntry
--            WHERE (T1.[WhsCode] not in (select T2.[U_BODEGA] 
--                                                                      from  [dbo].[@KGP_USU_BOD] T2 
--                                                                      where T0.[UserSign]=T2.[U_ID]))
--                   AND T0.DocEntry=@list_of_cols_val_tab_del AND T0.[DocType]='I')>0 BEGIN
--                  Set @error=10
--                  Set @error_message= 'EL USUARIO NO TIENE AUTORIZACION PARA HACER MOVIMIENTOS EN ESTA BODEGA-1'
--       END
--   END

El caso puntual es que ahora mismo lo tengo comentado porque si le quito el comentario nadie puede hacer moviemientos en las bodegas, incluso a esos usuarios les ingreso en esa tabla la bodega en donde deben trabajar, me gustaria que algun experto me pueda decir que esta pasando porque si desbloqueo no deja trabajar asi sea que esten en la tabla los usuarios con las bodegas en donde deben trabajar. Se me paso TENGO SAP SQL OK

Estare agradecido a su gran ayuda.
Esta es la tabla que tengo

Hola @Luisam

yo probaría la sentencia SQL con ejemplos para comprobar que devuelve los datos esperados. Yo buscaría varios documentos y sustituiría las variables por los valores del documento, y una vez hecho comprobaría si los resultados son correctos.

Un saludo

1 me gusta

Te podría funcionar de esta forma, EL código está en Hana, es como creo que se podría realizar para que validara el usuario y almacén de tu tabla, espero te sea de ayuda.

IF @object_type in ('202') AND @transaction_type in ('A','U')
THEN
 SELECT (
          SELECT TOP 1 T1."ItemCode"
          FROM  OIGE T0  
          INNER JOIN IGE1 T1 ON T0.DocEntry = T1.DocEntry
          INNER JOIN [dbo].[@KGP_USU_BOD] T2 ON T0."UserSign"=T2."U_ID"
WHERE 
          T2."[U_BODEGA]"=T1."WhsCode" AND T0."DocEntryW=@list_of_cols_val_tab_del AND T0.[DocType]='I'
       )
	INTO Usuario FROM dummy ;

 IF  :Usuario IS NOT NULL THEN
  error := 440 ;
  error_message :='Error (SP): EL USUARIO NO TIENE AUTORIZACION PARA HACER MOVIMIENTOS EN ESTA BODEGA-1';
 end IF;
end IF;

ok gracias muchas gracias por tu aporte pero nada de todos modos gracias por tu gran ayuda

OK gracias por tu gran ayuda

Si gustas le podemos continuar hasta que quede, el detalle es que no tengo ambiente sql para poder probar.

Muchas gracias mi hno

No se si ya lo resolviste pero creo que asi funciona

Cualquier actualizacion que hagas no utiliza solo un objeto,
aunque paresca asi por que tienes un objeto pricnipal (la ventana
donde inicias el proceso que estes registrando).
Teniendo eso en cuenta y por la tabla que utilizas en el query, tu
necesitas validar en la emision de matreriales, eso es un objeto 60,
el objeto 202 es la orden de fabricacion

IF @object_type in ('60') AND @transaction_type in ('A')  
BEGIN 
	DECLARE @UserId INTEGER = (SELECT UserSign FROM OIGE WHERE DocEntry = @list_of_cols_val_tab_del)/*Obtenemos el usuario que esta registrando la OF*/
	IF (SELECT COALESCE((SELECT COUNT(*) FROM IGE1 T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del),0))/*Obtenemos cuantas lineas tiene esa emision*/
		<> (SELECT COALESCE((SELECT COUNT(*) /*y aqui esta el detalle, volvemos a revisar nuevamente cuantas lineas tiene la emision pero solo donde el usuario que lo crea si tiene permiso*/
			FROM IGE1 T0 INNER JOIN [@KGP_USU_BOD] T1 ON T0.WhsCode = T1.U_Bodega
			WHERE T0.DocEntry = @list_of_cols_val_tab_del AND T1.U_ID = @UserId
			),0))
	/*Si los numeros no coinciden salta el error por que quiere decir que al menos una linea no tiene permiso. 
	La funcion COALESCE en este caso me esta devolviendo 0 (cero) si alguno de los QUERY retorna NULL*/
	BEGIN
		Set @error=10
		Set @error_message= 'EL USUARIO NO TIENE AUTORIZACION PARA HACER MOVIMIENTOS EN ESTA BODEGA-1'
	END
END
2 Me gusta

Excelente mi hno muchas gracias por tu gran ayuda, que buena explicacion

Feliz año mi hno 2024