Ah, blz. Entendi errado.. eu faço tudo via sql, depois só um loop na consulta e escrevo o arquivo. Tem muito a ver com o meu banco isso aí, mas se vc seguir a estrutura, campo a campo, deve sair tb```
code_text
/*CABEÇALHO DO ARQUIVO*/
SELECT
1 AS ORDEM, 1 as SEQUENCIA,1 as detalhe,
'237' ---01.0
||'0000' ---02.0
||'0' ---03.0
||rpad(cast('' as varchar),9,' ') ---04.0
||'2'---05.0
||ENT_CNPJ---06.0
||rpad(cast(FIN_CONTA_CORRENTE.CCO_CODIGO_CONVENIO as varchar),20,' ') ---07.0
|| lpad(cast(CCO_AGENCIA as varchar),5,'0') ---08.0
||SUBSTR(CCO_DIGITO_AGENCIA,1,1)---09.0
||lpad(cast(CCO_NUMERO as varchar),12,'0') ---10.0
||CCO_DIGITO_CONTA ---11.0
||' '---12.0
||SUBSTR(ENT_NOME,1,30)---13.0
||rpad(cast('BANCO BRADESCO S.A' as char(30)),30,' ') ---14.0
||rpad(cast('' as varchar),10,' ') ---15.0
||'1' ---16.0
||to_char(current_date,'ddMMyyyy')---17.0
||to_char(now(),'HH24MISS')---18.0
||Lpad(cast(':NSA_ARQUIVO' as varchar),6,'0') ---19.0
||'089'---20.0
||'01600'---21.0
||rpad(cast('' as varchar),20,' ') ---22.0
||rpad(cast('' as varchar),20,' ') ---23.0
||rpad(cast('' as varchar),29,' ') ---24.0
AS EXPORTACAO
FROM GER_ENTIDADE
INNER JOIN FIN_CONTA_CORRENTE ON FIN_CONTA_CORRENTE.CCO_ID = GER_ENTIDADE.CCO_ID
UNION ALL
/*CABEÇALHO LOTE*/
SELECT
2, 1 as SEQUENCIA,1 as detalhe,
'237' ---1.01
||'0001' --1.02
||'1'--1.03
||'C'--1.04
||'20'--1.05
||'01'--1.06
||'045'--1.07
||' '--1.08
||'2'--1.09
||ENT_CNPJ--1.10
||rpad(cast(FIN_CONTA_CORRENTE.CCO_CODIGO_CONVENIO as varchar),20,' ') --1.11
||lpad(cast(CCO_AGENCIA as varchar),5,'0') --1.12
||SUBSTR(CCO_DIGITO_AGENCIA,1,1)--1.13
||lpad(cast(CCO_NUMERO as varchar),12,'0') ---1.14
||CCO_DIGITO_CONTA ---1.15
||' ' ---1.16
||SUBSTR(ENT_NOME,1,30)---1.17
||rpad(cast('' as varchar),40,' ') ---1.18
||lpad(cast(ENT_END as varchar),30,' ') ---1.19
||lpad(cast(ENT_numero as varchar),5,'0') ---1.20
||lpad(cast(ent_compl as varchar),15,' ') ---1.21
||rpad(cast(ENT_MUNICIPIO as varchar),20,' ') ---1.22
||SUBSTR(ENT_CEP,1,5)---1.23
||SUBSTR(ENT_CEP,6,3)---1.24
||ENT_UF---1.25
||'01'---1.36
||rpad(cast('' as varchar),6,' ')--1.27
||rpad(cast('' as varchar),10,' ')--1.28
FROM GER_ENTIDADE
INNER JOIN FIN_CONTA_CORRENTE ON FIN_CONTA_CORRENTE.CCO_ID = GER_ENTIDADE.CCO_ID
UNION ALL
/*REGISTRO DETALHE SEGMENTO A*/
SELECT
2, ROW_NUMBER () OVER (ORDER BY vw_fin_relacao_pagamentos.codigo,tipo) as ordem,1 as detalhe,
COALESCE(b1.ban_numero,'') ---A.01
||'0001' ---A.02 --incrementar 1 a cada vez que gerar o arquivo.
||'3' ---A.03
|| ':CONTADOR'---A.04
||'A' ---A.05
||'0' --A.06
||'00' --A.07
||'000' --A.08
||'237' --A.09 (Verificar se rá mudar as contas dos favorecidos)
||lpad(cast(coalesce(fec_pensionista.cpn_age_numero, fec_cartorio.car_ag_bradesco) as varchar),5,'0') ---A.10
||rpad(cast(car_digito_ag_bradesco as varchar),1,' ')--A.11
||lpad(cast(coalesce(cast(fec_pensionista.cpn_num_conta as varchar), fec_cartorio.car_cc_bradesco) as varchar),12,'0') ---A.12
||rpad(cast(coalesce(fec_pensionista.cpn_digito, CAR_DIGITO_bradesco) as varchar),1,' ')--A.13
||rpad(cast('' as varchar),1,' ')--A.14
||rpad(cast(coalesce(frh_funcionario.fun_nome, FEC_CARTORIO.CAR_DELEGATARIO) as varchar),30,' ') ---A.15
||lpad(cast(coalesce(gratuito.mov_id,isento.mov_id,renda_minima.mov_id,avulso.mov_id) as varchar),20,'0') ---A.16 -- incrementar 1 para cada linha do arquivo. é o código do item do lote de faturamento.
||to_char(COALESCE(gratuito.ltm_data_credito,isento.ltm_data_credito,renda_minima.ltm_data_credito,avulso.ltm_data_credito),'ddMMyyyy')---A.17
||'BRL'--A.18
||'0000000000'--A.19
||lpad(coalesce(replace(cast(fin_movimentacao.mov_valor_liquido as varchar),'.',''),''),20,'0')--A.20 layout diz 13 posicoes. Mas so bate com 20.
||rpad(cast('' as varchar),20,' ')--A.21
||'00000000' --A.22
||'000000000000000' --A.23 layout diz 13 posicoes. Mas so bate com 15.
||rpad(cast('' as varchar),40,' ')--A.24
||'01' --A.25 (Código Finalidade Doc)
||rpad(cast('' as varchar),5,' ')--A.26 (Código Finalidade TED)
||'CC'--A.27
||rpad(cast('' as varchar),3,' ')--A.28
||'0' --A.29
||rpad(cast('' as varchar),10,' ')--A.30
FROM vw_fin_relacao_pagamentos
Inner Join vw_status_solicitacao On vw_status_solicitacao.codigo = vw_fin_relacao_pagamentos.status
Inner Join fec_cartorio On fec_cartorio.car_id = vw_fin_relacao_pagamentos.car_id
Inner Join fec_comarca_e_distritos On fec_comarca_e_distritos.com_id = fec_cartorio.com_id
Inner Join fec_distrito On fec_distrito.dis_id = fec_cartorio.dis_id
Left Join fin_lote_movimentacao gratuito on gratuito.atg_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'G'
Left Join fin_lote_movimentacao isento on isento.ati_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'I'
Left Join fin_lote_movimentacao renda_minima on renda_minima.srm_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'R'
Left Join fin_lote_movimentacao avulso On (avulso.fla_id = vw_fin_relacao_pagamentos.codigo) And (vw_fin_relacao_pagamentos.tipo = 'A')
Inner Join fin_lote on fin_lote.lot_id = gratuito.lot_id or fin_lote.lot_id = isento.lot_id or fin_lote.lot_id = renda_minima.lot_id Or(fin_lote.lot_id = avulso.lot_id)
Inner Join fin_movimentacao On fin_movimentacao.mov_id = coalesce(gratuito.mov_id,isento.mov_id,renda_minima.mov_id,avulso.mov_id)
inner Join frh_funcionario CARTORIO on cartorio.car_id = FEC_CARTORIO.CAR_ID
Left Join frh_funcionario on fin_movimentacao.fun_id = frh_funcionario.fun_id and frh_funcionario.car_id is null
Left Join fec_pensionista on fec_pensionista.fun_id_pensionista = fin_movimentacao.fun_id and fec_pensionista.fun_id_funcionario = cartorio.fun_id
Left Join fin_banco b on b.ban_id = fec_pensionista.ban_id
Left Join ger_municipio m on m.mun_id = fec_pensionista.mun_id,
(SELECT DISTINCT b.ban_numero FROM fin_banco b WHERE b.ban_numero = '237' and b.ban_ativo = 'A')b1
WHERE fec_pensionista.fun_id_pensionista is null
and (b.ban_numero = '237' or b.ban_numero is null)
and fin_lote.lot_id = :LOTE
UNION ALL
/*REGISTRO DETALHE SEGEMENTO B*/
SELECT
2, ROW_NUMBER () OVER (ORDER BY vw_fin_relacao_pagamentos.codigo,tipo) as ordem,2 as detalhe,
b1.ban_numero ---B.01
||'0001' ---B.02 --incrementar 1 a cada vez que gerar o arquivo.
||'3' ---B.03
|| ':CONTADOR'--lpad(cast( ROW_NUMBER () OVER (ORDER BY vw_fin_relacao_pagamentos.codigo,tipo) as varchar),5,'0')
||'B' ---B.05
||rpad(cast('' as varchar),3,' ')--B.06
||'2' ---B.07
||case when fec_pensionista.cpn_cpf_representante is null then FEC_CARTORIO.CAR_CNPJ else '000' || fec_pensionista.cpn_cpf_representante end ---B.08
||rpad(cast(COALESCE(coalesce(fec_pensionista.cpn_endereco,FEC_CARTORIO.CAR_ENDERECO),'') as varchar),30,' ') ---B.09
||lpad(COALESCE(cast(coalesce(fec_pensionista.cpn_numero,FEC_CARTORIO.CAR_NUMERO) as varchar),''),5,'0') ---B.10
||Rpad(cast(COALESCE(coalesce(fec_pensionista.cpn_complemento,FEC_CARTORIO.CAR_COMPLEMENTO),'') as varchar),15,' ') ---B.11
||Rpad(cast(COALESCE(coalesce(fec_pensionista.cpn_bairro,FEC_CARTORIO.CAR_BAIRRO),'') as varchar),15,' ') ---B.12
||Rpad(cast(COALESCE(coalesce(m.mun_nome,FEC_CARTORIO.CAR_MUNICIPIO),'') as varchar),20,' ') ---B.13
||SUBSTR(coalesce(cpn_CEP,ENT_CEP),1,5)---B.14
||SUBSTR(coalesce(cpn_CEP,ENT_CEP),6,3)---B.15
||RPAD(COALESCE(coalesce(fec_pensionista.cpn_UF,FEC_CARTORIO.CAR_UF),''),2,' ')---B.16
||to_char(COALESCE(gratuito.ltm_data_credito,isento.ltm_data_credito,renda_minima.ltm_data_credito,avulso.ltm_data_credito),'ddMMyyyy')---B.17
||lpad(coalesce(replace(cast(CASE vw_fin_relacao_pagamentos.tipo
WHEN 'G' THEN gratuito.ltm_valor
WHEN 'I' THEN isento.ltm_valor
WHEN 'R' THEN renda_minima.ltm_valor
WHEN 'A' THEN avulso.ltm_valor END as varchar),'.',''),''),15,'0')---B.18
||'000000000000000'---B.19
||'000000000000000'---B.20
||'000000000000000'---B.21
||'000000000000000'---B.22
||rpad(cast('' as varchar),15,' ')--B.23
||'0' --B.24
||rpad(cast('' as varchar),6,' ')--B.25
||rpad(cast('' as varchar),8,' ')--B.26
FROM GER_ENTIDADE,
vw_fin_relacao_pagamentos
Inner Join vw_status_solicitacao On vw_status_solicitacao.codigo = vw_fin_relacao_pagamentos.status
Inner Join fec_cartorio On fec_cartorio.car_id = vw_fin_relacao_pagamentos.car_id
Inner Join fec_comarca_e_distritos On fec_comarca_e_distritos.com_id = fec_cartorio.com_id
Inner Join fec_distrito On fec_distrito.dis_id = fec_cartorio.dis_id
Left join fin_lote_movimentacao gratuito on gratuito.atg_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'G'
Left join fin_lote_movimentacao isento on isento.ati_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'I'
Left join fin_lote_movimentacao renda_minima on renda_minima.srm_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'R'
Left Join fin_lote_movimentacao avulso On (avulso.fla_id = vw_fin_relacao_pagamentos.codigo) And (vw_fin_relacao_pagamentos.tipo = 'A')
Inner join fin_lote on fin_lote.lot_id = gratuito.lot_id or fin_lote.lot_id = isento.lot_id or fin_lote.lot_id = renda_minima.lot_id Or(fin_lote.lot_id = avulso.lot_id)
Inner Join fin_movimentacao On fin_movimentacao.mov_id = coalesce(gratuito.mov_id,isento.mov_id,renda_minima.mov_id,avulso.mov_id)
Inner join frh_funcionario CARTORIO on cartorio.car_id = FEC_CARTORIO.CAR_ID
Left join frh_funcionario on fin_movimentacao.fun_id = frh_funcionario.fun_id and frh_funcionario.car_id is null
Left join fec_pensionista on fec_pensionista.fun_id_pensionista = fin_movimentacao.fun_id and fec_pensionista.fun_id_funcionario = cartorio.fun_id
Left join fin_banco b on b.ban_id = fec_pensionista.ban_id
Left join ger_municipio m on m.mun_id = fec_pensionista.mun_id,
(SELECT DISTINCT b.ban_numero FROM fin_banco b WHERE b.ban_numero = '237' and b.ban_ativo = 'A')b1
WHERE fec_pensionista.fun_id_pensionista is null
and (b.ban_numero = '237' or b.ban_numero is null)
and fin_lote.lot_id = :LOTE
UNION ALL
/*TRAILER DO LOTE*/
SELECT
3, 1 as SEQUENCIA,1 as detalhe,
b1.ban_numero ---5.01
||'0001' ---5.02 --incrementar 1 a cada vez que gerar o arquivo.
||'5' ---5.03
||rpad(cast('' as varchar),9,' ')--5.04
|| ':REGISTROS_LOTE' --pad(cast(count(1) as varchar),6,'0')--5.04 ---5.05 --incrementar 1 a cada item do lote.
||lpad(coalesce(replace(cast(SUM(fin_movimentacao.mov_valor_liquido) as varchar),'.',''),''),18,'0')--5.06
||rpad(cast('' as varchar),18,'0')--5.07
||rpad(cast('' as varchar),6,'0')--5.08
||rpad(cast('' as varchar),165,' ')--5.09
||rpad(cast('' as varchar),10,' ')--5.10
FROM vw_fin_relacao_pagamentos
Inner Join vw_status_solicitacao On vw_status_solicitacao.codigo = vw_fin_relacao_pagamentos.status
Inner Join fec_cartorio On fec_cartorio.car_id = vw_fin_relacao_pagamentos.car_id
Inner Join fec_comarca_e_distritos On fec_comarca_e_distritos.com_id = fec_cartorio.com_id
Inner Join fec_distrito On fec_distrito.dis_id = fec_cartorio.dis_id
Left join fin_lote_movimentacao gratuito on gratuito.atg_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'G'
Left join fin_lote_movimentacao isento on isento.ati_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'I'
Left join fin_lote_movimentacao renda_minima on renda_minima.srm_id = vw_fin_relacao_pagamentos.codigo and vw_fin_relacao_pagamentos.tipo = 'R'
Left Join fin_lote_movimentacao avulso On (avulso.fla_id = vw_fin_relacao_pagamentos.codigo) And (vw_fin_relacao_pagamentos.tipo = 'A')
Inner Join fin_movimentacao On fin_movimentacao.mov_id = coalesce(gratuito.mov_id,isento.mov_id,renda_minima.mov_id,avulso.mov_id)
Inner join fin_lote on fin_lote.lot_id = gratuito.lot_id or fin_lote.lot_id = isento.lot_id or fin_lote.lot_id = renda_minima.lot_id Or(fin_lote.lot_id = avulso.lot_id)
Inner join frh_funcionario on fin_movimentacao.fun_id = frh_funcionario.fun_id and frh_funcionario.car_id = fec_cartorio.car_id,
(SELECT DISTINCT b.ban_numero FROM fin_banco b WHERE b.ban_numero = '237' and b.ban_ativo = 'A')b1
WHERE fin_lote.lot_id = :LOTE
GROUP BY b1.ban_numero
UNION ALL
/*TRAILER DO ARQUIVO*/
SELECT DISTINCT
4, 1 as SEQUENCIA,1 as detalhe,
ban_numero ---9.01
||'9999' ---9.02
||'9' ---9.03
||rpad(cast('' as varchar),9,' ')--9.04
||'000001' --9.05
||':TOTAL' --9.06
||'000000' --9.07
||rpad(cast('' as varchar),205,' ')--9.04
FROM fin_banco
WHERE ban_numero = '237'
order by 1,2,3