Files
DECOMARMOL/PROYECTO/cpdir/cpprrp018.4gl
T
2026-09-22 20:38:51 -04:00

262 lines
8.5 KiB
Plaintext

CONSTANT file = "dgi606"
CONSTANT prog = "EXCEL"
DEFINE usuarios,clave,rnc VARCHAR(50),
idioma_office,fila_office varchar(1),
fecha1,fecha2 date,
pcod_sp,NUMERO_C,kmes,kano SMALLINT,
periodo char(6)
DEFINE res INTEGER,
dir_file VARCHAR(60),
d_tipos,mensaje,f_tipos,filepath,p_res STRING
MAIN
-- Excel must be open beforehand
DEFINE val, rval,col,fila STRING
DEFINE fecha1,fecha2 date,
pcodsp,pcodspsec INT,
periodo CHAR(6),
pnumdoc,xcuenta_no CHAR(10),
kmes,kano,numero_c,pcod_sp,xcodigo_isr,pcodigofiscal,pcel,prow SMALLINT,
facturado,pitbis,pvalor,retencion,itbisretenido,xvalor DEC(12,2),
prnc CHAR(11),
pdescripcion CHAR(30),
strfiscal,xtipo_cuenta,xselectivo_consumo CHAR(40),
pncf CHAR(19),
pfecha DATE,
periodo1 CHAR(6),
idioma_office CHAR(20),
total_facturado DEC(12,2)
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "decomarmol" user usuarios USING clave
SELECT a.rnc INTO rnc FROM companias a
OPEN WINDOW w1 AT 1,1 WITH FORM "cpfmrp018"
INPUT BY NAME fecha1,fecha2,idioma_office,pcod_sp
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] )
{ CALL fgl_winmessage("INFO",dir_file,"INFO")
CALL fgl_winmessage("INFO",f_tipos,"INFO")
CALL fgl_winmessage("INFO",mensaje,"INFO")
CALL fgl_winmessage("INFO",filepath,"INFO")}
AFTER INPUT
IF INT_FLAG THEN
LET INT_FLAG = FALSE
RETURN
END IF
SELECT COUNT(*) INTO numero_c FROM cptb00004 a,cptb00001 b
WHERE (a.cod_sp = b.cod_sp) AND
(a.cod_sp = pcod_sp) AND
(a.cod_sp_Sec = b.cod_sp_sec AND a.ncf=a.ncf AND a.num_doc = a.num_doc) AND
(a.num_doc = b.num_doc) AND b.tipo_doc <> 'CK' AND
b.fecha_orig BETWEEN fecha1 AND fecha2 AND b.status_t IS NULL
IF idioma_office = 'I' THEN
LET fila_office = 'R'
ELSE
LET fila_office = 'F'
END IF
EXIT INPUT
END INPUT
CALL terminaDDE()
CALL conectarDDE()
LET val = rnc
LET fila = 4
LET col = 3
CALL enviaDDE(fila,col,val)
LET kmes = MONTH(fecha2)
LET kano = YEAR(fecha2)
LET periodo = kano USING "&&&&",kmes USING "&&"
LET col = 3
LET fila = 5
LET val = periodo
CALL enviaDDE(fila,col,val)
LET val = numero_c
LET col = 3
LET fila = 6
CALL enviaDDE(fila,col,val)
CALL fgl_winmessage("Hoja de Excel Formulario 606",
"Debe Ejecutar el boton INICIO en la hoja de excel","Info")
DECLARE busca_datos CURSOR FOR
SELECT TRIM(a.rnc),b.codigo_fiscal,c.descripcion,b.ncf,d.fecha_orig,AVG(b.monto_itbi),AVG(d.valor)-AVG(b.monto_itbi),
b.num_doc,a.cod_sp,a.cod_sp_sec,f.tipo_cuenta,f.selectivo_consumo,
SUM(g.debito+g.credito),x1.codigo_isr
FROM cotb00001 a,cptb00004 b,cgtb00074 c,cptb00001 d,cgtb00001 f
LEFT OUTER JOIN cgtb00077 x1 ON f.codigo_isr = x1.codigo_isr,
cptb00003 g
WHERE a.cod_sp = pcod_sp AND
a.cod_sp = b.cod_sp AND
a.cod_sp_Sec = b.cod_sp_sec AND
a.cod_sp = d.cod_sp AND
a.cod_sp_sec = d.cod_sp_sec AND
b.codigo_fiscal = c.codigo_fiscal AND
b.num_doc = d.num_doc AND d.tipo_doc = 'FT' AND
g.cuenta_no = f.cuenta_no AND (f.tipo_cuenta in ('BIENES','SERVICIOS') OR f.selectivo_consumo='SI') AND
g.cod_sp = d.cod_sp AND g.cod_sp_sec = d.cod_sp_sec AND
g.factura =d.num_doc AND
g.cod_sp = b.cod_sp AND g.cod_sp_sec = b.cod_sp_sec and
d.fecha_orig BETWEEN fecha1 AND fecha2 AND d.status_t IS NULL
GROUP BY a.rnc,b.codigo_fiscal,c.descripcion,b.ncf,d.fecha_orig,b.num_doc,
a.cod_sp,a.cod_sp_sec,f.tipo_cuenta,f.selectivo_consumo,x1.codigo_isr
ORDER BY a.rnc
LET prow = 12
FOREACH busca_datos INTO prnc,pcodigofiscal,pdescripcion,pncf,pfecha,pitbis,pvalor,
pnumdoc,pcodsp,pcodspsec,xtipo_cuenta,xselectivo_consumo,
xvalor,xcodigo_isr,xcuenta_no
LET val = prnc
LET col = 2
LET fila = prow USING "<<<"
CALL enviaDDE(fila,col,val)
LET strfiscal = pcodigofiscal USING "&&","-",pdescripcion CLIPPED
LET val = strfiscal
LET col = 4
CALL enviaDDE(fila,col,val)
LET val = pncf
LET col = 5
CALL enviaDDE(fila,col,val)
LET periodo1 = YEAR(pfecha) USING "&&&&",MONTH(pfecha) USING "&&"
LET val = periodo1
LET col = 7
CALL enviaDDE(fila,col,val)
LET val = DAY(pfecha)
LET col = 8
CALL enviaDDE(fila,col,val)
LET val = periodo1
LET col = 9
CALL enviaDDE(fila,col,val)
LET val = DAY(pfecha)
LET col = 10
CALL enviaDDE(fila,col,val)
LET col = 11
IF xtipo_cuenta = "SERVICIOS" THEN
LET val = xvalor
ELSE
LET val = 0
END IF
CALL enviaDDE(fila,col,val)
LET col = 12
IF xtipo_cuenta = "BIENES" THEN
LET val = xvalor
ELSE
LET val=0
END IF
CALL enviaDDE(fila,col,val)
IF pvalor IS NULL THEN
LET pvalor = 0
END IF
LET col = 13
LET val = pvalor
CALL enviaDDE(fila,col,val)
LET total_facturado = total_facturado + pvalor
LET col=14
LET val = pitbis
CALL enviaDDE(fila,col,val)
IF xcodigo_isr IS NOT NULL THEN
LET retencion = 0
SELECT SUM(a.credito) INTO retencion
FROM cptb00003 a
WHERE a.cod_sp = pcodsp AND
a.cod_sp_Sec = pcodspsec AND
a.factura = pnumdoc and
a.cuenta_no = xcuenta_no
LET itbisretenido = 0
SELECT SUM(a.credito) INTO itbisretenido
FROM cptb00003 a
WHERE a.cod_sp = pcodsp AND
a.cod_sp_Sec = pcodspsec AND
a.factura = pnumdoc and
a.cuenta_no = xcuenta_no
LET col = 15
LET val = itbisretenido
CALL enviaDDE(fila,col,val)
LET col = 16
LET val = retencion
CALL enviaDDE(fila,col,val)
LET col = 26
LET val = '07 - MIXTO'
CALL enviaDDE(fila,col,val)
END IF
LET prow = prow + 1
END FOREACH
CALL terminaDDE()
CLOSE WINDOW w1
END MAIN
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
FUNCTION conectarDDE()
CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [res] )
{ CALL fgl_winmessage("INFO",prog,"INFO")
CALL fgl_winmessage("INFO",file,"INFO")
CALL fgl_winmessage("INFO",res,"INFO")}
CALL checkError(res)
END FUNCTION
FUNCTION terminaDDE()
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
CALL checkError(res)
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