Files
MBS/PROYECTO/ipdir/ipprrp010.4gl
T
jpegueroandClaude Sonnet 5 d1b29437c9 Reescribir ipprrp010 (Operacion Movimientos Detallado): .4rp equivocado
El .4rp que traia el repo (y su copia en el backup viejo) era en
realidad el reporte de "activos" de otro programa (RWFglReportName y
todo el cuerpo no correspondian a REPORT detalle(x)) - por eso nunca
pudo generar nada, ni siquiera despues de arreglar el crash original
de configureOutput().

- Se convirtio el REPORT detalle(x) de PRINT COLUMN clasico a PRINTX
  (siguiendo el patron de ipprrp005, que si funciona), y se escribio un
  .4rp nuevo desde cero con las variables correctas.
- Se quito el subtotal por "Orden" que la migracion habia agregado sin
  incluirlo en el ORDER BY (nunca funciono bien, no existia en 3.20).
- Se agrego titulo a la ventana (usaba el generico "screen").

Pendiente: el acomodo visual de columnas del reporte sale apilado en
vertical en vez de en fila - los datos y subtotales son correctos, pero
falta pulir el layout en el Report Designer (consultado con Johnny).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 12:22:25 -04:00

293 lines
9.2 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPpRRP010
OBJETIVO : Detallado por Tipo de Movimiento
PROGRAMADOR : Ing. Juan Fco. Soto
FECHA REALIZACION : Abril 28, 1993
-------------------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL ipprrp010()
END MAIN
FUNCTION ipprrp010()
DEFINE ventas CHAR(1)
DEFINE select_ac CHAR(1000)
DEFINE idx_ac,idx_a,idx_c SMALLINT
DEFINE acumulado_ac RECORD
cod_mov LIKE iptb00005.cod_mov,
fecha DATE,
num_doc INTEGER,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
cantidad DECIMAL(12,5),
descrip_esp CHAR(50),
unidad_med CHAR(3),
orden INT,
proveedor VARCHAR(100)
END RECORD
DEFINE costos RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
mes CHAR(2),
material LIKE iptb00004.material,
labor LIKE iptb00004.labor,
gasto_ind LIKE iptb00004.gastos
END RECORD
DEFINE acumulado RECORD
cod_n LIKE iptb00002.cod_n,
cod_grupo LIKE iptb00002.cod_grupo,
cod_tipo LIKE iptb00002.cod_tipo,
cod_sec LIKE iptb00002.cod_sec,
descrip_esp char(50),
unidad_med LIKE iptb00002.unidad_med,
cod_mov LIKE iptb00006.cod_mov,
descrip_mov LIKE iptb00005.descrip_mov,
consumo DECIMAL(12,5),
costo DECIMAL(12,5),
num_doc LIKE iptb00006.num_doc,
fecha DATE,
orden int,
proveedor VARCHAR(100)
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ipfmrp010 FROM "ipfmrp010"
DISPLAY FORM ipfmrp010
CALL ui.Window.getCurrent().setText("Operaciones Por Movimientos Al Standard")
DISPLAY "ipprrp010" AT 4,3
DISPLAY "Operaciones Por Movimientos Al Standard" AT 6,22
INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi,ventas
ON KEY (F2)
RUN "copy pantalla.bat impresion.bat"
DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED)
AFTER FIELD fech_in
IF datos_cons.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER FIELD fech_fi
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CONSTRUCT criterio ON c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec
FROM cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec
ON KEY (F2)
RUN "copy pantalla.bat impresion.bat"
DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED)
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET select_ac =
"SELECT c.cod_mov,c.fecha,c.num_doc,c.cod_n,c.cod_grupo,c.cod_tipo, ",
" c.cod_sec, c.cantidad_2,a.descrip_esp,a.unidad_med,c.orden_compra,ISNULL(d.nom_sp,'') ",
"FROM iptb00006 c left outer join cotb00001 d ON d.cod_sp = c.cod_sp and d.cod_sp_sec = c.cod_sp_sec,iptb00002 a ",
"WHERE ",criterio clipped," and c.fecha between ? and ? and ",
" c.cod_n = a.cod_n and c.cod_grupo = a.cod_grupo and ",
" c.cod_tipo = a.cod_tipo and c.cod_sec = a.cod_sec and ",
" c.status_t is NULL AND c.cod_mov != 99 ",
"ORDER BY 3,4,5,6 "
DISPLAY "<< Estoy Buscando Documentos... Espere Por favor >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
DISPLAY " "
AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
LET r_filename = "ipprrp010.4rp"
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET r_output = "SVG"
LET preview = 1
CALL fgl_report_selectDevice(r_output)
CALL fgl_report_selectPreview(preview)
LET handler = fgl_report_commitCurrentSettings()
ELSE
EXIT PROGRAM
END IF
START REPORT detalle TO XML HANDLER handler
PREPARE busca_ant FROM select_ac
DECLARE actual SCROLL CURSOR FOR busca_ant
OPEN actual USING datos_cons.fech_in,datos_cons.fech_fi
LET idx_c = 1
LET idx_a = 1
LET idx_ac = 1
WHILE status != notfound
FETCH actual INTO acumulado_ac.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET acumulado.cod_mov = acumulado_ac.cod_mov
LET acumulado.cod_n = acumulado_ac.cod_n
LET acumulado.cod_grupo = acumulado_ac.cod_grupo
LET acumulado.cod_tipo = acumulado_ac.cod_tipo
LET acumulado.cod_sec = acumulado_ac.cod_sec
LET acumulado.num_doc = acumulado_ac.num_doc
LET acumulado.fecha = acumulado_ac.fecha
LET acumulado.consumo = acumulado_ac.cantidad
LET acumulado.descrip_esp = acumulado_ac.descrip_esp
LET acumulado.unidad_med = acumulado_ac.unidad_med
LET acumulado.orden = acumulado_ac.orden
LET acumulado.proveedor = acumulado_ac.proveedor
# Buscando Los Costos de Los Materiales
SELECT MAX(d.material),MAX(d.labor),MAX(d.gastos)
INTO costos.material,costos.labor,costos.gasto_ind
FROM iptb00004 d
WHERE d.mes_fin = 12 AND d.ventas= "1" AND
d.status_t is null AND d.ano = year(datos_cons.fech_fi) and
d.cod_n = acumulado.cod_n AND d.cod_grupo= acumulado.cod_grupo AND
d.cod_tipo = acumulado.cod_tipo AND d.cod_sec = acumulado.cod_sec
LET acumulado.costo = costos.material+costos.labor+costos.gasto_ind
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
OUTPUT TO REPORT detalle(acumulado.*)
END WHILE
FINISH REPORT detalle
# RUN imprime
END FUNCTION
REPORT detalle(x)
DEFINE x RECORD
cod_n LIKE iptb00002.cod_n,
cod_grupo LIKE iptb00002.cod_grupo,
cod_tipo LIKE iptb00002.cod_tipo,
cod_sec LIKE iptb00002.cod_sec,
descrip_esp char(50),
unidad_med LIKE iptb00002.unidad_med,
cod_mov LIKE iptb00006.cod_mov,
descrip_mov LIKE iptb00005.descrip_mov,
consumo DECIMAL(12,5),
costo DECIMAL(12,5),
num_doc LIKE iptb00006.num_doc,
fecha DATE,
orden INT,
proveedor VARCHAR(100)
END RECORD
DEFINE total_p,total_m,total_consumo_m DECIMAL(12,2)
DEFINE pcodigo CHAR(30)
DEFINE fecha_fmt CHAR(10)
ORDER BY x.cod_mov,x.num_doc
FORMAT
BEFORE GROUP OF x.cod_mov
LET total_m = 0
LET total_consumo_m = 0
SELECT descrip_mov INTO x.descrip_mov FROM iptb00005
WHERE cod_mov = x.cod_mov
PRINTX x.cod_mov, x.descrip_mov
ON EVERY ROW
LET total_p = x.costo * x.consumo
IF total_p IS NULL THEN
LET total_p = 0
END IF
LET total_m = total_m + total_p
LET total_consumo_m = total_consumo_m + x.consumo
LET pcodigo = x.cod_n USING "&&&&","-",x.cod_grupo USING "&&&&","-",
x.cod_tipo USING "&&&&&&&&","-",x.cod_sec USING "&&&&&&&&"
LET fecha_fmt = x.fecha USING "dd/mm/yyyy"
PRINTX pcodigo, x.descrip_esp, x.num_doc, x.orden, fecha_fmt, x.proveedor,
x.consumo, x.costo, total_p
AFTER GROUP OF x.cod_mov
PRINTX total_consumo_m, total_m
ON LAST ROW
END REPORT