Pular para o conteúdo

Fóruns Banco de dados Oracle 01722. 00000 – “invalid number” 01722. 00000 – “invalid number”

#104724
Gustavo S Coelho
Participante

    É um pouco extenso mas vamos lá…

    DECLARE

    CURSOR C_CARGA_CONHECIMENTO IS
    SELECT *
    FROM CONFRETE.CONHECIMENTO CON
    where CON.NUMEROCONHECIMENTO IS NOT NULL;

    CURSOR C_DADOS_VEICULO(P_PLACA VARCHAR2) IS
    SELECT VEIC.ID AS VEIC_ID,
    DECODE(veic.flg_emite_conhecimento, 'S', 112, TRAN.ID) AS TRAN_ID
    FROM TRANSP.VEICULOS VEIC INNER JOIN TRANSP.TRANSPORTADORAS TRAN
    ON VEIC.TRAN_ID = TRAN.ID
    WHERE PLACA = P_PLACA;

    CURSOR C_NOTAS IS
    SELECT NOTAS
    FROM FRETE.TMP_SPLIT_NOTAS
    WHERE NOTAS IS NOT NULL;

    CURSOR C_KM_IND(P_CIDADE_DESTINATARIO VARCHAR2) IS
    SELECT
    CODIGO CIDA_CODIGO_DESTINO
    FROM
    PEDI.CIDADES
    WHERE
    UPPER(NOME) = UPPER(P_CIDADE_DESTINATARIO);

    W_TABLE_SPLIT split_tbl;

    W_COD_SOLICITACAO FRETE.CONHECIMENTOS_SOLICITACOES.ID%TYPE;
    W_VEICULO_ID TRANSP.VEICULOS.ID%TYPE;
    W_TRANSPORTADORA_ID TRANSP.TRANSPORTADORAS.ID%TYPE;
    W_CIDA_CODIGO_ORIGEM FRETE.CONHECIMENTO.CIDA_CODIGO_ORIGEM%TYPE;
    W_CIDA_CODIGO_DESTINO FRETE.CONHECIMENTO.CIDA_CODIGO_DESTINO%TYPE;

    W_NUM_CONHECIMENTO FRETE.CONHECIMENTO.NUM_CONHECIMENTO%TYPE;
    W_SERIE_NOTA VARCHAR2(3);
    W_NUMERO_NOTA VARCHAR2(8);

    W_NFFS VARCHAR2(11);
    W_COUNT NUMBER;
    W_NUM_PROGRAM_AUX NUMBER;
    P_DATA_LOG DATE;

    NFFS VARCHAR2(32767);

    BEGIN

    W_CIDA_CODIGO_ORIGEM := 7102;
    P_DATA_LOG := SYSDATE;

    FOR R_CARGA_CONHECIMENTO IN C_CARGA_CONHECIMENTO LOOP

    OPEN C_DADOS_VEICULO(R_CARGA_CONHECIMENTO.PLACAVEICULO);
    FETCH C_DADOS_VEICULO INTO W_VEICULO_ID, W_TRANSPORTADORA_ID;
    
      IF C_DADOS_VEICULO%NOTFOUND THEN
        -- GRAVAR EM UMA TABELA DE LOG
    

    -- RAISE_APPLICATION_ERROR(-20002, 'VEICULO DE PLACA '|| R_CARGA_CONHECIMENTO.PLACAVEICULO||' NÃO ENCONTRADO'||' ERRO: '||SQLERRM);
    W_VEICULO_ID := NULL;
    W_TRANSPORTADORA_ID := NULL;

      END IF;
    
    CLOSE C_DADOS_VEICULO;     
    
    IF R_CARGA_CONHECIMENTO.TRANSPORTADORA IS NOT NULL THEN
    
      OPEN C_KM_IND(R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA);
      FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
    
      IF C_KM_IND%NOTFOUND THEN
      -- GRAVAR LOG NA NOVA TABELA DE LOG
        INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
        VALUES(P_DATA_LOG, 'ATENÇÃO !!...TRANSPORTADORA NÃO INFORMADA ! '||CHR(10)||CHR(13)||
                           'CADASTRE O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.CIDTRANSPORTADORA || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                           'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO'); 
      END IF;
    
      CLOSE C_KM_IND;  
    
    ELSE
    
      OPEN C_KM_IND(R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO);
      FETCH C_KM_IND INTO W_CIDA_CODIGO_ORIGEM;
      FETCH C_KM_IND INTO W_CIDA_CODIGO_DESTINO;
    
      IF C_KM_IND%NOTFOUND THEN
       -- GRAVAR LOG NA NOVA TABELA DE LOG
        INSERT INTO LOG_PROCESSAMENTO(DATA, DESCRICAO, TP_PROCESSAMENTO)
        VALUES(P_DATA_LOG, 'ATENÇÃO !!...DESTINO NÃO INFORMADO ! '||CHR(10)||CHR(13)||
                               'CADASTRE  O MUNICÍPIO ' || R_CARGA_CONHECIMENTO.MUNICIPIODESTINATARIO || ' NA TABELA DESTINATÁRIO! '||CHR(10)||CHR(13)||
                               'O VALOR DO CONHECIMENTO SERÁ R$ 0,00 (ZERO)',  'PROGRAMACAO');
      END IF;
    
      CLOSE C_KM_IND;   
    
    END IF;
    
    INSERT 
    INTO FRETE.CONHECIMENTO 
      (   
        NUM_CONHECIMENTO,
        NUM_PROGRAMACAO,
        VAL_MERCADORIAS,    
        NATUREZA,
        QTD_VOLUME,
        ESPECIE,
        PESO_KG,
        PESO_CUBADO,
        STATUS,
        COSO_ID,
        VAL_FRETE_LOJA, 
        VAL_FRETE, 
        FILIAL_VENDA_ID,
        COCR_ID,
        FLG_AVULSO,
        VEICULO_ID,
        TRANSPORTADORA_ID,
        LOFR_ID,
        ALIQUOTA,             
        VAL_ICMS, 
        VAL_BASE_CALCULO,
        VAL_TOTAL_FRETE,                      
        COD_CONTABIL,
        LOCAL_EMISSAO,
        LOCAL_ENTREGA,
        LOCAL_CALCULO_FRETE,                
        MENSAGEM,        
        MENSAGEM2,
        CIF_FOB,
        FLG_IMPRIMIR,
        CIDA_CODIGO_ORIGEM, 
        CIDA_CODIGO_DESTINO
      )
      VALUES
       (   
        R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
        R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO,
        R_CARGA_CONHECIMENTO.VALORMERCADORIAS,    
        R_CARGA_CONHECIMENTO.NATUREZA,
        R_CARGA_CONHECIMENTO.QTD_VOLUME,
        R_CARGA_CONHECIMENTO.ESPECIE,
        R_CARGA_CONHECIMENTO.PESO_KG,
        R_CARGA_CONHECIMENTO.PESO_CUBADO,
        R_CARGA_CONHECIMENTO.STATUS,
        R_CARGA_CONHECIMENTO.COSO_ID,
        R_CARGA_CONHECIMENTO.FRETEVALOR,
        NVL(R_CARGA_CONHECIMENTO.FRETEVALOR,0),
        R_CARGA_CONHECIMENTO.FILIALVENDA,
        R_CARGA_CONHECIMENTO.COCR_ID,
        'N',
        NVL(W_VEICULO_ID,0),
        W_TRANSPORTADORA_ID,
        1,        
        R_CARGA_CONHECIMENTO.ALIQUOTA,             
        R_CARGA_CONHECIMENTO.ICMSFRETE, 
        R_CARGA_CONHECIMENTO.BASECALCULOFRETE,
        R_CARGA_CONHECIMENTO.TOTALFRETE,                      
        R_CARGA_CONHECIMENTO.CODIGOCONTABIL,
        R_CARGA_CONHECIMENTO.LOCALEMISSAO,
        R_CARGA_CONHECIMENTO.LOCALENTREGA,
        R_CARGA_CONHECIMENTO.BASECALCULOFRETE,               
        R_CARGA_CONHECIMENTO.MENSAGEM,        
        R_CARGA_CONHECIMENTO.MENSAGEM2,
        R_CARGA_CONHECIMENTO.CIFFOB,
        R_CARGA_CONHECIMENTO.FLG_IMPRIMIR,
        W_CIDA_CODIGO_ORIGEM, 
        W_CIDA_CODIGO_DESTINO  
       ); 
    SELECT NVL(NUM_ATUAL,0) INTO W_NUM_CONHECIMENTO
    FROM FRETE.ULTIMO_NUM_CONHECIMENTO;
    

    NFFS := R_CARGA_CONHECIMENTO.NOTAFISCAL1 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL2 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL3 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL4 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL5 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL6 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL7 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL8 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL9 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL10 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL11 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL12 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL13 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL14 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL15 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL16 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL17 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL18 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL19 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL20 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL21 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL22 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL23 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL24 || ',' || R_CARGA_CONHECIMENTO.NOTAFISCAL25;

    FRETE.PROC_SPLIT_NOTAS(NFFS); -- PROCEDURE PARA POPULAR A TABELA TEMPORARIA DE NOTAS

    OPEN C_NOTAS;
    FETCH C_NOTAS BULK COLLECT INTO W_TABLE_SPLIT;
    CLOSE C_NOTAS;

    W_COUNT := 0;
    -- VERIFICA A EXISTENCIA DE REGISTRO, CASO CONTRARIO LEVANTA EXCEÇÃO -----------------------------------------------
    FOR I IN W_TABLE_SPLIT.FIRST..W_TABLE_SPLIT.LAST LOOP
    IF W_TABLE_SPLIT(I) IS NOT NULL THEN
    W_COUNT := W_COUNT + 1;
    EXIT;
    END IF;
    END LOOP;

    IF W_COUNT = 0 THEN
    RAISE_APPLICATION_ERROR(-20003, 'NÃO FOI ENCONTRADA NOTA PARA A PROGRAMAÇÃO '|| R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO ||' ERRO: '||SQLERRM);
    END IF;


    FOR I IN 1 .. W_TABLE_SPLIT.LAST LOOP

    W_NFFS := W_TABLE_SPLIT(I);
    
    W_SERIE_NOTA:=  SUBSTR(W_NFFS, 0, 3);
    W_NUMERO_NOTA:= SUBSTR(W_NFFS, 4, 8);
    
    IF W_TABLE_SPLIT(I) IS NOT NULL THEN
     IF W_NUMERO_NOTA IS NOT NULL THEN
    
            INSERT
            INTO FRETE.NOTAS_FISCAIS_CONHECIMENTOS 
              (      
                    CON_NUMERO,
                    NFFS_NUMERO,
                    NFFS_SERIE
              )
              VALUES
              (      
                    R_CARGA_CONHECIMENTO.NUMEROCONHECIMENTO,
                    W_NUMERO_NOTA,
                    W_SERIE_NOTA
            );
            END IF;
      END IF;
    

    END LOOP;
    W_TABLE_SPLIT := NULL;
    DELETE FROM FRETE.TMP_SPLIT_NOTAS;
    W_NUM_PROGRAM_AUX := R_CARGA_CONHECIMENTO.NUMEROPROGRAMACAO;

    END LOOP;

    COMMIT;

    END;