miércoles, 31 de enero de 2018

Cambios código


/* Unir ficheros */

/* Unión de ficheros */


filename f pipe "find &dir_entrada -type f "; 
data ficheros (keep = nom_fich_lec patron) ;
     length var $256;
     infile f length=reclen ;
     input var $varying256. reclen ;
nom_fich_lec = scan(var,-1,'/');
patron = compress("%"||&fecha_proc.||"%");
run;

/* filtro por los del día */
data ficheros (keep = nom_fich_lec);
set ficheros;
where nom_fich_lec like patron;
run;

%macro lec_e002(nom_fich_lec, sec, nom_fich);

%put LOG: Leyendo fichero: &nom_fich_lec ,secuencia &sec;
/*
DATA WORK.lec_&sec.;
LENGTH
        cod_contrato       8
        importe            8
        producto         $3
        tipo_oper        $2
        fecha              $8.;

    INFILE "&dir_entrada./&nom_fich_lec"
        DLM=';' DSD ;
    INPUT
        F1               :$10.
        F2               :$10.
        cod_contrato     : BEST9.
        F4               :$10.
        F5               :$10.
        importe          : BEST8.
        F7               :$10.
        producto       
        tipo_oper       
        fecha            : $8.
        F11              :$10.
        F12              :$10.
        F13              : $10.
        F14              : $10. ;
if cod_contrato ne .;
RUN;
*/

/*
%if &sec = 1 %then %do;
data WORK.&nom_fich.;
set WORK.lec_&sec.;
run;
%end;
%else %do;
proc append base=WORK.&nom_fich. new=WORK.lec_&sec.;
run;
%end;
*/

%mend;


%macro esc_e002(nom_fich);

/* Escribimos fichero unión */

%put llamada escribir;

/*
data _null_;
file "&dir_entrada./&nom_fich._&fecha_proc..csv" dlm = ';';
set &nom_fich;
put  F1 F2 cod_contrato F4 F5 importe F7 producto tipo_oper fecha F11 F12 F13 F14 ;           
run; 
*/

%mend;


%macro unir_ficheros(nom_fich);;

data fich_&nom_fich;
set ficheros;
where upcase(substr(nom_fich_lec,1,%length(&nom_fich))) = %upcase("&nom_fich");
run;

/* Compruebo si hay más de 1 */
%let dsidf = %sysfunc (open(fich_&nom_fich));   
%let nobs = %sysfunc (attrn(&dsidf, NOBS));
%if &nobs > 1 %then %do;
%put LOG: Unimos los ficheros de &nom_fich.;
%do j = 1 %to &nobs;   
%let rc = %sysfunc (fetch(&dsidf));                                                                                                                                                                                                                                         
    %let nom_fich_lec = %sysfunc (getvarc(&dsidf,%sysfunc(varnum(&dsidf,nom_fich_lec))));
%put LOG: Leyendo fichero: &nom_fich_lec en tabla: &nom_fich;
%lec_e002(&nom_fich_lec, &j, &nom_fich);
%end;
/* sacar fichero */
%put LOG: Sacar fichero unión &nom_fich;
%esc_e002(&nom_fich);
%end;
%let rc = %sysfunc (close(&dsidf));
   
%mend;

%let fich_sibs_e002 = sibs_e002;

%unir_ficheros(&fich_sibs_e002);


/****** Pruebas ********/

/*
data ficheros;
length nom_fich_lec $50.;
nom_fich_lec =  "sibs_e002_20180130_1.csv";   output;
nom_fich_lec =  "sibs_r003_20180130.csv";   output;
nom_fich_lec =  "SIBS_E002_20180130_2.csv";   output;
nom_fich_lec =  "SIBS_test_20180130_4.csv";   output;
run;


%let nom_fich = sibs_e002;
*/


/* Cambio  resumen asientos contables */

/* Asientos E002 */

/* agregados a nivel: banco, pre_rei y producto. Añadir cuenta contable */

data sibs_e002_1;
set sibs_e002_1;
if cod_contrato ne . and fecha ne .;
run;


data sibs_respos_1;
set sibs_respos_1;
if cod_contrato ne . and fecha ne .;
run;

data sibs_e002_tot;
set sibs_e002_1
sibs_respos_1;
run;


proc sql;
create table ag_sibs_e002 as
(select pre_rei, producto, sum(importe) as importe
from sibs_e002_1
group by pre_rei, producto);
quit;


/* Cruce con tabla para añadir cuenta_contable */
proc sql;
create table tabsas.asientos_sibs_e002_&fecha_proc. as
select a.*, b.cuenta_contable, b.tipo from
ag_sibs_e002 a left join tabsas.sibs_cuenta_contable_e002 b
on (a.pre_rei = b.pre_rei and a.producto = b.producto );
quit;

title "Asientos SIBS E002 &fecha_proc";
proc print data=tabsas.asientos_sibs_e002_&fecha_proc.;
run;

proc sql;
create table ag_sibs_respos as
(select pre_rei, producto, sum(importe) as importe
from sibs_respos_1
group by pre_rei, producto);
quit;

/* Cruce con tabla para añadir cuenta_contable */
proc sql;
create table tabsas.asientos_sibs_respos_&fecha_proc. as
select a.*, b.cuenta_contable, b.tipo from
ag_sibs_respos a left join tabsas.sibs_cuenta_contable_e002 b
on (a.pre_rei = b.pre_rei and a.producto = b.producto );
quit;

proc print data=tabsas.asientos_sibs_respos_&fecha_proc.;
run;



/* Asientos R00 */

%macro asientos_contables_r003;

data sibs_r003_sepa_1;
set SIBS_R003_SEPA_1;
if cod_contrato ne . and fecha ne .;
run;

data sibs_r003_linelim_1;
set SIBS_R003_linelim_1;
if cod_contrato ne . and fecha ne .;
run;

data sibs_r003_tot;
set SIBS_R003_SEPA_1 SIBS_R003_linelim_1;
run;

proc sql;
create table ag_sibs_r003 as
(select pre_rei, producto, sum(importe) as importe
from sibs_r003_sepa_1
group by pre_rei, producto);
quit;

/* Cruce con tabla para añadir cuenta_contable */

proc sql;
create table tabsas.asientos_sibs_r003_&fecha_proc. as
select b.cuenta_contable, b.tipo, sum(a.importe) as importe from
ag_sibs_r003 a left join tabsas.sibs_cuenta_contable_r003 b
on (a.pre_rei = b.pre_rei and a.producto = b.producto )
group by b.cuenta_contable, b.tipo;
quit;

title "Asientos SIBS R003 &fecha_proc";
proc print data=tabsas.asientos_sibs_r003_&fecha_proc.;
run;

proc sql;
create table ag_sibs_r003_linelim as
(select pre_rei, producto, sum(importe) as importe
from sibs_r003_linelim_1
group by pre_rei, producto);
quit;

/* Cruce con tabla para añadir cuenta_contable */

proc sql;
create table tabsas.asientos_sibs_r003_line_&fecha_proc. as
select b.cuenta_contable, b.tipo, sum(a.importe) as importe from
ag_sibs_r003_linelim a left join tabsas.sibs_cuenta_contable_r003 b
on (a.pre_rei = b.pre_rei and a.producto = b.producto )
group by b.cuenta_contable, b.tipo;
quit;

proc print data=tabsas.asientos_sibs_r003_line_&fecha_proc.;
run;

%mend;

%asientos_contables_r003;

No hay comentarios:

Publicar un comentario