314 lines
9.5 KiB
Plaintext
314 lines
9.5 KiB
Plaintext
{=================================================================
|
|
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
|
|
|
|
|
|
|