Files
MBS/PROYECTO/nodir/noprmt026.4gl
T

434 lines
14 KiB
Plaintext

{
---------------------------------------------------------------------------
PROGRAMA : NOPRMT026
OBJETIVO : PROCESO PARA EL PAGO DE LA TESORERIA DE LA SEGURIDAD SOCIAL
PROGRAMADOR : Ing. JUAN SOTO
FECHA REALIZACION : MAYO 31, 2005
---------------------------------------------------------------------------
}
GLOBALS
CONSTANT prog = "EXCEL"
DEFINE rcol,arch_pc,prog STRING,
p_res,no_registro INT,cuenta,xi,progreso,col SMALLINT,
selec CHAR(1000),
ciarnc CHAR(11),
dir_file VARCHAR(60),
fila_office varchar(1),
d_tipos,mensaje,f_tipos,filepath,p_res,res,fila,val STRING
DEFINE usuarios,clave CHAR(80),
FILE,nombre_cia STRING
END GLOBALS
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL startlog("NORP26.txt")
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.rnc,a.nombre INTO ciarnc,nombre_cia FROM companias a
DISPLAY "NOMBRE ",nombre_cia
CALL pago_tss()
END MAIN
FUNCTION pago_tss()
DEFINE ptss RECORD
ficha INTEGER,
nom1 CHAR(30),
apell1 CHAR(30),
apell2 CHAR(30),
sexo VARCHAR,
tipo_documento VARCHAR(50),
cedula CHAR(11),
fecha_n DATE,
valor_tss DEC(12,2),
departamento INT,
valor_isr DEC(12,2)
END RECORD,
fecha_inicial,fecha_final DATE,
kano,kmes, cnt,numero_msg SMALLINT,
cels CHAR(40),
filename,sysos CHAR(200),
archivo1 CHAR(125),
periodo CHAR(6),
valor_boni,valor_vacaciones DEC(12,2),
idioma_office VARCHAR,
tipo_reporte VARCHAR(10)
OPTIONS
FORM LINE 9,
ERROR LINE 24
OPEN FORM nofmmt026 FROM "nofmmt026"
DISPLAY FORM nofmmt026
INPUT BY NAME kano,kmes,idioma_office,tipo_reporte
BEFORE INPUT
CALL terminaDDE()
ON ACTION abrir
CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] )
CALL ui.Interface.frontCall("standard","shellexec", [filepath], [p_res] )
AFTER FIELD kmes
LET selec =
"SELECT CONVERT(CHAR(10),MIN(a.fecha_del),103) ,CONVERT(CHAR(10),MAX(a.fecha_al),103) ",
" FROM notb00010 a ",
" WHERE a.ano ='", kano,"' AND a.mes ='", kmes, "'"
PREPARE busca_fecha FROM selec
EXECUTE busca_fecha INTO fecha_inicial,fecha_final
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF tipo_reporte IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_reporte
END IF
END INPUT
LET periodo = kmes USING "&&",kano USING "&&&&"
LET FILE = filepath
CALL conectarDDE()
IF idioma_office = "E" THEN
LET fila_office = "F"
ELSE
LET fila_office = "R"
END IF
# CALL ui.Interface.frontCall("standard","getenv", ["USTSS"], [file] )
#LET arch_pc='"',file,'"' -- le agrega las comillas por si hay blancos (solo se necesita para shellexec)
# LET arch_pc=FILE CLIPPED --PARA OFFICE 2010 en adelante no es necesario colocar las comillas.
# CALL ui.Interface.frontCall("standard","shellexec", [arch_pc], [p_res] )
# CALL chqDdeError(p_res,"shellexec "||arch_pc)
# CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [p_res] )
# CALL chqDdeError(p_res,"DDEConnect "||file)
# CALL ui.Interface.refresh()
# CALL fgl_winmessage("periodo",periodo,"stop")
LET no_registro=1
IF tipo_reporte = "NOR" THEN
LET col = 4
LET fila = 7
LET val = ciarnc
CALL enviaDDE(fila,col,val)
LET col = 4
LET fila = 8
LET val = periodo
CALL enviaDDE(fila,col,val)
LET cnt = 14
LET progreso = 5
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET selec =
" SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,convert(char(10),b.fech_nac,103),",
" SUM(a.valor),b.departamento ",
" FROM adtb00003 b, notb00008 a,notb00010 c,adtb00021 d ",
" WHERE b.num_emp = a.num_emp AND c.mes ='",kmes,"' AND ",
" c.ano ='",kano,"' AND b.num_emp = d.num_emp and ",
" a.num_nomi = c.num_nomi and ",#" b.num_emp = 3355 and ",
" a.tipo_emp = c.tipo_emp and ",
" a.cod_mov in (1,40,36,5,24,51,34,56) AND ",
" a.num_emp = d.num_emp AND ",
#" a.cod_mov in (32) AND ",
" convert(char(10), a.fecha,101) between '",fecha_inicial USING "mm/dd/yyyy",
"' and '",fecha_final using "mm/dd/yyyy","' and b.nomina = 'Q' ",
" GROUP BY a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.cedula,b.fech_nac,b.departamento,a.num_emp,b.tipo_documento ",
" ORDER BY b.departamento,a.num_emp "
ELSE
IF tipo_reporte = "BON1" THEN
LET col = 4
LET fila = 8
LET val = ciarnc
CALL enviaDDE(fila,col,val)
LET col = 4
LET fila = 9
LET val = periodo
CALL enviaDDE(fila,col,val)
LET progreso = 5
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET cnt = 15
LET selec =
" SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,convert(char(10),b.fech_nac,103),",
" SUM(a.valor),a.departamento ",
" FROM adtb00003 b, notb00008 a,notb00010 c,adtb00021 d ",
" WHERE b.num_emp = a.num_emp AND b.status_t is not null and c.mes ='",kmes,"' AND ",
" c.ano ='",kano,"' AND b.num_emp = d.num_emp and ",
" a.num_nomi = c.num_nomi and ",#" b.num_emp = 3355 and ",
" a.tipo_emp = c.tipo_emp and ",
#" a.cod_mov in (1,40,36,5,24,51,34) AND ",
" a.num_emp = d.num_emp AND ",
" a.cod_mov in (33) AND ",
" convert(char(10), a.fecha,101) between '",fecha_inicial USING "mm/dd/yyyy",
"' and '",fecha_final using "mm/dd/yyyy","' and b.nomina = 'Q' ",
" GROUP BY a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.cedula,b.fech_nac,a.departamento,a.num_emp,b.tipo_documento ",
" ORDER BY a.departamento,a.num_emp "
END IF
END IF
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
LET cuenta = 0
IF tipo_reporte = 'NOR' THEN
FOREACH busca INTO ptss.*
LET col = 2
LET fila = cnt
LET val = "001"
CALL enviaDDE(fila,col,val)
LET col = 3
LET fila = cnt
IF ptss.tipo_documento = 'CEDULA' THEN
LET val = "C"
ELSE
LET val = "P"
END IF
CALL enviaDDE(fila,col,val)
LET col = 4
LET fila = cnt
LET val = ptss.cedula
CALL enviaDDE(fila,col,val)
LET col = 5
LET fila = cnt
LET val = ptss.nom1
CALL enviaDDE(fila,col,val)
LET col = 6
LET fila = cnt
LET val = ptss.apell1
CALL enviaDDE(fila,col,val)
LET col = 7
LET fila = cnt
LET val = ptss.apell2
CALL enviaDDE(fila,col,val)
LET col = 8
LET fila = cnt
LET val = ptss.sexo
CALL enviaDDE(fila,col,val)
LET col = 9
LET fila = cnt
LET val = ptss.fecha_n
CALL enviaDDE(fila,col,val)
LET col = 10
LET fila = cnt
LET val = ptss.valor_tss
CALL enviaDDE(fila,col,val)
LET ptss.valor_isr = 0
SELECT ISNULL(SUM(a.valor),0) INTO ptss.valor_isr
FROM notb00008 a
WHERE a.num_emp = ptss.ficha AND
a.fecha BETWEEN fecha_inicial AND fecha_final AND
a.clase_mov IN ("E","I") and a.cod_mov not in (32,33)
LET col = 12
LET fila = cnt
LET val = ptss.valor_isr
CALL enviaDDE(fila,col,val)
# BONIFICACION
LET valor_boni = 0
SELECT ISNULL(SUM(a.valor),0) INTO valor_boni
FROM notb00008 a
WHERE a.num_emp = ptss.ficha AND
a.fecha BETWEEN fecha_inicial AND fecha_final AND
a.clase_mov IN ("E","I") and a.cod_mov in (33)
# VARIFICACION VACACIONES
LET valor_vacaciones = 0
SELECT ISNULL(SUM(a.valor),0) INTO valor_vacaciones
FROM notb00008 a
WHERE a.num_emp = ptss.ficha AND
a.fecha BETWEEN fecha_inicial AND fecha_final AND
a.clase_mov IN ("E","I") and a.cod_mov in (36)
IF valor_vacaciones =0 THEN
LET col = 13
LET fila = cnt
LET val = 'Normal'
CALL enviaDDE(fila,col,val)
ELSE
LET col = 13
LET fila = cnt
LET val = 'No laboró mes completo por razones varias'
CALL enviaDDE(fila,col,val)
END IF
LET col = 14
LET fila = cnt
LET val = valor_boni
CALL enviaDDE(fila,col,val)
LET col = 15
LET fila = cnt
LET val = ciarnc
CALL enviaDDE(fila,col,val)
#REGALIA PASCUAL
LET valor_boni = 0
SELECT SUM(a.valor) INTO valor_boni
FROM notb00008 a
WHERE a.num_emp = ptss.ficha AND
a.fecha BETWEEN fecha_inicial AND fecha_final AND
a.clase_mov IN ("E","I") and a.cod_mov in (32)
LET col = 18
LET fila = cnt
LET val = valor_boni
CALL enviaDDE(fila,col,val)
LET col = 21
LET fila = cnt
LET val = ptss.valor_tss USING "###,###.##"
CALL enviaDDE(fila,col,val)
LET cnt = cnt + 1
IF cuenta > 3 THEN
LET cuenta = 0
LET progreso =progreso + 1
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
END IF
DISPLAY BY NAME no_registro
LET cuenta = cuenta + 1
LET no_registro = no_registro+1
END FOREACH
ELSE
#BONI CANCELADOS
IF tipo_reporte = "BON1" THEN
FOREACH busca INTO ptss.*
LET col = 2
LET fila = cnt
LET val = "001"
CALL enviaDDE(fila,col,val)
LET col = 3
LET fila = cnt
LET val = ptss.cedula
CALL enviaDDE(fila,col,val)
LET col = 4
LET fila = cnt
LET val = ptss.nom1
CALL enviaDDE(fila,col,val)
LET col = 5
LET fila = cnt
LET val = ptss.apell1
CALL enviaDDE(fila,col,val)
LET col = 6
LET fila = cnt
LET val = ptss.apell2
CALL enviaDDE(fila,col,val)
LET col = 7
LET fila = cnt
LET val = ptss.sexo
CALL enviaDDE(fila,col,val)
LET col = 8
LET fila = cnt
LET val = ptss.fecha_n
CALL enviaDDE(fila,col,val)
LET col = 9
LET fila = cnt
LET val = ptss.valor_tss
CALL enviaDDE(fila,col,val)
LET cnt = cnt + 1
IF cuenta > 3 THEN
LET cuenta = 0
LET progreso =progreso + 1
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
END IF
DISPLAY BY NAME no_registro
LET cuenta = cuenta + 1
LET no_registro = no_registro+1
END FOREACH
END IF
END IF
CALL fgl_winmessage("INFO","REPROTE TERMINADO","INFO")
END FUNCTION
FUNCTION enviaDDE(xfila,xcol,xval)
DEFINE xfila,xcol,xval,xcelda STRING
DISPLAY "enviado ",xfila," c ",xcol," v ",xval
LET xcelda = fila_office CLIPPED,xfila CLIPPED,"C",xcol CLIPPED
DISPLAY "celda ",xcelda
LET xval=xval CLIPPED
CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,file,xcelda,xval], [res] );
CALL checkError(res)
END FUNCTION
FUNCTION terminaDDE()
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
CALL checkError(res)
END FUNCTION
FUNCTION conectarDDE()
CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [res] )
CALL checkError(res)
END FUNCTION
FUNCTION checkError(res)
DEFINE res INTEGER
DEFINE mess STRING
IF res THEN RETURN END IF
DISPLAY "DDE Error:"
CALL ui.Interface.frontCall("WINDDE","DDEError",[],[mess]);
DISPLAY mess
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
DISPLAY "Exit with DDE Error."
EXIT PROGRAM (-1)
END FUNCTION