PROCEDURE pu_gera_arquivos IS v_cod_arrecad_ant DEBITO_AUTOMATICO.cod_arrecad%TYPE; v_cod_convenio ARRECADADOR.cod_conv_da%TYPE; v_nom_arrecad ARRECADADOR.nom_arrecad%TYPE; v_dia_antecedencia ARRECADADOR.dia_antecedencia%TYPE; v_sequencia ARRECADADOR.seq_banco_da%TYPE; v_conta_compromisso arrecadador.DSC_CONTA_COMPROMISSO%TYPE; v_atualiza VARCHAR2 (1) := 'N'; v_seq NUMBER := 0; v_tot_registros NUMBER (6); v_tot_valor NUMBER (15,2); v_digito_lig NUMBER (1) := 0; v_primeiro VARCHAR2 (1) := 'S'; v_abriu_arq VARCHAR2 (1) := 'N'; v_cpo_tot VARCHAR2 (151); v_numero VARCHAR2 (60); v_nom_arquivo VARCHAR2 (50); -- Pedido 10810 v_filler VARCHAR2 (1) := ' '; v_comp companhia%ROWTYPE; v_arq_temp VARCHAR2 (200); arquivo TEXT_IO.file_type; v_reg_total NUMBER := 0; v_qtd_reg NUMBER := 0; l_total_arq number := 0; percentual NUMBER; v_fator NUMBER := 0; v_width NUMBER := 0; v_arq_atual NUMBER(2) := 0; v_arq_total NUMBER(2) := 0; v_cod_versao_layout ARRECADADOR.cod_versao_layout%TYPE; v_doc_pessoal_cliente VARCHAR2(16); v_idt_cliente VARCHAR2(25); v_msc_identif_cliente ARRECADADOR.msc_identif_cliente%TYPE; v_sta_exibe_docprinc ARRECADADOR.sta_exibe_docprinc%TYPE; v_sta_posicao_cliente CHAR; v_tamanho NUMBER; v_dir_arq_da_env VARCHAR2(255); -- pedido 12477 v_dsc_seq_linha VARCHAR2(10); v_seq_linha NUMBER := 0; v_dados_conta_compromisso VARCHAR2(100); v_dados_final_linha_e VARCHAR2(100); CURSOR c_ocor_deau IS SELECT ocor.num_ligacao, ocor.zona_ligacao, ocor.ano_lancto, ocor.mes_lancto, ocor.cod_tributo, ocor.num_aviso, ocor.dat_vencto, ocor.val_lancto, ocor.num_agencia, ocor.cta_corrente, ocor.tpo_registro, ocor.cod_movimento, ocor.cod_arrecad, ocor.dsc_ocorr1, ocor.dsc_ocorr2, ocor.num_emissao, ocor.num_doc_princ, ocor.num_sequencia, ocor.num_seq_deb_aut --Pedido 13836 / Pedido: 12315 (Magali 05/01/2016) FROM ocorrencia_deb_aut ocor WHERE ocor.tpo_registro = 'E' AND /* CANCELAMENTO OU ENVIO */ ocor.sta_processado IN ('N', 'T') /* TEMPORARIO OU NAO processaDO(E1) */ ORDER BY ocor.cod_arrecad, ocor.tpo_registro, ocor.cod_movimento DESC, ocor.zona_ligacao, ocor.num_ligacao; PROCEDURE ATUALIZA_NSA IS BEGIN SELECT cod_conv_da, nom_arrecad, num_seq_comp_da, dia_antecedencia, LPAD(cod_versao_layout, 2, '0'), -- NVL(TRIM(dsc_caminho), :CG$CTRL.dir_default), NVL(TRIM('C:\inteligest\'), :CG$CTRL.dir_default), dsc_conta_compromisso INTO v_cod_convenio, v_nom_arrecad, v_sequencia, v_dia_antecedencia, v_cod_versao_layout, v_dir_arq_da_env, v_conta_compromisso FROM arrecadador WHERE cod_arrecad = v_cod_arrecad_ant; v_sequencia := v_sequencia + 1; pac_debito_automatico.atualiza_arrecadador (v_sequencia, v_cod_arrecad_ant); EXCEPTION WHEN OTHERS THEN msg_alert (SQLERRM || ' Erro no Arrecadador - ATUALIZA_NSA' || TO_CHAR (v_cod_arrecad_ant), 'E', TRUE); END; PROCEDURE config_versao_04 IS BEGIN v_dados_final_linha_e := LPAD (v_dsc_seq_linha, 06, ' ') || RPAD (v_filler, 08, ' ') || LPAD (v_dsc_seq_linha, 06, ' '); END; -- Novos parametros no layout do arquivo tipo "E" quando Arrecadador tem dados no campo DSC_CONTA_COMPROMISSO -- PROCEDURE sequencia_linha IS BEGIN IF v_conta_compromisso IS NOT NULL THEN -- Sequencial de linha do arquivo -- v_seq_linha := NVL( v_seq_linha, 0) + 1; v_dsc_seq_linha := LPAD (v_seq_linha, 6, '0'); ELSE v_dsc_seq_linha := ' '; END IF; END; BEGIN BEGIN SELECT cod_comp_febra, nom_comp INTO v_comp.cod_comp_febra, v_comp.nom_comp FROM companhia; EXCEPTION WHEN OTHERS THEN msg_alert ('ERRO AO SELECIONAR OS DADOS DA COMPANHIA !!!' || SQLERRM, 'E', TRUE); END; v_tot_valor := 0; v_tot_registros := 0; v_cod_arrecad_ant := 0; v_primeiro := 'S'; -------Contagem total dos registros e dos arquivos que serão gerados--------- BEGIN SELECT COUNT (1), COUNT (DISTINCT cod_arrecad) INTO v_reg_total, v_arq_total FROM ocorrencia_deb_aut a WHERE a.tpo_registro = 'E' AND a.sta_processado IN ('N', 'T'); EXCEPTION WHEN OTHERS THEN msg_alert ('Erro na contagem', 'E', TRUE); END; -------Contagem total dos registros e dos arquivos que serão gerados--------- -----Valor incrementado no comprimento da barra de progressão------ v_fator := (1 / v_reg_total) * 3; FOR rc_ocor IN c_ocor_deau LOOP v_qtd_reg := v_qtd_reg + 1; v_width := v_width + v_fator; percentual := TRUNC ((100 * v_qtd_reg) / v_reg_total, 0); IF LENGTH (rc_ocor.dsc_ocorr1) IS NULL THEN rc_ocor.dsc_ocorr1 := v_filler; END IF; IF LENGTH (rc_ocor.dsc_ocorr2) IS NULL THEN rc_ocor.dsc_ocorr2 := v_filler; END IF; IF v_cod_arrecad_ant <> rc_ocor.cod_arrecad OR v_primeiro = 'S' THEN IF v_abriu_arq = 'S' AND v_primeiro = 'N' THEN sequencia_linha; TEXT_IO.put_line (arquivo, 'Z' || SUBSTR (TO_CHAR (v_tot_registros + 2, '000000'), 2, 6) || SUBSTR (TO_CHAR (v_tot_valor * 100, '00000000000000000'), 2, 17) || LPAD (' ', 119, ' ') --126 || LPAD (v_dsc_seq_linha, 06, ' ') || ' ' || CHR (13) ); TEXT_IO.fclose (arquivo); -- ATUALIZA O NSA DO ARRECADADOR (SEQ + 1)] ATUALIZA_NSA; -- FAZENDO DOWNLOAD DO ARQUIVO TEMPORÁRIO GERADO NO SERVIDOR PARA A ESTAÇÃO. pu_download_as (v_dir_arq_da_env, v_nom_arquivo, v_arq_temp); v_atualiza := 'S'; v_abriu_arq := 'N'; END IF; IF v_cod_arrecad_ant <> 0 THEN SELECT cod_conv_da, nom_arrecad, num_seq_comp_da, dia_antecedencia, dsc_conta_compromisso INTO v_cod_convenio, v_nom_arrecad, v_sequencia, v_dia_antecedencia, v_conta_compromisso FROM arrecadador WHERE cod_arrecad = v_cod_arrecad_ant; v_sequencia := v_sequencia + 1; END IF; v_primeiro := 'N'; v_tot_valor := 0; v_tot_registros := 0; v_seq_linha := 0; v_cod_arrecad_ant := rc_ocor.cod_arrecad; END IF; v_digito_lig := modulo11 (TO_CHAR (rc_ocor.num_ligacao)); IF v_abriu_arq = 'N' THEN --Contagem do arquivo que está sendo gerado-- v_arq_atual := v_arq_atual + 1; SELECT cod_conv_da, nom_arrecad, num_seq_comp_da, dia_antecedencia, cod_versao_layout, msc_identif_cliente, sta_posicao_cliente, sta_exibe_docprinc, dsc_conta_compromisso INTO v_cod_convenio, v_nom_arrecad, v_sequencia, v_dia_antecedencia, v_cod_versao_layout, v_msc_identif_cliente, v_sta_posicao_cliente, v_sta_exibe_docprinc, v_conta_compromisso FROM arrecadador WHERE cod_arrecad = RC_OCOR.cod_arrecad; v_sequencia := v_sequencia + 1; --- Nova nomenclatura ddo arquivo de remessa ao banco (arrecadador) --- --- DA + código Febraban da empresa + dia mês ano + cód. banco + sequencial do arquivo --- --- Cada informação deve ser separada por hífen --- --- Implantação da nova VAN Finnet --- v_nom_arquivo := 'DA-' || V_COMP.cod_comp_febra || '-' || TO_CHAR(SYSDATE, 'DDMMYYYY') || '-' || LPAD (RC_OCOR.cod_arrecad,3,0) || '-' || LPAD (v_sequencia, 7, '0') ||'.txt' ; --v_nom_arquivo := LPAD (RC_OCOR.cod_arrecad,3,0)||'_'||LPAD (v_sequencia, 7, '0')||'_'||to_char(sysdate,'ddmmyyyy')||'.txt'; --pedido 12477 -- NOME DO AQUIVO TEMPORÁRIO (GERADO NO SERVIDOR DE APLICAÇÕES) BEGIN SELECT LOWER (dsc_path_temp || LPAD (seq_arquivo_tmp.NEXTVAL, 5, '0') || '.ENV' ) INTO v_arq_temp FROM geral; arquivo := TEXT_IO.fopen (v_arq_temp, 'W'); EXCEPTION WHEN OTHERS THEN msg_alert ('ERRO AO CRIAR ARQUIVO : ' || v_arq_temp, 'I', FALSE); SYNCHRONIZE; RETURN; END; -- Quando arrecadador tem conta compromisso - Novo layout espefico Banco Caixa Economica -- IF v_conta_compromisso IS NOT NULL THEN v_dados_conta_compromisso := LPAD(NVL(v_conta_compromisso, ' '), 16, ' ') || 'PP' /* Identicação do Ambiente Cliente e Ambiente Caixa */ || LPAD (' ', 27, ' ') || '000000' /* Sequencia de incio do arquivo */ || ' ' /* Reservado para o futuro */ ; ELSE v_dados_conta_compromisso := LPAD (' ', 52, ' '); END IF; TEXT_IO.put_line (arquivo, 'A' || '1' || RPAD (v_cod_convenio, 20, ' ') || RPAD (v_comp.nom_comp, 20, ' ') || SUBSTR (TO_CHAR (rc_ocor.cod_arrecad, '000'), 2, 3) || RPAD (v_nom_arrecad, 20, ' ') || TO_CHAR (FUN_FUSO_HORARIO_DATE, 'YYYYMMDD') || SUBSTR (TO_CHAR (v_sequencia, '000000'), 2, 6) || LPAD(v_cod_versao_layout, 2, '0') || 'DEBITO AUTOMATICO' || v_dados_conta_compromisso || CHR(13) ); v_primeiro := 'N'; v_abriu_arq := 'S'; END IF; --- Ped: 11418 - FORMATA A IDENTIFICAÇÃO DO USUARIO (NUMERDO DA LIGAÇÃO) --- BEGIN v_idt_cliente := PAC_DEBITO_AUTOMATICO. fun_idt_cliente_da(p_texto => RC_OCOR.num_ligacao || fun_digito_ligacao (RC_OCOR.num_ligacao) ,p_mascara => v_msc_identif_cliente ,p_direcao => v_sta_posicao_cliente); EXCEPTION WHEN OTHERS THEN MSG_ALERT(SQLERRM || ' - ERRO NA FORMATAÇÃO DA MASCARA !!!', 'E', TRUE); END; -- Configura o numero sequencial da linha -- sequencia_linha; IF rc_ocor.tpo_registro = 'C' THEN v_cpo_tot := 'C' || RPAD(v_idt_cliente, 25, ' ') --SUBSTR (TO_CHAR (rc_ocor.num_ligacao, '000000000'), 2, 9) || v_digito_lig || ' ' || RPAD (v_filler, 14, ' ') || LPAD (rc_ocor.num_agencia, 4, '0') || RPAD (rc_ocor.cta_corrente, 14, ' ') || RPAD (rc_ocor.dsc_ocorr1, 40, ' ') || RPAD (rc_ocor.dsc_ocorr2, 40, ' ') || RPAD (v_filler, 19, ' ') -- 25 || LPAD (v_dsc_seq_linha, 6, ' ') || rc_ocor.cod_movimento || CHR(13); TEXT_IO.put_line (arquivo, v_cpo_tot); ELSE v_numero := LPAD (RC_OCOR.num_ligacao, 10, '0') || '01' || LPAD (RC_OCOR.ano_lancto, 4, '0') || LPAD (RC_OCOR.mes_lancto, 2, '0') || LPAD (RC_OCOR.num_aviso, 9, '0') || LPAD (RC_OCOR.num_emissao, 3, '0') || LPAD (RC_OCOR.cod_tributo, 3, '0') || LPAD (v_cod_versao_layout, 2, '0'); /* CAMPO LIVRE */ --Pedido 13836 --- Ped: 11418 - Novo layout para o débito automático ---- IF v_cod_versao_layout = 5 THEN IF UPPER(v_sta_exibe_docprinc) = 'S' THEN v_dados_final_linha_e := LPAD (NVL(RC_OCOR.num_doc_princ, ' '), 16, ' ') || RPAD (v_filler, 4, ' ') ; ELSE config_versao_04; END IF; ELSIF v_cod_versao_layout = 4 THEN config_versao_04; ELSE MSG_ALERT('LAYOUT DO ARRECADADOR ' || rc_ocor.cod_arrecad || ' DESCONHECIDO !!!' , 'E', TRUE); END IF; v_cpo_tot := 'E' || RPAD(v_idt_cliente, 25, ' ') || LPAD (RC_OCOR.num_agencia, 4, '0') || RPAD (LTRIM (RC_OCOR.cta_corrente), 14, ' ') || TO_CHAR (RC_OCOR.dat_vencto, 'YYYYMMDD') || SUBSTR (TO_CHAR (RC_OCOR.val_lancto * 100, '000000000000000'), 2, 15) || '03' || RPAD (v_numero, 60, ' ') || v_dados_final_linha_e || RC_OCOR.cod_movimento || CHR (13); -- Pedido 13836 --Atualiza a data de envio do arquivo begin pac_debito_automatico.prc_atualiza_dat_envio(rc_ocor.zona_ligacao,rc_ocor.num_sequencia,rc_ocor.num_ligacao,rc_ocor.num_seq_deb_aut); exception when others then MSG_ALERT(SQLERRM || ' - Erro na atualização da data de envio do arquivo na pac_debito_automatico.prc_atualiza_dat_envio!', 'E', TRUE); end; v_tot_valor := v_tot_valor + RC_OCOR.val_lancto; TEXT_IO.put_line (arquivo, v_cpo_tot); END IF; v_tot_registros := v_tot_registros + 1; ------------------Atualiza a barra de progressão-------------------------- IF MOD (percentual, 10) = 0 THEN -- NÃO DAR REFRESH TODA HORA PARA NÃO DEMORAR O processaMENTO IF GET_ITEM_PROPERTY ('BL_GERA_MSG.DISP_SEL', visible) = 'FALSE' THEN SET_ITEM_PROPERTY ('BL_GERA_MSG.DISP_SEL', visible, property_true); END IF; SET_ITEM_PROPERTY ('BL_GERA_MSG.DISP_SEL', width, v_width); :bl_gera_msg.qtd_arq_gerados := 'Gerando arquivo ' || v_arq_atual || ' de ' || v_arq_total; :bl_gera_msg.disp_sel := TO_CHAR (percentual) || '%'; SHOW_VIEW ('CA_GERA_MSG'); SYNCHRONIZE; END IF; ------------------Atualiza a barra de progressão-------------------------- END LOOP; IF v_abriu_arq = 'S' AND v_primeiro = 'N' THEN sequencia_linha; TEXT_IO.put_line (arquivo, 'Z' || SUBSTR (TO_CHAR (v_tot_registros + 2, '000000'), 2, 6) || SUBSTR (TO_CHAR (v_tot_valor * 100, '00000000000000000'), 2, 17) || LPAD (' ', 119, ' ') --126 || LPAD (v_dsc_seq_linha, 06, ' ') || ' ' || CHR (13) ); TEXT_IO.fclose (arquivo); -- ATUALIZA O NSA DO ARRECADADOR (SEQ + 1) ATUALIZA_NSA; -- FAZENDO DOWNLOAD DO ARQUIVO TEMPORÁRIO GERADO NO SERVIDOR PARA A ESTAÇÃO. pu_download_as (v_dir_arq_da_env, v_nom_arquivo, v_arq_temp); END IF; HIDE_VIEW ('CA_GERA_MSG'); END; -------------------------------------------------- PROCEDURE PU_DOWNLOAD_AS( P_PATH_CLIENTE IN VARCHAR2, P_ARQUIVO_CLIENT IN VARCHAR2, P_ARQUIVO_SERVER IN VARCHAR2) IS l_success boolean; BEGIN IF NOT WEBUTIL_FILE.FILE_EXISTS(P_PATH_CLIENTE) THEN -- SE O DIRETORIO DO CLIENT NÃO EXISTIR CRIA DINAMICAMENTE IF NOT WEBUTIL_FILE.CREATE_DIRECTORY(INITCAP(P_PATH_CLIENTE)) THEN -- SE NÃO DER PARA CRIAR O DIRETÓRIO ABORTA MSG_ALERT( 'Não foi possível criar o diretório : '||chr(10)||chr(10)||P_PATH_CLIENTE,'E',TRUE); NULL; END IF; END IF; l_success := webutil_file_transfer.AS_to_Client_with_progress (clientFile => P_PATH_CLIENTE||P_ARQUIVO_CLIENT ,serverFile => P_ARQUIVO_SERVER ,progressTitle => 'Efetuando Download do arquivo : '||P_ARQUIVO_CLIENT ,progressSubTitle => 'Aguarde....'); if l_success then null; else msg_alert('Download do arquivo : '||P_ARQUIVO_CLIENT||' falhou !!! ','E',true); end if; END; ----------------------------------------