Skip to content

Instantly share code, notes, and snippets.

@AndyDaSilva52
Last active March 30, 2021 00:15
Show Gist options
  • Save AndyDaSilva52/b54e6034c26bd723cc7c8b5360e92c7e to your computer and use it in GitHub Desktop.
Save AndyDaSilva52/b54e6034c26bd723cc7c8b5360e92c7e to your computer and use it in GitHub Desktop.
#Mega - Procedure mostra Sequência de Notas para NFe ou NFSe ou CFe ou NFCe por exemplo que pularam
create or replace PROCEDURE P_CLI_VEN_NF_SEQUENCIA
--(pRC OUT SYS_REFCURSOR) IS
AS
BEGIN
FOR cTDF IN (
SELECT
TD.FIL_IN_CODIGO, TD.SER_ST_CODIGO, TD.TDF_IN_CODIGO, TD.NOT_IN_NUMERO_MIN, TD.NOT_IN_NUMERO_MAX, TD.NOT_IN_NUMERO_MIN_RECENT
FROM (
SELECT S.FIL_IN_CODIGO, S.SER_ST_CODIGO, S.TDF_IN_CODIGO, S.TDF_IN_NDOCINI, S.TDF_IN_NDOCFINAL,
(
SELECT MIN(X.NOT_IN_NUMERO)
FROM MGVEN.VEN_NOTAFISCAL X
WHERE X.FIL_IN_CODIGO = S.FIL_IN_CODIGO
AND X.SER_ST_CODIGO = S.SER_ST_CODIGO
AND X.TDF_IN_CODIGO = S.TDF_IN_CODIGO
AND X.NOT_DT_EMISSAO BETWEEN TRUNC(SYSDATE) - 720 AND TRUNC(SYSDATE) - 2
) NOT_IN_NUMERO_MIN,
(
SELECT MIN(X.NOT_IN_NUMERO)
FROM MGVEN.VEN_NOTAFISCAL X
WHERE X.FIL_IN_CODIGO = S.FIL_IN_CODIGO
AND X.SER_ST_CODIGO = S.SER_ST_CODIGO
AND X.TDF_IN_CODIGO = S.TDF_IN_CODIGO
AND X.NOT_DT_EMISSAO BETWEEN TRUNC(SYSDATE) - 25 AND TRUNC(SYSDATE) - 5
) NOT_IN_NUMERO_MIN_RECENT,
(
SELECT MAX(X.NOT_IN_NUMERO)
FROM MGVEN.VEN_NOTAFISCAL X
WHERE X.FIL_IN_CODIGO = S.FIL_IN_CODIGO
AND X.SER_ST_CODIGO = S.SER_ST_CODIGO
AND X.TDF_IN_CODIGO = S.TDF_IN_CODIGO
AND X.NOT_DT_EMISSAO BETWEEN TRUNC(SYSDATE) - 90 AND TRUNC(SYSDATE) - 2
) NOT_IN_NUMERO_MAX
FROM MGTRF.TRF_TDF_SERIE S
LEFT JOIN MGTRF.TRF_TIPODOCFISCAL T ON T.TDF_IN_CODIGO = S.TDF_IN_CODIGO
LEFT JOIN MGTRF.TRF_MODELODOC M ON M.MOD_IN_CODIGO = T.MOD_IN_CODIGO
WHERE M.MOD_ST_MODELO IN (
'55' -- NFe
, '59' -- CFe
, '65' -- NFCe
)
) TD
WHERE TD.NOT_IN_NUMERO_MIN IS NOT NULL
) LOOP
--dbms_output.put_line('Filial['|| cTDF.FIL_IN_CODIGO ||']SER['|| cTDF.SER_ST_CODIGO ||']TDF['|| cTDF.TDF_IN_CODIGO ||']'
--|| 'MAX['|| cTDF.NOT_IN_NUMERO_MAX || ']MIN[' || cTDF.NOT_IN_NUMERO_MIN ||']'
--);
--OPEN pRC FOR
FOR cDOC IN (
SELECT
cTDF.FIL_IN_CODIGO, cTDF.SER_ST_CODIGO, cTDF.TDF_IN_CODIGO,
S.NOT_IN_NUMERO,
(
SELECT MIN(NOT_DT_EMISSAO)
FROM MGVEN.VEN_NOTAFISCAL T
WHERE
T.FIL_IN_CODIGO = cTDF.FIL_IN_CODIGO
AND T.SER_ST_CODIGO = cTDF.SER_ST_CODIGO
AND T.TDF_IN_CODIGO = cTDF.TDF_IN_CODIGO
AND T.NOT_IN_NUMERO >= S.NOT_IN_NUMERO
) NOT_DT_EMISSAO
FROM (
SELECT RESULT NOT_IN_NUMERO FROM (
SELECT ROWNUM RESULT FROM DUAL CONNECT BY LEVEL <= cTDF.NOT_IN_NUMERO_MAX -- MAX
) WHERE RESULT >= cTDF.NOT_IN_NUMERO_MIN -- MIN
) S
LEFT JOIN MGVEN.VEN_NOTAFISCAL N
ON (N.NOT_IN_NUMERO = S.NOT_IN_NUMERO)
AND (N.FIL_IN_CODIGO = cTDF.FIL_IN_CODIGO)
AND (N.SER_ST_CODIGO = cTDF.SER_ST_CODIGO)
AND (N.TDF_IN_CODIGO = cTDF.TDF_IN_CODIGO)
WHERE
N.NOT_IN_NUMERO IS NULL
) LOOP
-- TODO: Gerar Integração de Nota Fiscal quando numeração estiver com Data Próxima,
-- ou seja, se o MAX(NOT_IN_NUMERO) < cDOC.NOT_IN_NUMERO >= TRUNC(SYSDATE) - 25 então gera integração como não enviada
/**IF cDOC.NOT_IN_NUMERO > cTDF.NOT_IN_NUMERO_MIN_RECENT AND cDOC.TDF_IN_CODIGO = 7 AND cDOC.SER_ST_CODIGO NOT IN ('1') THEN
-- Incluir registro para inutilizar
INSERT INTO MSINT.VEN_NOTAFISCAL_INUTILIZAR(FIL_IN_CODIGO, SER_ST_CODIGO, NOT_IN_NUMERO, NOT_DT_EMISSAO)
SELECT cDOC.FIL_IN_CODIGO, cDOC.SER_ST_CODIGO, cDOC.NOT_IN_NUMERO, cDOC.NOT_DT_EMISSAO
FROM DUAL
WHERE NOT EXISTS(
SELECT * FROM MSINT.VEN_NOTAFISCAL_INUTILIZAR
WHERE FIL_IN_CODIGO = cDOC.FIL_IN_CODIGO
AND SER_ST_CODIGO = cDOC.SER_ST_CODIGO
AND NOT_IN_NUMERO = cDOC.NOT_IN_NUMERO
AND NOT_DT_EMISSAO = cDOC.NOT_DT_EMISSAO
)
;
END IF;*/
mgcli.p_mail_log_generico(2,'P_CLI_VEN_NF_SEQUENCIA',
'Doc['
|| cDOC.NOT_IN_NUMERO
||']Filial['|| cDOC.FIL_IN_CODIGO ||']SER['|| cDOC.SER_ST_CODIGO ||']TDF['|| cDOC.TDF_IN_CODIGO ||']DataEmissãoSugerida['|| TO_CHAR(cDOC.NOT_DT_EMISSAO, 'DD/MM/YYYY') ||'] não existe em Documentos de Saída! Possível que seja necessário inutilizar a mesma!');
dbms_output.put_line('Doc['
|| cDOC.NOT_IN_NUMERO
||']Filial['|| cDOC.FIL_IN_CODIGO ||']SER['|| cDOC.SER_ST_CODIGO ||']TDF['|| cDOC.TDF_IN_CODIGO ||']DataEmissãoSugerida['|| TO_CHAR(cDOC.NOT_DT_EMISSAO, 'DD/MM/YYYY') ||'] não existe em Documentos de Saída! Possível que seja necessário inutilizar a mesma!');
END LOOP;
END LOOP;
END P_CLI_VEN_NF_SEQUENCIA;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment