Registra noprrp015 (Prestamos Cooperativa) con reporte moderno

Se agrega noprrp015 al proyecto usando nofmrp015.per.

A diferencia de noprrp009 (donde se opto por salida de archivo de
texto), aqui se reescribio REPORT prestamo de PRINT COLUMN clasico a
PRINTX, y se creo nodir/../bin/noprrp015.4rp (diseno Report Writer
2.0) para soportar pantalla/PDF/Excel, igual que noprrp002/003/039/
043/044. configureOutput() en msgrp000.4gl sigue siendo un stub NULL
(ver noprrp009), asi que se usa fgl_report_loadCurrentSettings +
fgl_report_selectDevice/selectPreview/commitCurrentSettings
directamente.

Se corrige tambien el mismo problema de signo oculto en los montos
(mascaras sin caracter de signo) que se encontro en noprrp009.

Probado con empleado especifico y con varios empleados del mismo
movimiento, verificado contra BD (valor, interes y balance).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Abel López
2026-10-01 17:02:41 -04:00
co-authored by Claude Sonnet 5
parent 8ac18135e5
commit 80bd203be6
3 changed files with 130 additions and 102 deletions
+76
View File
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="3140a" version="6.00">
<report:Settings RWPageWidth="letterwidth" RWPageLength="letterlength" RWLeftMargin="0.5inch" RWTopMargin="0.5inch" RWRightMargin="0.5inch" RWBottomMargin="0.5inch">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWDataLocation="../nodir/noprrp015.rdd" RWFglReportName="prestamo"/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="Page Root" width="max" length="max" alignment="near">
<LAYOUTNODE name="Page Header" width="max" length="min" port="anyPageHeader">
<MINIPAGE name="StripeLayouter3" width="min" length="min" layoutDirection="leftToRight">
<rtl:input-variable name="nombre_cia" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="Report Title" width="max-3cm" alignment="baseline" fontSize="20" floatingBehavior="enclosed" text="{{nombre_cia}}"/>
<PAGENOBOX name="PageNoBox" width="3cm" alignment="baseline" floatingBehavior="enclosed" textAlignment="right" text="Pagina no."/>
</MINIPAGE>
<MINIPAGE name="MiniPage" width="min" length="min" alignment="near" layoutDirection="leftToRight">
<WORDBOX name="WordBox2" width="12cm" fontBold="true" floatingBehavior="enclosed" text="Descuentos Cooperativa"/>
<rtl:input-variable name="hora" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="WordBoxHora" floatingBehavior="enclosed" text="{{hora}}"/>
</MINIPAGE>
<MINIPAGE name="MiniPage1" width="min" length="min" alignment="near" layoutDirection="leftToRight">
<rtl:input-variable name="x.num_nomi" type="FGLNumeric" expectedLocation="expectedAhead"/>
<rtl:input-variable name="fecha_al_ch" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="WordBoxNomina" width="10cm" fontBold="true" floatingBehavior="enclosed" text="{{&quot;Nomina No.: &quot;+x.num_nomi.format(&quot;&lt;&lt;&lt;&lt;&quot;)+&quot; Al: &quot;+fecha_al_ch}}"/>
<rtl:input-variable name="descr" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="WordBoxTipo" floatingBehavior="enclosed" text="{{descr}}"/>
</MINIPAGE>
<MINIPAGE name="MiniPage2" width="min" length="min" fontSize="10" fontBold="true" layoutDirection="leftToRight">
<WORDBOX name="WordBoxCod" width="3.5cm" alignment="baseline" floatingBehavior="enclosed" text="Codigo No." roundedCorners="true" borderWidth="1" borderStyle="solid"/>
<WORDBOX name="WordBoxNom" width="6cm" alignment="baseline" floatingBehavior="enclosed" text="Nombre" roundedCorners="true" borderWidth="1" borderStyle="solid"/>
<WORDBOX name="WordBoxVal" width="3cm" alignment="far" floatingBehavior="enclosed" textAlignment="right" text="Valor" roundedCorners="true" borderWidth="1" borderStyle="solid"/>
<WORDBOX name="WordBoxInt" width="2cm" alignment="far" floatingBehavior="enclosed" textAlignment="right" text="Interes" roundedCorners="true" borderWidth="1" borderStyle="solid"/>
<WORDBOX name="WordBoxBal" width="3cm" alignment="far" floatingBehavior="enclosed" textAlignment="right" text="Balance" roundedCorners="true" borderWidth="1" borderStyle="solid"/>
</MINIPAGE>
<MINIPAGE name="Separator" width="1" length="max" bgColor="#000000" layoutDirection="leftToRight"/>
</LAYOUTNODE>
<rtl:match name="FirstPageHeader" nameConstraint="FirstPageHeader" minOccurs="0" maxOccurs="1"/>
<rtl:match name="Group cod_mov" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="movimiento" width="min" length="max" layoutDirection="leftToRight">
<rtl:input-variable name="x.descrip_mov" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="x.descrip_mov Value" fontSize="11" fontBold="true" floatingBehavior="enclosed" text="{{x.descrip_mov}}"/>
</MINIPAGE>
<rtl:match name="Group num_emp" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="Table Row" class="grwTableRow" width="min" length="max" fontSize="9" layoutDirection="leftToRight">
<rtl:input-variable name="codigo_emp" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="codigo_emp Value" width="3.5cm" floatingBehavior="enclosed" text="{{codigo_emp}}"/>
<rtl:input-variable name="nombre_completo" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="nombre_completo Value" width="6cm" floatingBehavior="enclosed" text="{{nombre_completo}}"/>
<rtl:input-variable name="x.valor" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="x.valor Value" width="3cm" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{x.valor}}"/>
<rtl:input-variable name="interes" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="interes Value" width="2cm" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{interes}}"/>
<rtl:input-variable name="x.balance" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="x.balance Value" width="3cm" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{x.balance}}"/>
</MINIPAGE>
</rtl:match>
<MINIPAGE name="totalgrupo" width="min" length="max" layoutDirection="leftToRight" roundedCorners="true" borderWidth="1" borderStyle="outset">
<WORDBOX name="WordBoxTotal" width="9.5cm" fontBold="true" floatingBehavior="enclosed" text="TOTAL GENERAL"/>
<rtl:input-variable name="total1" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="total1 Value" width="3cm" anchorX="1" fontBold="true" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{total1}}"/>
<rtl:input-variable name="t_interes" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="t_interes Value" width="2cm" anchorX="1" fontBold="true" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{t_interes}}"/>
<rtl:input-variable name="total" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="total Value" width="3cm" anchorX="1" fontBold="true" floatingBehavior="enclosed" textAlignment="right" format="-,---,---,--&amp;.&amp;&amp;" value="{{total}}"/>
</MINIPAGE>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+6
View File
@@ -496,6 +496,7 @@
<File filePath="nodir/nofmrp008.4fd"/>
<File filePath="nodir/nofmrp043.4fd"/>
<File filePath="nodir/nofmrp009.per"/>
<File filePath="nodir/nofmrp015.per"/>
</Library>
<Library binaryName="FUNCIONES_NO" id="-306412216" label="FUNCIONES_NO">
<File filePath="nodir/noprgb000.4gl"/>
@@ -597,6 +598,11 @@
<Configuration commandLineArguments="alopez Lopez2023" id="-700000090" label="Configuration"/>
<File filePath="nodir/noprrp009.4gl"/>
</Application>
<Application binaryName="noprrp015" dependencies="-1026233879,-764824792,-306412216,-335228674,-1423229125" environment="dir:FGLSPOOL=$(ProjectDir)/spool" externalDependencies="libgre.42x" id="-700000091" label="noprrp015">
<Configuration commandLineArguments="alopez Lopez2023" id="-700000092" label="Configuration"/>
<File filePath="nodir/noprrp015.4gl"/>
<File filePath="bin/noprrp015.4rp"/>
</Application>
</Group>
<Group id="1667448785" label="PRODUCTOS TERMINADOS">
<Library binaryName="FORMULARIOS_IP" dependencies="-1026233879" id="-1826025351" label="FORMULARIOS_IP">
+48 -102
View File
@@ -157,9 +157,19 @@ FUNCTION noprrp015()
doce,normal,archivo,imprime
CALL seleccionarsalida() RETURNING r_output
CALL configureoutput(r_output) RETURNING handler
START REPORT prestamo TO XML HANDLER handler
LET r_filename = 'noprrp015.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN
CALL seleccionarsalida() RETURNING r_output
LET preview = 1
CALL fgl_report_selectDevice(r_output)
CALL fgl_report_selectPreview(preview)
LET handler = fgl_report_commitCurrentSettings()
END IF
IF handler IS NOT NULL THEN
START REPORT prestamo TO XML HANDLER handler
ELSE
EXIT PROGRAM
END IF
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
@@ -221,105 +231,47 @@ END FUNCTION
num_nomi LIKE notb00008.num_nomi,
fecha_al LIKE notb00010.fecha_al
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE t_interes,interes DECIMAL(8,2)
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(2)
DEFINE negrillas_off CHAR(2)
DEFINE comp_on CHAR(2)
DEFINE comp_off CHAR(2)
DEFINE doce CHAR(2)
DEFINE normal CHAR(2)
DEFINE hora CHAR(5)
DEFINE valor1,total,total1,balance DECIMAL(10,2)
DEFINE l smallint
DEFINE varia CHAR(30)
DEFINE total,total1 DECIMAL(10,2)
DEFINE codigo_emp VARCHAR(20)
DEFINE nombre_completo VARCHAR(80)
DEFINE fecha_al_ch VARCHAR(10)
DEFINE nombre_cia VARCHAR(100)
OUTPUT
ORDER BY x.cod_mov,x.num_emp
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
PAGE LENGTH 100
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
FIRST PAGE HEADER
LET hora = time
LET varia = x.descrip_mov
## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA-
LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, normal,negrillas_on
PRINT COLUMN 1, "noprrp015",
COLUMN l, p_companias.nombre CLIPPED,
COLUMN 73, "Pag. ",pageno using "###"
PRINT COLUMN 29, "Descuentos Cooperativa",
COLUMN 73, today using "dd/mm/yy"
LET l = (80 - LENGTH(varia CLIPPED))/2
PRINT COLUMN l, varia CLIPPED,
COLUMN 73, hora
SKIP 1 LINE
## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA
PRINT COLUMN 1, negrillas_on,
COLUMN 4, "Nomina No.: ",x.num_nomi using "<<<<",
" Al: ",x.fecha_al using "dd/mm/yy",
negrillas_off
LET fecha_al_ch = x.fecha_al USING "dd/mm/yy"
LET nombre_cia = p_companias.nombre CLIPPED
## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR
IF x.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF x.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
IF x.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF x.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
PRINT doce
PRINT COLUMN 1, negrillas_on,
COLUMN 4, descr,
COLUMN 15, negrillas_off
PRINT COLUMN 2, "---------------------------------------------------",
"-------------------------------------------"
PRINT COLUMN 4, "Codigo No.",
COLUMN 23, "Nombre",
COLUMN 53, "Valor",
COLUMN 61, "Interes",
COLUMN 74, "Balance"
PRINT COLUMN 2, "----------------------------------------------------",
"------------------------------------------"
PRINTX nombre_cia,hora,x.num_nomi,fecha_al_ch,descr
## SE INDICA EL SALTO DE PAGINA CUANDO SE IMPRIMEN TODOS LOS MOVIMIENTOS
BEFORE GROUP OF x.cod_mov
SKIP TO TOP OF PAGE
LET total1 = 0
LET total = 0
LET t_interes = 0
PRINTX x.descrip_mov
BEFORE GROUP OF x.num_emp
LET balance = 0
LET valor1 = 0
BEFORE GROUP OF x.num_emp
# Busca La cuota de la nomina aqui ya que en el SELECT principal se busca
# pero no es confiable
SELECT valor INTO x.valor FROM notb00008
SELECT valor INTO x.valor FROM notb00008
WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and
tipo_emp = x.tipo_emp and cod_mov = x.cod_mov
@@ -331,7 +283,7 @@ END FUNCTION
END IF
# BUSQUEDA DEL INTERES COBRADO EN LA NOMINA ESPECIFICADA
LET interes = 0
SELECT valor INTO interes FROM notb00008
SELECT valor INTO interes FROM notb00008
WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and
tipo_emp = x.tipo_emp and cod_mov = 110
@@ -353,27 +305,21 @@ END FUNCTION
END IF
LET total = total + x.balance
LET codigo_emp = x.num_emp USING "&&&&","-",
x.departamento USING "&&&&","-",
x.nivel_emp USING "&&","-",
x.cod_puesto USING "&&"
LET nombre_completo = x.nom1_emp CLIPPED," ",x.apell1_emp CLIPPED
## AQUI COMIENZA LA IMPRESION DEL DETALLE
IF x.valor != 0 OR x.balance > 0 THEN
PRINT COLUMN 4, x.num_emp using "&&&&","-",
x.departamento using "&&&&","-",
x.nivel_emp using "&&","-", x.cod_puesto using "&&",
" ",x.nom1_emp clipped," ",x.apell1_emp clipped,
COLUMN 52, x.valor using "##,###.##",
COLUMN 62, interes using "###.##",
COLUMN 69, x.balance using "#,###,###.##"
LET t_interes = t_interes + interes
IF x.valor != 0 OR x.balance > 0 THEN
LET t_interes = t_interes + interes
PRINTX codigo_emp,nombre_completo,x.valor,interes,x.balance
END IF
## AQUI SE IMPRIMEN LOS TOTALES GENERALES
AFTER GROUP OF x.cod_mov
SKIP 2 LINES
PRINT COLUMN 1, negrillas_on,
COLUMN 8, "TOTAL GENERAL",
COLUMN 51, total1 using "###,###.##",
COLUMN 62, t_interes using "###.##",
COLUMN 69, total using "#,###,###.##"
PRINT COLUMN 18, negrillas_off
AFTER GROUP OF x.cod_mov
PRINTX total1,t_interes,total
END REPORT