CREATE OR REPLACE FUNCTION SPED_BLOCOH_FOS(
   P_CDIMPOSTO    IN IMPOSTO.CDIMPOSTO%TYPE,
   P_CDEMPRESA    IN EMPRESA.CDEMPRESA%TYPE,
   P_CDINSCESTA   IN EMPRESA.CDINSCESTA%TYPE,
   P_DTINICIAL    IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_DTFINAL      IN NOTAFISCAL.DTENTRSAID%TYPE,
   P_LIVROMAG     IN LIVROMAGNETICO.CDLIVROMAG%TYPE,
   P_NRSEQARQMAG  IN ARQMAGNETICO.NRSEQARQMAG%TYPE) RETURN NUMBER
AS
   V_CONTREGH     NUMBER;
   V_MOVIMENT     NUMBER;
   V_DADOS        VARCHAR2(01);
   V_CONTCTBL     VARCHAR2(40);
   V_CDARVPROD1   VARCHAR2(40);
   V_CDFILIAL     VARCHAR2(04);
BEGIN
   V_DADOS := 'N';
   FOR C_REGH005 IN (SELECT ('|H005'                            || '|' ||
                             TO_CHAR(DTINVEFISCAL,'ddmmyyyy')   || '|' ||
                             REPLACE(LTRIM(TO_CHAR(NVL(ROUND(SUM(VRTOTINVFISC),3),0), '999999999990.00')), '.', ',')  || '|'  ) AS ARQ_H005,
                             TO_CHAR(DTINVEFISCAL,'ddmmyyyy') AS DTINVENTFISC, SUM(VRTOTINVFISC) AS VRTOTINVFISC
                     FROM INVENTFISC
                     WHERE CDEMPRESA     = P_CDEMPRESA
                       AND CDINSCESTA    = P_CDINSCESTA
                       AND DTINVEFISCAL  = P_DTFINAL
                     GROUP BY DTINVEFISCAL) LOOP
      V_DADOS := 'S';
      INSERT INTO ARQMAGNETICO
        (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
        ('71'||LPAD(RTRIM(V_CONTREGH), 8, '0'), C_REGH005.ARQ_H005, P_NRSEQARQMAG);
      IF C_REGH005.VRTOTINVFISC > 0 THEN
         V_CONTREGH := NVL(V_CONTREGH,0) + 1;
         FOR C_REGH010 IN (SELECT ('|H010'                                                   || '|' ||
                                   NVL(P.CDARVPROD,'')                                       || '|' ||
                                   NVL(P.SGUNIDADE,'')                                       || '|' ||
                                   REPLACE(LTRIM(TO_CHAR(NVL(ROUND(I.QTESTINVFISC,3),0), '999999999990.000')), '.', ',')   || '|' ||
                                   REPLACE(LTRIM(TO_CHAR(NVL(ROUND(I.VRUNIINVFISC,3),0), '999999999990.000')), '.', ',')   || '|' ||
                                   REPLACE(LTRIM(TO_CHAR(NVL(ROUND(I.VRTOTINVFISC,2),0), '999999999990.00')), '.', ',')    || '|' ||
                                   '0'                                                       || '|' ||
                                   ''                                                        || '|' ||
                                   ''                                                        || '|' ) AS ARQ_H010,
                                   NVL(P.CDARVPROD,'') AS CDARVPROD,
                                   NVL(P.CDPRODUTO,'') AS CDPRODUTO
                           FROM INVENTFISC I, PRODUTO P
                           WHERE I.CDEMPRESA    = P_CDEMPRESA
                             AND I.CDINSCESTA   = P_CDINSCESTA
                             AND I.DTINVEFISCAL = C_REGH005.DTINVENTFISC
                             AND I.CDPRODUTO    = P.CDPRODUTO
                             AND I.QTESTINVFISC <> 0) LOOP
            IF (P_CDINSCESTA = '283118511114') OR (P_CDINSCESTA = '9020334670') THEN
               IF (P_CDINSCESTA = '283118511114') THEN
                  V_CDFILIAL := '3950';
               ELSE
                  V_CDFILIAL := '3951';
               END IF;
               BEGIN
                  SELECT PF.CDCTBLENTRPF AS CDCTBLENTRPR
                    INTO V_CONTCTBL
                    FROM PRODFILI PF
                   WHERE PF.CDFILIAL = V_CDFILIAL
                     AND PF.CDPRODUTO = C_REGH010.CDPRODUTO;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CONTCTBL := NULL;
               END;
            END IF;
            IF V_CONTCTBL IS NULL THEN
               BEGIN
                  SELECT MAX(CDARVPROD) AS CDARVPROD
                    INTO V_CDARVPROD1
                    FROM PRODUTO C
                   WHERE C_REGH010.CDARVPROD LIKE C.CDARVPROD ||'%'
                     AND NOT CDCTBLENTRPR IS NULL;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDARVPROD1 := NULL;
               END;
               BEGIN
                  SELECT PR.CDCTBLENTRPR AS CDCTBLENTRPR
                    INTO V_CONTCTBL
                    FROM PRODUTO PR
                   WHERE PR.CDARVPROD = V_CDARVPROD1;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CONTCTBL := NULL;
               END;
            END IF;
            V_DADOS := 'S';
            INSERT INTO ARQMAGNETICO
               (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
            VALUES
               ('72'||LPAD(RTRIM(V_CONTREGH), 8, '0'), C_REGH010.ARQ_H010||NVL(V_CONTCTBL,'')||'|', P_NRSEQARQMAG);
            V_CONTREGH := NVL(V_CONTREGH,0) + 1;
         END LOOP;
      END IF;
   END LOOP;
   /* abertura do bloco H */
   IF ((V_CONTREGH <> 0) AND (V_DADOS <> 'N')) THEN
      V_MOVIMENT := 0;
   ELSE
      V_MOVIMENT := 1;
   END IF;
   V_CONTREGH := NVL(V_CONTREGH,0) + 1;
   INSERT INTO ARQMAGNETICO
     (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
   VALUES
     ('70'||LPAD(RTRIM(V_CONTREGH), 8, '0'), '|H001' || '|' ||V_MOVIMENT  || '|' , P_NRSEQARQMAG);
   /* encerramento do bloco H */
   V_CONTREGH := NVL(V_CONTREGH,0) + 1;
   INSERT INTO ARQMAGNETICO
     (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG  )
   VALUES
     ('74'||LPAD(RTRIM(V_CONTREGH), 8, '0'), '|H990'|| '|' ||V_CONTREGH   || '|', P_NRSEQARQMAG);
   RETURN(V_CONTREGH);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('SPED_BLOCOH_FOS','5.05.000'); END;
/