{================================================================= PRGRAMA : NOPRRP042 OBJETIVO :GENERA FILE PARA EL BANCO POPULAR RETIRO COMERCIAL MODIFICADO POR : ING. JUAN SOTO FECHA MOD. :8/5/2020 ================================================================= } IMPORT util GLOBALS "noprgb000.4gl" DEFINE cmd2,dcmd2,d_tipos,mensaje,f_tipos,dir_file,nombreFile2 STRING, p_valor1 DEC(12,2), cuenta_empSbco INT DEFINE c_entraBco RECORD fecha DATE, num_nomi INTEGER, tipo_emp CHAR(1), tipoGenera CHAR(1) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprrp042() END MAIN FUNCTION noprrp042() DEFINE factor INT, pprogreso SMALLINT OPEN FORM nofmrp042 FROM "nofmrp042" DISPLAY FORM nofmrp042 CALL util.Math.srand() # INICIALIZA LA RUTINA PARA GENERAR NUMEROS ALEATORIOS INITIALIZE c_entra TO null #Captura de informacion para el reporte: banco,numero de nomina,cheque_no INPUT BY NAME c_entraBco.* AFTER FIELD tipoGenera LET fecha_inicial = "01/01/2007" SELECT tipo_emp,CAST(fecha_del AS CHAR(10)),CAST(fecha_al AS CHAR(10)) INTO datos_peri.* FROM notb00010 WHERE num_nomi = c_entraBco.num_nomi AND tipo_emp = c_entraBco.tipo_emp AND (status_t is NULL OR status_t = 'P') IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_nomi END IF DISPLAY BY NAME datos_peri.* ATTRIBUTE(BOLD) # PARA CONTAR LOS EMPLEADOS QUE TIENE LA NOMINA Y SACAR LOS QUE TIENEN VALOR CERO DELETE FROM notbcuenta DISPLAY "datos p ",datos_peri.fecha_a IF c_entraBco.tipoGenera = 'G' THEN INSERT INTO notbcuenta SELECT a.num_emp,b.cuenta_no,SUM(a.valor) FROM notb00008 a,adtb00003 b WHERE a.num_emp = b.num_emp AND a.num_nomi = c_entraBco.num_nomi AND a.tipo_emp = c_entrabco.tipo_emp AND a.fecha = datos_peri.fecha_a AND a.clase_mov not in ('F') AND a.cod_mov not in (100,101,102,98,50,54) AND b.genera_file_bco = "SI" GROUP BY a.num_emp,b.cuenta_no ELSE INSERT INTO notbcuenta SELECT a.num_emp,b.cuenta_no,SUM(a.valor) FROM notb00008 a,adtb00003 b WHERE a.num_emp = b.num_emp AND a.num_nomi = c_entraBco.num_nomi AND a.tipo_emp = c_entraBco.tipo_emp AND a.fecha = datos_peri.fecha_a AND a.clase_mov not in ('F') AND a.cod_mov not in (100,101,102,98,50,54) AND b.retiro_comercial = 'SI' GROUP BY a.num_emp,b.cuenta_no END IF LET cuenta_empSbco=0 SELECT ISNULL(COUNT(*),0) INTO cuenta_empSbco FROM notbcuenta WHERE valor > 0 IF cuenta_empSbco = 0 THEN LET cuenta_empSbco = 1 END IF LET cuenta_empSbco = cuenta_empSbco AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF c_entraBco.tipoGenera IS NULL THEN CALL msg(16) NEXT FIELD tipoGenera END IF EXIT INPUT END INPUT CONSTRUCT BY NAME criterio ON a.departamento,a.num_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET factor = cuenta_empSbco / 24 LET pprogreso = 1 LET progreso = 1 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET selec10 = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ", "a.nom1_emp,a.apell1_emp,a.nom2_emp,a.apell2_emp, ", "b.cod_mov,c.ch_encabeza,b.clase_mov,b.cantidad,b.valor, ", "a.cuenta_no,a.tipocuenta,a.codbancodestino,a.digiverbancodestino,a.cedula ", "FROM adtb00003 a,notb00008 b, notb00002 c,notbcuenta d ", "WHERE a.num_emp = b.num_emp and ", "b.num_nomi = ? and ", "b.tipo_emp = ? AND ", "b.cod_mov = c.cod_mov and ", criterio clipped," AND b.clase_mov not in ('F') ", " and a.num_emp = d.num_emp and d.valor > 0 and ", " a.genera_file_bco ='SI' ", "ORDER BY a.departamento,a.num_emp,b.cod_mov" PREPARE comando FROM selec10 DECLARE busca CURSOR FOR comando OPEN busca USING c_entraBco.num_nomi,c_entraBco.tipo_emp LET cmd2 = FGL_GETENV("FGLSPOOL"),"\\MTECH2.TXT" START REPORT nbanco to cmd2 DELETE FROM notb00050 WHERE fecha =TODAY WHILE STATUS != NOTFOUND FETCH busca INTO datos_cheque.* IF status = notfound THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET datos_cheque.nombre = datos_cheque.nom1_emp clipped," ", datos_cheque.nom2_emp clipped," ", datos_cheque.apell1_emp clipped," ", datos_cheque.apell2_emp clipped LET datos_cheque.acumulado = 0 IF datos_cheque.cod_mov = 12 THEN SELECT valor INTO p_valor1 FROM notb00008 WHERE (num_nomi = c_entraBco.num_nomi AND tipo_Emp = c_entraBco.tipo_emp AND num_emp = datos_cheque.num_emp and cod_mov = 110) LET datos_cheque.valor = datos_cheque.valor + p_valor1 END IF DISPLAY "datos ",datos_cheque.cedula," ",datos_cheque.nombre SELECT a.valor INTO datos_cheque.neto FROM notbcuenta a WHERE a.num_emp = datos_cheque.num_emp AND a.valor > 0 #------------------------------------------------------------------------- LET datos_cheque.numero = c_entra.num_nomi IF datos_cheque.neto > 0 THEN OUTPUT TO REPORT nbanco(datos_cheque.*) IF pprogreso >= factor THEN LET pprogreso = 1 LET progreso = progreso + 1 IF progreso > 95 THEN LET progreso = 95 END IF DISPLAY progreso TO progreso CALL ui.Interface.refresh() END IF END IF LET pprogreso = pprogreso + 1 LET siguie = "N" END WHILE FINISH REPORT nbanco LET d_tipos="TXT" LET f_tipos="*.txt" LET mensaje=%"Elige Directorio" # CALL ui.Interface.frontCall("standard","getenv", ["BANCO"], [dcmd] ) CALL ui.Interface.frontCall("standard","opendir", [dir_file,mensaje], [dcmd2] ) LET nombreFile2 ='RetMarmo.txt' LET dcmd2 = dcmd2 CLIPPED,"\\",nombreFile2 CLIPPED CALL fgl_putfile(cmd2,dcmd2) END FUNCTION REPORT nbanco(x) DEFINE x RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp CHAR(35), apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, cuenta_no CHAR(20), tipocuenta VARCHAR(1), codbancodestino VARCHAR(8), digiverbancodestino VARCHAR(1), cedula VARCHAR(11), nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD, hora VARCHAR(5), envia_datos RECORD dtipreg VARCHAR(1), dpcta VARCHAR(12), dref VARCHAR(10), did CHAR(16), ddoc VARCHAR(15), dmon VARCHAR(15), dname CHAR(20), dlname CHAR(20) END RECORD DEFINE ch_valor,ch_neto CHAR(16), ch_valor1 CHAR(16), b base.StringBuffer, ch_cedula VARCHAR(11) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 RIGHT MARGIN 0 BOTTOM MARGIN 0 PAGE LENGTH cuenta_empSbco ORDER BY x.numero FORMAT BEFORE GROUP OF x.numero LET hora = TIME LET ch_valor1 = p_valor USING "&&&&&&&&&&&&.##" LET ch_valor = ch_valor1[1,12],ch_valor1[14,15] LET ch_valor1 = NULL AFTER GROUP OF x.num_emp LET envia_datos.dtipreg = 'D' LET envia_datos.dpcta ='000054127731' LET ch_cedula = x.cedula USING "&&&&&&&&&&&" LET envia_datos.dref = util.Math.rand(150000) USING "&&&&&&&&&&" LET envia_datos.did =x.cedula LET envia_datos.ddoc = x.num_emp USING "&&&&&&&&&&&&&&&" LET ch_neto = NULL LET ch_valor1 = x.neto USING "&&&&&&&&&&&&&.&&" LET ch_neto = ch_valor1[1,13],ch_valor1[15,16] LET envia_datos.dmon = ch_neto LET envia_datos.dname = x.nom1_emp LET envia_datos.dlname = x.apell1_emp PRINT envia_datos.* # ADICIONA REGISTROS A LA TABLA DE LA GENERACION INSERT INTO notb00050 (cedula,num_emp,fecha,codigo,fecha_generacion,num_nomi,tipo_emp) VALUES (envia_datos.did,envia_datos.ddoc,getdate(),envia_datos.dref,c_entraBco.fecha, c_entraBco.num_nomi,c_entrabco.tipo_emp) UPDATE adtb00003 SET codigo_retiro_bco =envia_datos.dref, fecha_valido_retiro=getdate(), monto_retiro = x.neto WHERE num_emp = x.num_emp END REPORT