Programa de Subfile Usando Cursor de SQL
Programa de Subfile Usando Cursor de SQL
dcl-ds *N PSDS;
Pgm char(10) pos(1);
wstn char(10) pos(244);
user char(10) pos(254);
end-ds;
dcl-ds dsinf;
Curs0 zoned(2:0) pos(376);
Curs01 zoned(3:0) pos(380);
Fkey char(1) pos(369);
end-ds;
dcl-ds FDAT;
Fazo zoned(4:0) inz(0);
Fmes zoned(2:0) inz(0);
Fdia zoned(2:0) inz(0);
end-ds;
dcl-ds FECFIL;
@AZO char(4) inz('0000');
Gui1 char(1) inz('-');
@MES char(2) inz('00');
Gui2 char(1) inz('-');
@DIA char(2) inz('00');
end-ds;
dcl-ds Wdatos ;
FECHOR char(26) inz(*blanks);
TIPOES char(1) inz(*blanks);
CODPGM char(10) inz(*blanks);
CODUSU char(10) inz(*blanks);
BODY char(4000) inz(*blanks);
end-ds;
if user='ANDRES';
Azul=*off;
Blanco=*on;
else;
Azul=*on;
Blanco=*off;
endif;
Dow Salir=Apagado and Cancela=Apagado;
if llenar='S';
exsr LecturaInicial;
clear SITUA;
llenar='N';
endif;
write foot;
exfmt ctl;
Select;
When F5=encendido;
exfmt FILTRO;
EXEC SQL close RRN;
SITUA='0001-01-01-00.00.00.000000';
llenar='S';
When salir=Encendido or Cancela=Encendido;
EXEC SQL close RRN;
leave;
When RePag=Encendido;
exsr Regresar;
When AvPag=Encendido;
exsr Avanzar;
When AvPag=Apagado and RePag=Apagado and
FKey=Enter and RRN>*Zeros;
if SITUA>*blanks;
EXEC SQL close RRN;
llenar='S';
else ;
exsr LeeSubfile;
if salir=encendido;
leave;
Endif;
endif;
endSl;
enddo;
*inlr=Encendido;
begsr Display;
CtrlPag=*zeros;
rrn=*zeros;
%subArr(IndArr:61:01)=Encendido;
%subArr(IndArr:62:01)=Apagado;
write ctl;
%subArr(IndArr:61:02)=Apagado;
endsr;
begSr LecturaInicial;
exsr ScriptSQL;
exsr Display;
EXEC SQL prepare C1 from :V1;
EXEC SQL declare RRN Scroll Cursor For C1;
EXEC SQL open RRN using :SITUA;
EXEC SQL fetch From RRN InTo :Wdatos ;
dow SQLCode=*Zeros;
Reg=Reg+1;
exsr WriteSfl;
if rrn=Trrn;
leave;
endif;
EXEC SQL fetch next From RRN InTo :Wdatos ;
enddo;
if sqlcode<>*zeros;
SflEnd=Encendido;
endif;
endSr;
begsr Avanzar;
if (SQLCOD<>0 and Flag='A') or sflend;
SflStart=*on;
else;
Flag='A';
SflStart=*off;
exsr Display;
EXEC SQL fetch next From RRN InTo :Wdatos ;
dow SQLCode=*Zeros;
Reg=Reg+1;
exsr WriteSfl;
if rrn = Trrn;
leave;
endif;
Exec SQL Fetch next From RRN InTo :Wdatos ;
enddo;
if sqlcode<>*zeros;
SflEnd=Encendido;
Exec SQL Fetch prior From RRN InTo :Wdatos;
endif;
endif;
endSr;
begsr Regresar;
if sqlcod<>0 and Flag='R';
SflStart=encendido;
else;
Sflend=apagado;
Flag='R';
SflStart=*off;
if Reg>23;
tReg=RRN+23;
else;
tReg=RRN;
endif;
for Nreg=1 to TReg;
EXEC SQL fetch prior from RRN InTo :Wdatos ;
if sqlCod<>0;
leave;
else;
Reg=Reg-1;
endif;
endfor;
if sqlCod=0 or sqlCod=100;
exsr Avanzar;
endif;
endif;
endSr;
begsr WriteSfl;
SflEnd=Apagado;
rrn+=1;
SITUA2=FECHOR;
open WEBCAB;
chain CODPGM WEBCAB;
if %found(WEBCAB);
NOMTRN=MAPDES;
else;
NOMTRN='*Error';
endif;
close WEBCAB;
COD7=CODPGM;
FEC23=%subst(FECHOR:1:23);
if TIPOES='S';
Output=encendido;
ES='Salida ';
CERR=%subst(BODY:71:4);
DERR=%subst(BODY:75:37);
TIPOES='R';
else;
Output=apagado;
ES='Entrada';
CERR=*blanks;
DERR=*blanks;
endif;
write subf;
sfldsp=Encendido;
endSr;
begsr LeeSubfile;
Sflerr=Apagado;
readc subf;
dow not %eof;
Select;
When Sel='5';
Ver_Detalle(FECHOR:FPGM:FUSU:FDAT:TIPOES);
other;
Sflerr=Encendido;
Endsl;
clear sel;
if TIPOES='R';
Output=encendido;
else;
Output=apagado;
endif;
update subf;
readc subf;
enddo;
endSr;
begsr ScriptSQl;
clear Incluir;
if FPGM<>*blanks;
Incluir=' and LOGPGM='+@+%trim(FPGM)+@;
endif;
if FUSU<>*blanks;
Incluir=%trimr(Incluir)+' and LOGUSU='+@+%trim(FUSU)+@;
endif;
if FDAT<>'00000000';
@AZO=%editc(FAZO:'X');
@MES=%editc(FMES:'X');
@DIA=%editc(FDIA:'X');
Incluir=%trimr(Incluir)+
' and substr(char(LOGHOR),1,10)='+@+FECFIL+@;
else;
Incluir=%trimr(Incluir)+' and LOGHOR >= ? ';
endif;
clear V1;
V1='Select LOGHOR, LOGTIP, LOGPGM, LOGUSU, LOGDAT '+
'from WEBLOGPF a where LOGSEC=1 '+%trim(Incluir)+
' order by LOGHOR desc';
endSr;
**************************************************************************
*** SFLC01FM ***
**************************************************************************