Files
MBS/PROYECTO/cpdir/cpprrp017.4gl
T
Abel LópezandClaude Opus 5.5 3422acc241 cpprrp017 (Validacion de Facturas): exportacion a PDF/Excel y filtro que se cortaba
- La salida escribia un .txt en FGLSPOOL (no era PDF ni Excel); vuelve a
  configureOutput() con la ventana comun seleccionarsalida() (EXCEL / PDF /
  SCREEN), RIGHT MARGIN 142 y sin codigos de impresora matricial.
- BUG de la migracion: la consulta se armaba en selec CHAR(500); al cambiar
  rowid por ROW_NUMBER() el texto fijo paso a 463 caracteres y cualquier
  filtro de factura+suplidor o de fechas se cortaba (-4145). Ahora se arma
  en un STRING local.
Verificado contra la BD .250: factura 068-1AK05 de 22-770 (Debe = Haber =
1,253,019.91) y grupo 22 del 01/08/2026 al 15/08/2026 (4 facturas, total
3,834,979.72) cuadran con SQL; PDF y Excel generados. Build OK con gsmake.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:07:13 -04:00

282 lines
10 KiB
Plaintext

{
######################################################################
Programa : CPPRRP017
Proceso : Validacion Cuentas Afectadas en Facturacion
Sistema : Cuenta Por Pagar
Autor : Juan F. Soto (Copiado del programa cpprrp017)
Fecha : Enero 18, 1996.
#######################################################################
}
GLOBALS
"cpprgb000.4gl"
DEFINE selec1 CHAR(500)
DEFINE mvto RECORD
fecha_in DATE,
fecha_fi DATE,
cod_sp SMALLINT
END RECORD
DEFINE prt_mvto11 RECORD
factura CHAR(10),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sp CHAR(45),
fecha DATE,
valor_fac DECIMAL(12,2),
cuenta_no CHAR(11),
departamento SMALLINT,
cod_aux SMALLINT,
cod_sec SMALLINT,
refer CHAR(10),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
id INTEGER
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 cpprrp017()
END MAIN
FUNCTION cpprrp017()
-- La consulta se arma en STRING: con ROW_NUMBER() (en lugar de rowid) el texto
-- fijo ocupa 463 de los 500 caracteres de selec y el filtro se cortaba (-4145).
DEFINE l_selec STRING
CLEAR SCREEN
OPTIONS
FORM LINE 8
#WHENEVER ERROR CONTINUE
OPEN FORM cpfmrp017 FROM "cpfmrp017"
DISPLAY FORM cpfmrp017
DISPLAY "cpprrp017" AT 4,3 ATTRIBUTE(blue)
DISPLAY "Validacion de Facturas" AT 6,29
LET int_flag = FALSE
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CONSTRUCT BY NAME criterio ON c.fecha_orig,c.num_doc,c.cod_sp,c.cod_sp_sec
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET l_selec =
"SELECT a.factura,a.cod_sp,a.cod_sp_sec,b.nom_sp,a.fecha,c.valor, ",
" a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc, ",
" a.debito,a.credito, ",
-- a.rowid es una pseudo-columna de Informix, no existe en SQL Server;
-- se sustituye por un numero de fila equivalente para el orden del reporte.
" ROW_NUMBER() OVER (ORDER BY a.factura) ",
"FROM cptb00003 a,cotb00001 b,cptb00001 c ",
"WHERE (a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec) and ",
" (a.cod_sp = c.cod_sp AND a.cod_sp_sec = c.cod_sp_sec) and ",
" (a.factura = c.num_doc) AND (c.tipo_doc[1] = 'F') AND ",
" (a.status_t IS NULL) AND ",criterio clipped
DISPLAY "<< Buscando Informacion .... Espere Por Favor. >>" AT 19,14
ATTRIBUTE(REVERSE,BOLD)
PREPARE comando FROM l_selec
DECLARE movto CURSOR FOR comando
OPEN movto
CALL seleccionarsalida() RETURNING r_output
CALL configureoutput(r_output) RETURNING handler
START REPORT val_ctas TO XML HANDLER handler
DISPLAY "<< " AT 19,14
DISPLAY "<< Impresion En Proceso .... Espere Por Favor. >>" AT 19,14
ATTRIBUTE(REVERSE,BOLD)
WHILE STATUS != NOTFOUND
FETCH movto INTO prt_mvto11.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
OUTPUT TO REPORT val_ctas(prt_mvto11.*)
END WHILE
FINISH REPORT val_ctas
END FUNCTION
REPORT val_ctas(x)
DEFINE x RECORD
factura CHAR(10),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sp CHAR(45),
fecha DATE,
valor_fac DECIMAL(12,2),
cuenta_no CHAR(11),
departamento SMALLINT,
cod_aux SMALLINT,
cod_sec SMALLINT,
refer CHAR(10),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
id INTEGER
END RECORD
DEFINE reg_final RECORD
cuenta_no CHAR(8),
departamento SMALLINT,
cod_aux SMALLINT,
cod_sec SMALLINT,
num_doc CHAR(10),
debito DECIMAL(12,2),
credito DECIMAL(12,2)
END RECORD,
codigo_a CHAR(7)
DEFINE fecha1,fecha2 DATE
DEFINE nom_sup CHAR(45)
DEFINE sale CHAR(1)
DEFINE valor2,valor1,total_debito,total_credito,t_debito,t_credito,
total_supl1,total_supl2,total1 DECIMAL(12,2)
DEFINE comp_on CHAR(3),
comp_off CHAR(3),
doble_on CHAR(3),
doble_off CHAR(3),
negrillas_on CHAR(6),
negrillas_off CHAR(6),
hora CHAR(5)
OUTPUT
RIGHT MARGIN 142
LEFT MARGIN 0
TOP MARGIN 1
BOTTOM MARGIN 4
ORDER BY x.cod_sp_sec,x.factura,x.cuenta_no,x.id
FORMAT
PAGE HEADER
LET negrillas_on = NULL -- sin codigos de impresora (salida PDF/Excel)
LET negrillas_off = NULL -- sin codigos de impresora (salida PDF/Excel)
LET comp_on = NULL -- sin codigos de impresora (salida PDF/Excel)
LET comp_off = NULL -- sin codigos de impresora (salida PDF/Excel)
LET hora = time
LET lj = (82 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, comp_off,negrillas_on
PRINT COLUMN 1, "cpprrp017",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 75, "Pag. ", pageno using "###"
PRINT COLUMN 29, "SISTEMA CUENTA POR PAGAR",
COLUMN 75, today using "dd/mm/yy"
PRINT COLUMN 19,
"Validacion Cuentas Afectadas Por Facturacion",
COLUMN 77, hora
#PRINT COLUMN 28,"DEL ",mvto.fecha_in USING "dd/mm/yy",
# " AL ",mvto.fecha_fi USING "dd/mm/yy"
PRINT comp_on
PRINT COLUMN 1,
"----------------------------------------",
"----------------------------------------",
"----------------------------------------",
"----------------"
PRINT COLUMN 1, "Suplidor",
COLUMN 40, "Factura",
COLUMN 52, "Fecha",
COLUMN 62, "Valor Fact.",
COLUMN 75, "Cuenta",
COLUMN 85, "Dpto. ",
COLUMN 91, "Cta. Aux.",
COLUMN 99, "Refer.",
COLUMN 115, "Debe",
COLUMN 131, "Haber"
PRINT COLUMN 1,
"----------------------------------------",
"----------------------------------------",
"----------------------------------------",
"----------------"
PRINT negrillas_off
BEFORE GROUP OF x.cod_sp_sec
LET total_supl1 = 0
LET total_supl2 = 0
PRINT COLUMN 1, x.cod_sp USING "&&","-",
x.cod_sp_sec USING "&&&&"," ",
x.nom_sp CLIPPED;
BEFORE GROUP OF x.factura
LET total_debito = 0
LET total_credito = 0
PRINT COLUMN 40, x.factura CLIPPED,
COLUMN 52, x.fecha USING "dd/mm/yy",
COLUMN 62, x.valor_fac USING "#,###,###.##";
ON EVERY ROW
IF x.debito IS NULL THEN
LET x.debito = 0
END IF
IF x.credito IS NULL THEN
LET x.credito = 0
END IF
LET total_debito = total_debito + x.debito
LET total_credito = total_credito + x.credito
LET total_supl1 = total_supl1 + x.debito
LET total_supl2 = total_supl2 + x.credito
IF x.cod_aux IS NOT NULL THEN
LET codigo_a = x.cod_aux USING "##","-",x.cod_sec USING "####"
ELSE
LET codigo_a = null
END IF
PRINT COLUMN 75, x.cuenta_no CLIPPED,
COLUMN 85, x.departamento USING "####",
COLUMN 91, codigo_a CLIPPED,
COLUMN 99, x.refer CLIPPED,
COLUMN 111, x.debito USING "###,###,###.##",
COLUMN 126, x.credito USING "###,###,###.##"
AFTER GROUP OF x.factura
PRINT COLUMN 111, "--------------",
COLUMN 126, "--------------"
PRINT COLUMN 111, GROUP SUM(x.debito) USING "###,###,###.##",
COLUMN 126, GROUP SUM(x.credito) USING "###,###,###.##"
SKIP 1 LINE
IF total1 IS NULL THEN
LET total1 = 0
END IF
LET total1 = total1 + x.valor_fac
AFTER GROUP OF x.cod_sp_sec
PRINT COLUMN 111, "--------------",
COLUMN 126, "--------------"
PRINT COLUMN 111, GROUP SUM(x.debito) USING "###,###,###.##",
COLUMN 126, GROUP SUM(x.credito) USING "###,###,###.##"
PRINT COLUMN 111, "==============",
COLUMN 126, "=============="
SKIP 2 LINE
ON LAST ROW
PRINT COLUMN 111, "--------------",
COLUMN 126, "--------------"
PRINT COLUMN 111, SUM(x.debito) USING "###,###,###.##",
COLUMN 126, SUM(x.credito) USING "###,###,###.##"
PRINT COLUMN 111, "==============",
COLUMN 126, "=============="
END REPORT