Registra noprmt026 (Pago TSS) y migra la salida de DDE a CSV
- Registra nofmmt026.4fd y la aplicacion noprmt026 (con FGLSPOOL) en el subgrupo NOMINA. - GDC 6.00 ya no incluye el modulo WINDDE (error -6331): enviaDDE() guarda las celdas en memoria y escribeCSV() genera FGLSPOOL/noprmt026_<tipo>_ <periodo>.csv con las mismas filas/columnas de la plantilla TSS. - SQL: se quitan los CONVERT(...,103) sobre variables DATE (-1205), la comparacion de fechas como texto (101) y el date+int dentro del SQL (-206); rango con fecha_sig = fecha_final+1. FOREACH con THRU (10 cols). Verificado contra la BD .250: Normal 2026/7 = 636 filas / 33,933,711.43; Bonificacion cancelados 2026/4 = 229 filas / 1,596,887.98. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
fc5a23132d
commit
70c3131e9c
@@ -783,6 +783,7 @@
|
||||
<File filePath="nodir/nofmrp015.per"/>
|
||||
<File filePath="nodir/nofmrp045.per"/>
|
||||
<File filePath="nodir/nofmrp041.4fd"/>
|
||||
<File filePath="nodir/nofmmt026.4fd"/>
|
||||
</Library>
|
||||
<Library binaryName="FUNCIONES_NO" id="-306412216" label="FUNCIONES_NO">
|
||||
<File filePath="nodir/noprgb000.4gl"/>
|
||||
@@ -899,6 +900,10 @@
|
||||
<File filePath="nodir/noprrp041.4gl"/>
|
||||
<File filePath="bin/noprrp041.4rp"/>
|
||||
</Application>
|
||||
<Application binaryName="noprmt026" dependencies="-1026233879,-764824792,-306412216,-335228674" environment="dir:FGLSPOOL=$(ProjectDir)/spool" id="-700000097" label="noprmt026">
|
||||
<Configuration commandLineArguments="alopez Lopez2023" id="-700000098" label="Configuration"/>
|
||||
<File filePath="nodir/noprmt026.4gl"/>
|
||||
</Application>
|
||||
</Group>
|
||||
</Group>
|
||||
<Group id="-802694369" label="REPORTE ENTRADA">
|
||||
|
||||
@@ -20,7 +20,9 @@ DEFINE rcol,arch_pc,prog STRING,
|
||||
d_tipos,mensaje,f_tipos,filepath,p_res,res,fila,val STRING
|
||||
|
||||
DEFINE usuarios,clave CHAR(80),
|
||||
FILE,nombre_cia STRING
|
||||
FILE,nombre_cia STRING,
|
||||
celdas DICTIONARY OF STRING,
|
||||
maxfila,maxcol INTEGER
|
||||
|
||||
END GLOBALS
|
||||
MAIN
|
||||
@@ -49,7 +51,7 @@ DEFINE ptss RECORD
|
||||
departamento INT,
|
||||
valor_isr DEC(12,2)
|
||||
END RECORD,
|
||||
fecha_inicial,fecha_final DATE,
|
||||
fecha_inicial,fecha_final,fecha_sig DATE,
|
||||
kano,kmes, cnt,numero_msg SMALLINT,
|
||||
cels CHAR(40),
|
||||
filename,sysos CHAR(200),
|
||||
@@ -79,7 +81,7 @@ DEFINE ptss RECORD
|
||||
|
||||
AFTER FIELD kmes
|
||||
LET selec =
|
||||
"SELECT CONVERT(CHAR(10),MIN(a.fecha_del),103) ,CONVERT(CHAR(10),MAX(a.fecha_al),103) ",
|
||||
"SELECT MIN(a.fecha_del), MAX(a.fecha_al) ",
|
||||
" FROM notb00010 a ",
|
||||
" WHERE a.ano ='", kano,"' AND a.mes ='", kmes, "'"
|
||||
PREPARE busca_fecha FROM selec
|
||||
@@ -98,6 +100,8 @@ DEFINE ptss RECORD
|
||||
|
||||
END INPUT
|
||||
|
||||
LET fecha_sig = fecha_final + 1 -- el +1 no se puede hacer dentro del SQL (date + int)
|
||||
|
||||
|
||||
LET periodo = kmes USING "&&",kano USING "&&&&"
|
||||
LET FILE = filepath
|
||||
@@ -144,7 +148,7 @@ DEFINE ptss RECORD
|
||||
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),",
|
||||
" SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,b.fech_nac,",
|
||||
" 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 ",
|
||||
@@ -154,8 +158,8 @@ DEFINE ptss RECORD
|
||||
" 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' ",
|
||||
" a.fecha >= '",fecha_inicial USING "yyyymmdd",
|
||||
"' and a.fecha < '",(fecha_final + 1) using "yyyymmdd","' 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
|
||||
@@ -176,7 +180,7 @@ DEFINE ptss RECORD
|
||||
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),",
|
||||
" SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,b.fech_nac,",
|
||||
" 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 ",
|
||||
@@ -186,8 +190,8 @@ DEFINE ptss RECORD
|
||||
#" 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' ",
|
||||
" a.fecha >= '",fecha_inicial USING "yyyymmdd",
|
||||
"' and a.fecha < '",(fecha_final + 1) using "yyyymmdd","' 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
|
||||
@@ -197,7 +201,7 @@ DEFINE ptss RECORD
|
||||
|
||||
LET cuenta = 0
|
||||
IF tipo_reporte = 'NOR' THEN
|
||||
FOREACH busca INTO ptss.*
|
||||
FOREACH busca INTO ptss.ficha THRU ptss.departamento
|
||||
|
||||
LET col = 2
|
||||
LET fila = cnt
|
||||
@@ -240,7 +244,7 @@ DEFINE ptss RECORD
|
||||
|
||||
LET col = 9
|
||||
LET fila = cnt
|
||||
LET val = ptss.fecha_n
|
||||
LET val = ptss.fecha_n USING "dd/mm/yyyy"
|
||||
CALL enviaDDE(fila,col,val)
|
||||
|
||||
LET col = 10
|
||||
@@ -253,7 +257,7 @@ DEFINE ptss RECORD
|
||||
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.fecha >= fecha_inicial AND a.fecha < fecha_sig AND
|
||||
a.clase_mov IN ("E","I") and a.cod_mov not in (32,33)
|
||||
|
||||
LET col = 12
|
||||
@@ -267,7 +271,7 @@ DEFINE ptss RECORD
|
||||
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.fecha >= fecha_inicial AND a.fecha < fecha_sig AND
|
||||
a.clase_mov IN ("E","I") and a.cod_mov in (33)
|
||||
|
||||
# VARIFICACION VACACIONES
|
||||
@@ -275,7 +279,7 @@ DEFINE ptss RECORD
|
||||
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.fecha >= fecha_inicial AND a.fecha < fecha_sig AND
|
||||
a.clase_mov IN ("E","I") and a.cod_mov in (36)
|
||||
|
||||
IF valor_vacaciones =0 THEN
|
||||
@@ -305,7 +309,7 @@ DEFINE ptss RECORD
|
||||
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.fecha >= fecha_inicial AND a.fecha < fecha_sig AND
|
||||
a.clase_mov IN ("E","I") and a.cod_mov in (32)
|
||||
|
||||
|
||||
@@ -333,7 +337,7 @@ DEFINE ptss RECORD
|
||||
ELSE
|
||||
#BONI CANCELADOS
|
||||
IF tipo_reporte = "BON1" THEN
|
||||
FOREACH busca INTO ptss.*
|
||||
FOREACH busca INTO ptss.ficha THRU ptss.departamento
|
||||
|
||||
LET col = 2
|
||||
LET fila = cnt
|
||||
@@ -368,7 +372,7 @@ DEFINE ptss RECORD
|
||||
|
||||
LET col = 8
|
||||
LET fila = cnt
|
||||
LET val = ptss.fecha_n
|
||||
LET val = ptss.fecha_n USING "dd/mm/yyyy"
|
||||
CALL enviaDDE(fila,col,val)
|
||||
|
||||
LET col = 9
|
||||
@@ -392,32 +396,82 @@ DEFINE ptss RECORD
|
||||
END IF
|
||||
|
||||
|
||||
CALL fgl_winmessage("INFO","REPROTE TERMINADO","INFO")
|
||||
CALL escribeCSV(tipo_reporte,periodo) RETURNING mensaje
|
||||
CALL fgl_winmessage("INFO","REPORTE TERMINADO. ARCHIVO: "||mensaje,"INFO")
|
||||
END FUNCTION
|
||||
|
||||
-- Genero 6 (GDC 6.00) ya no incluye el modulo WINDDE: en lugar de llenar Excel
|
||||
-- celda por celda, cada "celda" se guarda en memoria y al final se escribe un
|
||||
-- CSV (separador ;) con las mismas filas y columnas de la plantilla de la TSS.
|
||||
FUNCTION celda_key(xf,xc)
|
||||
DEFINE xf,xc INTEGER
|
||||
DEFINE sf,sc STRING
|
||||
|
||||
LET sf = xf USING "<<<<<&"
|
||||
LET sc = xc USING "<<<<<&"
|
||||
RETURN sf || "," || sc
|
||||
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)
|
||||
DEFINE xfila,xcol INTEGER
|
||||
DEFINE xval STRING
|
||||
DEFINE k STRING
|
||||
|
||||
LET k = celda_key(xfila,xcol)
|
||||
LET celdas[k] = xval CLIPPED
|
||||
IF xfila > maxfila THEN LET maxfila = xfila END IF
|
||||
IF xcol > maxcol THEN LET maxcol = xcol END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION terminaDDE()
|
||||
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
|
||||
CALL checkError(res)
|
||||
|
||||
CALL celdas.clear()
|
||||
LET maxfila = 0
|
||||
LET maxcol = 0
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION conectarDDE()
|
||||
CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [res] )
|
||||
CALL checkError(res)
|
||||
CALL celdas.clear()
|
||||
LET maxfila = 0
|
||||
LET maxcol = 0
|
||||
END FUNCTION
|
||||
|
||||
-- Escribe las celdas acumuladas en FGLSPOOL/noprmt026_<tipo>_<periodo>.csv
|
||||
-- y devuelve la ruta del archivo.
|
||||
FUNCTION escribeCSV(xtipo,xperiodo)
|
||||
DEFINE xtipo,xperiodo STRING
|
||||
DEFINE ch base.Channel
|
||||
DEFINE ruta STRING
|
||||
DEFINE f,c INTEGER
|
||||
DEFINE lin base.StringBuffer
|
||||
DEFINE k,v STRING
|
||||
|
||||
LET ruta = FGL_GETENV("FGLSPOOL")
|
||||
IF ruta IS NULL OR ruta.getLength() = 0 THEN LET ruta = "." END IF
|
||||
LET ruta = ruta || "\\noprmt026_" || xtipo || "_" || xperiodo || ".csv"
|
||||
|
||||
LET ch = base.Channel.create()
|
||||
LET lin = base.StringBuffer.create()
|
||||
CALL ch.openFile(ruta,"w")
|
||||
FOR f = 1 TO maxfila
|
||||
CALL lin.clear()
|
||||
FOR c = 1 TO maxcol
|
||||
LET k = celda_key(f,c)
|
||||
IF celdas.contains(k) THEN
|
||||
LET v = celdas[k]
|
||||
IF v.getIndexOf(";",1) > 0 OR v.getIndexOf("\"",1) > 0 THEN
|
||||
LET v = "\"" || v.trim() || "\""
|
||||
END IF
|
||||
ELSE
|
||||
LET v = ""
|
||||
END IF
|
||||
IF c > 1 THEN CALL lin.append(";") END IF
|
||||
CALL lin.append(v)
|
||||
END FOR
|
||||
CALL ch.writeNoNL(lin.toString())
|
||||
CALL ch.writeNoNL("\r\n")
|
||||
END FOR
|
||||
CALL ch.close()
|
||||
RETURN ruta
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION checkError(res)
|
||||
|
||||
Reference in New Issue
Block a user