Ver Mensaje Individual
  #2  
Antiguo 21-10-2014
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Reputación: 21
ASAPLTDA Va por buen camino
Unhappy Continuo con el problema de seguridad

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; /* EXISTENCIAS EN NIVELES SUPERIORES AL NIVEL 1 */
DECLARE VARIABLE W_QAREASURTIDO SALDO = 0; /* CANTIDAD REQUERIDA EN AREA DE SURTIDO */
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;


/***************************************************************************************************
* PARTE 1 GENERACION  CANTIDAD NETA A DESUBICAR SOLAMENTE PEDIDOS AUTORIZADOS
****************************************************************************************************  */
  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

         /* AJUSTAR POR CANTIDAD ESTIBA */
         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;

      /* GRABAR */
       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



/*-----------------------------------------------------------------------------------------------------
* PARTE 2 GENERACION UBICACIONES A DESCARGAR  BASE DE LECTURA ARCHIVO PARTE1
----------------------------------------------------------------------------------------------------- */

  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;
       /* EXISTE CANTIDAD A SURTIR GRABE EL REGISTRO */
               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 **********


/***************************************************************************************************
* PARTE  RETORNAR DATOS GENERADOS
****************************************************************************************************  */


  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



/* FIN PRCEDURE */
END^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

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;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO SYSDBA;
GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO USUARIOS;
Responder Con Cita