El usuario tiene asignado el role Usuarios
Pero sigue generado el error de usuario invalido, normalmente dice que no tiene autoridad sobre la tabla
DELETE FROM PEDRES_TOT_DESUBICAR_RECURSO_X;
pero otras veces lo da sobre el procedimiento
PEDRES_TOT_DESUBICAR_RECURSO_P1
La realidad estoy muy preocupado no se como encontrar el error, con el usuario SYSDbA funciona perfectamente
espero me den una luz
adjunto Procedimiento
Código SQL
[-]
SET TERM ^ ;
create or alter procedure PEDRES_TOT_DESUBICAR_RECURSO_P1 (
P_CONO CONO,
P_WHSCOD WHSCOD)
returns (
MSG varchar(100),
RECURSO RECURSO,
WHSLOC WHSLOC,
QPENDIENTE QPENDIENTE,
QTYDISTOTAL SALDO,
QTYDISOTROSNVL SALDO,
QTYDISNVL1 SALDO,
QAREASURTIDO SALDO,
QAREASURTIDOESTIBADA SALDO,
QBACKORDER SALDO,
NOESTIBAS NOESTIBAS,
TIPOREGISTRO TIPOREGISTRO,
CLFCOD CLFCOD,
CONO CONO,
CLIENTE CLIENTE,
CLIENTESHP CLIENTESHP,
QRESERVADA QRESERVADA,
WHSCOD WHSCOD,
DRECURSO DRECURSO,
NOPEDIDO NOPEDIDO,
PEDIDOCLIENTE PEDIDOCLIENTE,
QTYXESTIBA QTYXESTIBA,
CONUMERO CONUMERO,
LOTE LOTE,
ID ID,
FECVEN FECVEN,
W_MENSAJE MENSAJE60)
AS
-- W_QTYPDTEDEMOVER SALDO,
-- W_QAREASURTIDO SALDO,
-- W_QTYMAXAMOVER SALDO,
DECLARE VARIABLE W_QPENDIENTE SALDO = 0;
DECLARE VARIABLE W_QTYDISNETA SALDO = 0;
DECLARE VARIABLE W_QTYDISOTROSNVL SALDO = 0;
DECLARE VARIABLE W_QAREASURTIDO SALDO = 0;
DECLARE VARIABLE W_QASURTIR SALDO = 0;
DECLARE VARIABLE W_NOREGISTROS INTEGER = 0;
DECLARE VARIABLE W_DRECURSO DRECURSO;
DECLARE VARIABLE UNDMED UNDMED;
DECLARE VARIABLE W_UNDMEDUM UNDMED;
DECLARE VARIABLE W_NOESTIBAS NOESTIBAS;
DECLARE VARIABLE W_FLGAPROBADOCXC FLGAPROBADOCXC;
DECLARE VARIABLE W_INTEGER INTEGER;
DECLARE VARIABLE W_UUID UUID;
DECLARE VARIABLE W_ID ID;
DECLARE VARIABLE W_QTYPDTEDEMOVER SALDO;
DECLARE VARIABLE W_QTYMAXAMOVER SALDO;
BEGIN
DELETE FROM PEDRES_TOT_DESUBICAR_RECURSO_X;
--mensaje = 'borro archivo';
--suspend;
TIPOREGISTRO = '0';
W_ID = 1;
FOR SELECT D.CONO ,
D.WHSCOD , D.RECURSO , D.CLFCOD ,D.CLIENTE , '' ,
SUM(D.QPENDIENTE)
FROM PEDDET D INNER JOIN PEDMST M ON M.NOPEDIDO = D.NOPEDIDO
WHERE D.CONO = :P_CONO AND D.WHSCOD = :P_WHSCOD AND D.QPENDIENTE > 0
AND M.FLGAPROBADOCXC = 'S' -- AND RECURSO = '395016513940'
GROUP BY D.CONO, D.WHSCOD, D.RECURSO, D.CLFCOD, D.CLIENTE
INTO :CONO, :WHSCOD, :RECURSO, :CLFCOD, :CLIENTE, :CLIENTESHP, :QPENDIENTE
DO BEGIN
W_NOREGISTROS= W_NOREGISTROS +1;
QTYDISNVL1 =0;
QTYDISOTROSNVL=0;
QTYDISTOTAL =0;
QBACKORDER =0;
NOESTIBAS =0;
-- DATOS MAESTRO DE PRODUCTO NUMERO DE PRODUCTOS POR ESTIBA
SELECT COALESCE(QTYXESTIBA,1), DRECURSO, UNDMED FROM RESMST WHERE RECURSO = :RECURSO
INTO :QTYXESTIBA, RECURSO, :UNDMED;
IF (QTYXESTIBA<=0) THEN
QTYXESTIBA=1;
-- SUSPEND;
-- LEER SALDO DE INVENTARIOS
SELECT COALESCE(SUM(CASE WHEN WHSNVL=1 THEN QTYDIS ELSE 0 END),0), COALESCE( SUM(QTYDIS),0) FROM INSALDO S
INNER JOIN WHSLOC L ON L.WHSLOC = S.WHSLOC AND L.WHSCOD = S.WHSCOD
WHERE S.RECURSO = :RECURSO AND S.CLFCOD = :CLFCOD AND S.CLIENTE=:CLIENTE AND S.WHSCOD = :WHSCOD
INTO :QTYDISNVL1, :QTYDISTOTAL;
-- SUSPEND;
CONO = P_CONO ;
WHSCOD = P_WHSCOD;
W_QTYDISNETA = QTYDISTOTAL - QTYDISNVL1;
QTYDISOTROSNVL = QTYDISTOTAL - QTYDISNVL1;
W_QPENDIENTE = QPENDIENTE;
QAREASURTIDO = 0;
-- LA CANTIDAD A MOVER ES LA QORDENADA - EXISTENCIA EN EL NIVEL 1
W_QPENDIENTE = W_QPENDIENTE - QTYDISNVL1;
-- NO SE REQUIERE RESURTIR AREA RESURTIDO TIENE EXISTECIAS
IF (W_QPENDIENTE <= 0 ) THEN BEGIN
W_QPENDIENTE = 0;
QAREASURTIDO = 0;
END
IF (W_QPENDIENTE > 0) THEN BEGIN
IF (W_QPENDIENTE <= W_QTYDISNETA) THEN BEGIN
QAREASURTIDO = QAREASURTIDO + W_QPENDIENTE;
W_QPENDIENTE = 0;
END
ELSE BEGIN
QAREASURTIDO = QAREASURTIDO + W_QTYDISNETA;
QBACKORDER = W_QPENDIENTE - W_QTYDISNETA;
W_QPENDIENTE = 0;
END
END
QAREASURTIDOESTIBADA =0;
NOESTIBAS=0;
W_QTYMAXAMOVER = QAREASURTIDO; -- CANTIDAD A MOVER A AREA
WHILE (W_QTYMAXAMOVER > 0) DO BEGIN
NOESTIBAS = NOESTIBAS+1;
W_QTYMAXAMOVER = W_QTYMAXAMOVER - QTYXESTIBA;
END
W_QTYMAXAMOVER = NOESTIBAS * QTYXESTIBA; -- CANTIDAD A MOVER POR ESTIBAS
IF (W_QTYMAXAMOVER > QTYDISOTROSNVL) THEN
QAREASURTIDOESTIBADA = QTYDISOTROSNVL;
ELSE
QAREASURTIDOESTIBADA = W_QTYMAXAMOVER;
SELECT P_UUID FROM UUID_TOCHAR INTO :W_UUID;
W_ID = W_ID + 1;
INSERT INTO PEDRES_TOT_DESUBICAR_RECURSO_X(UUID,
RECURSO, CLFCOD, WHSLOC, QTYDISTOTAL, QPENDIENTE, QTYDISOTROSNVL, QTYDISNVL1, QAREASURTIDO, QBACKORDER, NOESTIBAS,
TIPOREGISTRO, CONO, CLIENTE, CLIENTESHP, QRESERVADA, WHSCOD, NOPEDIDO, PEDIDOCLIENTE, QTYXESTIBA, ID,
QAREASURTIDOESTIBADA, DRECURSO, UNDMED) VALUES
(:W_UUID, :RECURSO, :CLFCOD, :WHSLOC, :QTYDISTOTAL, :QPENDIENTE, :QTYDISOTROSNVL, :QTYDISNVL1, :QAREASURTIDO,
:QBACKORDER, :NOESTIBAS,
:TIPOREGISTRO, :CONO, :CLIENTE, :CLIENTESHP, :QRESERVADA, :WHSCOD, :NOPEDIDO, :PEDIDOCLIENTE,
:QTYXESTIBA, :W_ID, :QAREASURTIDOESTIBADA, RECURSO, :UNDMED);
END
TIPOREGISTRO = '1';
FOR SELECT CONO, CLIENTE, WHSCOD, RECURSO, CLFCOD, QAREASURTIDO, QTYXESTIBA, DRECURSO, UNDMED
FROM PEDRES_TOT_DESUBICAR_RECURSO_X R
WHERE TIPOREGISTRO = '0' AND QAREASURTIDO > 0
INTO :CONO, :CLIENTE, :WHSCOD, :RECURSO, :CLFCOD, :QAREASURTIDO, :QTYXESTIBA,
RECURSO, :UNDMED
DO BEGIN
W_QTYPDTEDEMOVER = QAREASURTIDO;
-- BUSCAR UBICACIONES SUPERIOR AL NIVEL 1
FOR SELECT S.WHSLOC, S.QTYDIS, S.CONUMERO
--, S.LOTE, Z.FECVEN
FROM INSALDO S
INNER JOIN WHSLOC L ON L.WHSLOC = S.WHSLOC AND L.WHSCOD = S.WHSCOD AND L.WHSNVL > 1
-- LEFT OUTER JOIN INLOTES Z ON Z.LOTE = S.LOTE AND Z.RECURSO = S.RECURSO
WHERE S.RECURSO = :RECURSO AND S.CLFCOD = :CLFCOD AND S.WHSCOD = :WHSCOD AND S.CONO = S.CONO AND S.CLIENTE = :CLIENTE
AND S.QTYDIS > 0
ORDER BY
-- Z.FECVEN,
S.QTYDIS, S.CONUMERO, S.WHSLOC
INTO :WHSLOC, :W_QTYDISOTROSNVL, :CONUMERO
--, :LOTE, :FECVEN
DO BEGIN
W_QASURTIR = 0;
NOESTIBAS = 0;
QTYDISTOTAL = W_QTYDISOTROSNVL;
QAREASURTIDOESTIBADA =0;
-- SALDO < REQUERIDO
IF (W_QTYDISOTROSNVL <= W_QTYPDTEDEMOVER ) THEN BEGIN
W_QASURTIR = W_QTYDISOTROSNVL;
W_QTYPDTEDEMOVER = W_QTYPDTEDEMOVER - W_QASURTIR;
END
ELSE BEGIN
W_QTYMAXAMOVER = W_QTYPDTEDEMOVER;
WHILE (W_QTYMAXAMOVER > 0 ) DO BEGIN
NOESTIBAS = NOESTIBAS+1;
W_QTYMAXAMOVER = W_QTYMAXAMOVER - QTYXESTIBA;
END
W_QTYMAXAMOVER = NOESTIBAS * QTYXESTIBA; -- CANTIDAD A MOVER POR ESTIBAS
IF (W_QTYMAXAMOVER > W_QTYDISOTROSNVL) THEN
QAREASURTIDOESTIBADA = W_QTYDISOTROSNVL;
ELSE
QAREASURTIDOESTIBADA = W_QTYMAXAMOVER;
W_QASURTIR = QAREASURTIDOESTIBADA;
W_QTYPDTEDEMOVER = W_QTYPDTEDEMOVER - W_QASURTIR;
END
--**********************************
-- SUSPEND;
IF (W_QASURTIR > 0 ) THEN BEGIN
SELECT P_UUID FROM UUID_TOCHAR INTO :W_UUID;
W_ID = W_ID + 1;
INSERT INTO PEDRES_TOT_DESUBICAR_RECURSO_X(UUID,
RECURSO, CLFCOD, WHSLOC, QAREASURTIDO, QTYDISTOTAL,
TIPOREGISTRO, CONO, CLIENTE, WHSCOD, QTYXESTIBA, NOESTIBAS, CONUMERO, QPENDIENTE, ID
, DRECURSO, UNDMED) VALUES
(:W_UUID, :RECURSO, :CLFCOD, :WHSLOC, :W_QASURTIR, :QTYDISTOTAL,
:TIPOREGISTRO, :CONO, :CLIENTE, :WHSCOD, :QTYXESTIBA, :W_NOESTIBAS, :CONUMERO, :W_QTYPDTEDEMOVER, :W_ID,
RECURSO, :UNDMED);
END
-- DEJAR DE LEER SALDO INVENTARIOS
IF (W_QTYPDTEDEMOVER=0) THEN LEAVE ;
END -- FINLECTURA DE INSALDO
END
--EXIT; -- *** QUITAR **********
FOR SELECT RECURSO, CLFCOD, WHSLOC, QTYDISTOTAL, QPENDIENTE, QTYDISNVL1, QAREASURTIDO, QBACKORDER, NOESTIBAS, TIPOREGISTRO, CONO,
CLIENTE, CLIENTESHP, QRESERVADA, WHSCOD, NOPEDIDO, PEDIDOCLIENTE, QTYXESTIBA, CONUMERO, LOTE, UUID, ID, QTYDISOTROSNVL, QAREASURTIDOESTIBADA,
DRECURSO
FROM PEDRES_TOT_DESUBICAR_RECURSO_X ORDER BY
RECURSO, TIPOREGISTRO, ID INTO
:RECURSO, :CLFCOD, :WHSLOC, :QTYDISTOTAL, :QPENDIENTE, :QTYDISNVL1, :QAREASURTIDO, :QBACKORDER, :NOESTIBAS, :TIPOREGISTRO, :CONO,
:CLIENTE, :CLIENTESHP, :QRESERVADA, :WHSCOD, :NOPEDIDO, :PEDIDOCLIENTE, :QTYXESTIBA , :CONUMERO, :LOTE, :W_UUID, :ID, :QTYDISOTROSNVL, :QAREASURTIDOESTIBADA,
RECURSO
DO BEGIN
SUSPEND;
END
END^
SET TERM ; ^
GRANT SELECT,INSERT,DELETE ON PEDRES_TOT_DESUBICAR_RECURSO_X TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON PEDDET TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON PEDMST TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON RESMST TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON INSALDO TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON WHSLOC TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT EXECUTE ON PROCEDURE UUID_TOCHAR TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO SYSDBA;
GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO USUARIOS;