CREATE OR REPLACE PROCEDURE ATUALIZA_SOLCITACAO_CMP(
    P_FILIAL IN NOTAFISCAL.CDFILIAL%TYPE,
    P_LANCTONF IN NOTAFISCAL.NRLANCTONF%TYPE)

IS

BEGIN
   /*LISTA POR PEDIDO E SOLICITACAO SE HA DIFERENCA ENTRE O QUE FOI EXPEDIDO E A QT. SOLICITADA */
   /*SE NAO HOUVER DIFERENCA, MODIFICA A SITUACAO DA SOLICITACAO DE COMPRA PARA EM ABERTO*/
   /*SE HOUVER DIFERENCA,     MODIFICA A SITUACAO DA SOLICITACAO DE COMPRA PARA BAIXA PARCIAL*/
   /*IDBAIXASOL : 1 - BAIXA PARCIAL / 2 - BAIXA TOTAL / 3 - BAIXA MANUAL / '' - EM ABERTO*/
   FOR C_ITEMSOLI IN (SELECT IT.CDFILIALPED, IT.NRPEDIDO, S.NRSOLICMP, (SUM(I.QTSOLIPROD) - SUM(IP.QTEXPITEMPED)) AS DIFITEXPSOLI
                        FROM ITEMPRODUTO IT, ITEMPEDIDO IP, SOLICITA S , ITEMSOLI I
                       WHERE (IT.CDFILIAL = P_FILIAL)
                         AND (IT.NRLANCTONF = P_LANCTONF)
                         AND (IT.CDFILIALPED = IP.CDFILIAL)
                         AND (IT.NRPEDIDO = IP.NRPEDIDO)
                         AND (IT.NRITEMPED = IP.NRITEMPED)
                         AND (IP.CDFILIAL = S.CDFILIALPED)
                         AND (IP.NRPEDIDO = S.NRPEDIDO)
                         AND (S.CDFILLANCA = I.CDFILLAN)
                         AND (S.CDFILSOLI = I.CDFILSOLI)
                         AND (S.NRSOLICMP = I.NRSOLICMP)
                         AND (IP.CDPRODUTO  = I.CDPRODUTO)
                      GROUP BY IT.CDFILIALPED, IT.NRPEDIDO, S.NRSOLICMP  ) LOOP
      IF C_ITEMSOLI.DIFITEXPSOLI = 0 THEN
         UPDATE SOLICITA
            SET IDBAIXASOL = ''
          WHERE CDFILIALPED = C_ITEMSOLI.CDFILIALPED
            AND NRPEDIDO = C_ITEMSOLI.NRPEDIDO;
      ELSE
         UPDATE SOLICITA
            SET IDBAIXASOL = '1'
          WHERE CDFILIALPED = C_ITEMSOLI.CDFILIALPED
            AND NRPEDIDO = C_ITEMSOLI.NRPEDIDO;
      END IF;
   END LOOP;
END;
/