No es un componente pero bueno...
AH!!!! NO TIENE EN CUENTA EL VENCIMIENTO,POR LO CUAL TODOS LOS COBROS SON A LA VISTA !!!!!!!!!!!!!!!!!!!!!!!!!
A ver si algún día lo termino
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
type
T_concepto = string[40];
T_q19_cab_presentador = RECORD
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_f_soporte : string[6];
b_libre : string[6];
c_nom_pre : string[40]; d_libre : string[20];
e_enti : string[4];
e_ofic : string[4];
e_libre : string[12];
f_libre : string[40];
g_libre : string[14];
end;
T_q19_cab_ordenante= RECORD
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_f_soporte : string[6];
b_f_cargo : string[6];
c_nom_ord : string[40]; d_enti : string[4];
d_ofic : string[4];
d_dc : string[2];
d_cta : string[10];
e_libre : string[8];
e_procedimiento : string[2];
e_libre2 : string[10];
f_libre : string[40];
g_libre : string[10];
end;
T_q19_ind_obligatorio = Record a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_referencia : string[12];
c_titular : string[40];
d_enti : string[4];
d_ofic : string[4];
d_dc : string[2];
d_cta : string[10];
e_importe : string[10];
f_cod_dev : string[6];
f_cod_ref : string[10];
g_concepto: T_concepto;
h_libre : string[8];
end;
T_q19_opcional_1_5 = Record
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_referencia : string[12];
c_concepto : T_concepto;
d_concepto : T_concepto;
e_concepto : T_concepto;
f_libre : string[14];
end;
T_q19_opcional_6 = Record
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_referencia : string[12];
c_titular : string[40];
d_domicilio : string[40];
e_plaza : string[35];
e_CP : string[5];
f_libre : string[14];
end;
T_q19_tot_ordenante= RECORD
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_libre : string[12];
c_libre : string[40];
d_libre : string[20];
e_total : string[10];
e_libre : string[6];
f_num_dom : string[10]; f_num_reg : string[10]; f_libre : string[20];
g_libre : string[18];
end;
T_q19_tot_general= RECORD
a_cod_reg : String[2];
a_cod_dat : string[2];
b_nif : string[9];
b_sufijo : string[3];
b_libre : string[12];
c_libre : string[40];
d_ordenantes : string[4];
d_libre : string[16];
e_total : string[10];
e_libre : string[6];
f_num_dom : string[10]; f_num_reg : string[10]; f_libre : string[10];
g_libre : string[18];
end;
const
max_opc = 5;
cod_opc : array[1..max_opc+1] of string = ('81','82','83','84','85','86');
var
cab_pre : T_q19_cab_presentador; cab_ord : T_q19_cab_ordenante; ind_obl : T_q19_ind_obligatorio; reg_opc : array [1..5] of T_q19_opcional_1_5; concepto : array [1..16] of T_concepto;
opc_dat : T_q19_opcional_6;
tot_ord : T_q19_tot_ordenante;
tot_general : T_q19_tot_general;
f: textfile;
linea : string;
fecha_soporte, fecha_cargo : string; Presentador, Ordenante : string; NIF_pre, NIF_ord : string; suf_pre, suf_ord : string; enti_pre,ofic_pre : string;
enti_ord, ofic_ord, dc_ord, cta_ord: string; ref_ord : string;
domiciliaciones_ord : integer;
registros_ord : integer;
domiciliaciones_total : integer;
registros_total : integer;
nom_cli :string;
enti_cli, ofic_cli, dc_cli, cta_cli: string; ref_cli, domic_cli, plaza_cli, cp_cli : string;
importe_dom : double;
ref_dom : string; importe_ord : double; importe_total : double;
cont_opc : byte; cont_dom : byte;
begin
fecha_soporte:=datetostr(today);
fecha_cargo:=datetostr(today);
Presentador:='nombre del presentador';
NIF_pre:='00000000X';
suf_pre:='000';
enti_pre:='0000';
ofic_pre:='0000';
Ordenante:='nombre del presentador';
NIF_ord:='00000000X';
suf_ord:='000';
enti_ord:='0000';
ofic_ord:='0000';
dc_ord:='00';
cta_ord:='0000000000';
importe_dom:=0;
importe_ord:=0;
importe_total:=0;
registros_total:=0;
registros_ord:=0;
domiciliaciones_ord:=0;
SaveDialog1.FileName:='remesa';
SaveDialog1.Execute;
assignfile(f,SaveDialog1.FileName);
rewrite(f);
cab_pre.a_cod_reg :='51';
cab_pre.a_cod_dat :='80';
cab_pre.b_nif :=NIF_pre;
cab_pre.b_sufijo :=suf_pre;
cab_pre.b_f_soporte :=FechaFormato('DDMMYY',fecha_soporte);
cab_pre.b_libre :=Format('%-6s',[ '']); cab_pre.c_nom_pre :=Format('%-40s',[Presentador]);
cab_pre.d_libre :=Format('%-20s',[' ']); cab_pre.e_enti :=enti_pre;
cab_pre.e_ofic :=ofic_pre;
cab_pre.e_libre :=Format('%-12s',[' ']); cab_pre.f_libre :=Format('%-40s',[' ']); cab_pre.g_libre :=Format('%-14s',[' ']);
with cab_pre
do Linea:= a_cod_reg+
a_cod_dat+
b_nif+
b_sufijo+
b_f_soporte+
b_libre+
c_nom_pre+
d_libre+
e_enti+
e_ofic+
e_libre+
f_libre+
g_libre;
writeln(f,linea);
inc(registros_total);
cab_ord.a_cod_reg :='53';
cab_ord.a_cod_dat :='80';
cab_ord.b_nif :=NIF_ord;
cab_ord.b_sufijo :=suf_ord;
cab_ord.b_f_soporte :=FechaFormato('DDMMYY',fecha_soporte);
cab_ord.b_f_cargo :=FechaFormato('DDMMYY',fecha_cargo);
cab_ord.c_nom_ord :=Format('%-40s',[Ordenante]);
cab_ord.d_enti :=enti_ord;
cab_ord.d_ofic :=ofic_ord;
cab_ord.d_dc :=dc_ord;
cab_ord.d_cta :=cta_ord;
cab_ord.e_libre :=Format('%-8s',[' ']); cab_ord.e_procedimiento:='01'; cab_ord.e_libre2 :=Format('%-10s',[' ']); cab_ord.f_libre :=Format('%-40s',[' ']); cab_ord.g_libre :=Format('%-10s',[' ']);
with cab_ord
do Linea:= a_cod_reg+
a_cod_dat+
b_nif+
b_sufijo+
b_f_soporte+
b_f_cargo+
c_nom_ord+
d_enti+
d_ofic+
d_dc+
d_cta+
e_libre+
e_procedimiento+
e_libre2+
f_libre+
g_libre;
writeln(f,linea);
inc(registros_total);
inc(registros_ord);
nom_cli:='########################';
enti_cli:='####';
ofic_cli:='####';
dc_cli:='##';
cta_cli:='##########';
ref_dom:='############';
concepto[1]:='####################';
DMF1.IBQuery1.SQL.Text:=
' SELECT periodo_fac,serie_fac,num_fac, '+
' nom_comp AS CLIENTE, importe AS TOTAL, vto AS VTO, Fecha_valor AS FECHA, '+
' Banco_Cli as BANCO, enti_cli AS ENTI, ofic_cli AS OFIC, dc_cli AS DC, cta_cli AS CTA, '+
' dir_cli, cp_cli, loc_cli, prov_cli, ref_cli AS referencia, ref AS nota, extra '+
' FROM Efectos_Cobrar '+
' WHERE '+Filtro_efecto+
' ORDER BY enti_cli,ofic_cli,periodo_fac,serie_fac,num_fac'+
' ';
Dmf1.Actualiza_Query(dmf1.IBquery1);
while not dmf1.IBQuery1.Eof do
begin
nom_cli:=dmf1.IBQuery1.fieldbyname('cliente').AsString;
enti_cli:=dmf1.IBQuery1.fieldbyname('enti').AsString;
ofic_cli:=dmf1.IBQuery1.fieldbyname('ofic').AsString;
dc_cli:=dmf1.IBQuery1.fieldbyname('dc').AsString;
cta_cli:=dmf1.IBQuery1.fieldbyname('cta').AsString;
ref_dom:='Mant. '+dmf1.IBQuery1.fieldbyname('referencia').AsString;
importe_dom:=dmf1.IBQuery1.fieldbyname('total').AsFloat;
concepto[1]:=dmf1.IBQuery1.fieldbyname('nota').AsString;
domic_cli:=dmf1.IBQuery1.fieldbyname('dir_cli').AsString;
plaza_cli:=dmf1.IBQuery1.fieldbyname('loc_cli').AsString;
cp_cli:=dmf1.IBQuery1.fieldbyname('cp_cli').AsString;
ind_obl.a_cod_reg :='56';
ind_obl.a_cod_dat :='80';
ind_obl.b_nif :=NIF_ord;
ind_obl.b_sufijo :=suf_ord;
ind_obl.b_referencia :=Format('%-12s',[ref_dom]);
ind_obl.c_titular :=Format('%-40s',[nom_cli]);
ind_obl.d_enti :=Format('%-4s',[enti_cli]);
ind_obl.d_ofic :=Format('%-4s',[ofic_cli]);
ind_obl.d_dc :=Format('%-2s',[dc_cli]);
ind_obl.d_cta :=Format('%-10s',[cta_cli]);
ind_obl.e_importe :=redondeo_str_sincoma(importe_dom,10,2); ind_obl.f_cod_dev :='000001';
ind_obl.f_cod_ref :='1234567890';
ind_obl.g_concepto :=Format('%-40s',[concepto[1]]); ind_obl.h_libre :=Format('%-8s',[' ']);
with ind_obl
do Linea:= a_cod_reg+
a_cod_dat+
b_nif+
b_sufijo+
b_referencia+
c_titular+
d_enti+
d_ofic+
d_dc+
d_cta+
e_importe+
f_cod_dev+
f_cod_ref+
g_concepto+
h_libre;
writeln(f,linea);
inc(registros_total);
inc(registros_ord);
inc(domiciliaciones_ord);
inc(domiciliaciones_total);
importe_total:=importe_total+importe_dom;
importe_ord:=importe_ord+importe_dom;
opc_dat.a_cod_reg :='56';
opc_dat.a_cod_dat :=cod_opc[max_opc+1];
opc_dat.b_nif :=NIF_ord;
opc_dat.b_sufijo :=suf_ord;
opc_dat.b_referencia :=Format('%-12s',[ref_dom]);
opc_dat.c_titular :=Format('%-40s',[nom_cli]);
opc_dat.d_domicilio :=Format('%-40s',[domic_cli]);
opc_dat.e_plaza :=Format('%-35s',[plaza_cli]);
opc_dat.e_CP :=Format('%.5d',[StrToInt(cp_cli)]);
opc_dat.f_libre :=Format('%-14s',[' ']);
with opc_dat
do Linea:= a_cod_reg+
a_cod_dat+
b_nif +
b_sufijo +
b_referencia+
c_titular +
d_domicilio+
e_plaza +
e_CP +
f_libre;
writeln(f,linea);
inc(registros_total);
inc(registros_ord);
dmf1.IBQuery1.Next;
end;
tot_ord.a_cod_reg :='58';
tot_ord.a_cod_dat :='80';
tot_ord.b_nif :=NIF_ord;
tot_ord.b_sufijo :=suf_ord;
tot_ord.b_libre :=Format('%-12s',[' ']) ; tot_ord.c_libre :=Format('%-40s',[' ']); tot_ord.d_libre :=Format('%-20s',[' ']); tot_ord.e_total :=redondeo_str_sincoma(importe_ord,10,2); tot_ord.e_libre :=Format('%-6s',[' ']); tot_ord.f_num_dom :=Format('%.10d',[domiciliaciones_ord]) ; tot_ord.f_num_reg :=Format('%.10d',[registros_ord+1]); tot_ord.f_libre :=Format('%-20s',[' ']); tot_ord.g_libre :=Format('%-18s',[' ']); with tot_ord
do Linea:= a_cod_reg+
a_cod_dat+
b_nif+
b_sufijo+
b_libre+
c_libre+
d_libre+
e_total+
e_libre+
f_num_dom+
f_num_reg+
f_libre+
g_libre;
writeln(f,linea);
inc(registros_total);
tot_general.a_cod_reg :='59';
tot_general.a_cod_dat :='80';
tot_general.b_nif :=NIF_pre;
tot_general.b_sufijo :=suf_pre;
tot_general.b_libre :=Format('%-12s',[' ']); tot_general.c_libre :=Format('%-40s',[' ']); tot_general.d_ordenantes :=Format('%.4d',[1]);
tot_general.d_libre :=Format('%-16s',[' ']); tot_general.e_total :=redondeo_str_sincoma(importe_total,10,2); tot_general.e_libre :=Format('%-6s',[' ']); tot_general.f_num_dom :=Format('%.10d',[domiciliaciones_total]); tot_general.f_num_reg :=Format('%.10d',[registros_total+1]); tot_general.f_libre :=Format('%-10s',[' ']); tot_general.g_libre :=Format('%-18s',[' ']);
with tot_general
do Linea:= a_cod_reg+
a_cod_dat+
b_nif+
b_sufijo+
b_libre+
c_libre+
d_ordenantes+
d_libre+
e_total+
e_libre+
f_num_dom+
f_num_reg+
f_libre+
g_libre;
writeln(f,linea);
closefile(f);
end;
Espero que os sea util y si teneis alguna otra norma estaría bien dejarla por aquí.
Saludos.
PD: Para usar esto deberéis saber como funciona la norma, preguntad cualquier duda. Tambien tengo un PDF del banco donde la explica, por si os interesa.