Files
MBS/PROYECTO/ipdir/IPPRRP048.4gl
T
jpegueroandClaude Sonnet 5.5 43f9d16e62 Corrige ipprrp048 (Transacciones de Inventario por Departamento)
- Registra ipfmrp048.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
  (resuelve msgrp000 y seleccionarSalida)
- busca_departamento() definida localmente (igual que ipprrp035/036/047)
- seleccionarsalida() -> selectOutputSimple()
- Rescata ipprrp048.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- Titulo de ventana corregido

Verificado: 01/08/2026 a hoy, movimiento 30, 4 paginas en pantalla y PDF.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 12:51:54 -04:00

317 lines
11 KiB
Plaintext

{------------------------------------------------------------------------------
PROGRAMA : ipprrp048
OBJETIVO : Operacion por Tipo de Movimiento detallado (SIN COSTOS)
PROGRAMADOR : Ing. Juan Fco. Soto
FECHA REALIZACION : Febrero 1997
MODIFICADO POR : VALENTIN RODRIGUEZ
FECHA MODIFICACION : ABRIL 2019
-------------------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
--DEFINE departamento RECORD LIKE adtb00001.*
--GLOBALS "coprgb000.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 ipprrp048()
END MAIN
FUNCTION ipprrp048()
DEFINE select_ac STRING
DEFINE ano_act CHAR(4)
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER, -- TRUE/FALSE, to set preview option
criterio STRING
DEFINE acumulado_ac RECORD
departamento VARCHAR(40),
cod_mov LIKE iptb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
factor_conv DECIMAL(12,5),
factor_ad DECIMAL(12,5),
consumo FLOAT
END RECORD
DEFINE acumulado RECORD
cod_cia LIKE iptb00002.cod_cia,
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),
descrip_ing LIKE iptb00002.descrip_ing,
unidad_med LIKE iptb00002.unidad_med,
cod_mov LIKE iptb00006.cod_mov,
descrip_mov LIKE iptb00005.descrip_mov,
consumo DECIMAL(12,5),
factor_conv DECIMAL(12,5),
factor_ad DECIMAL(12,5),
--material DECIMAL(12,5),
--labor DECIMAL(12,5),
--gastos DECIMAL(12,5),
descripcion_origen VARCHAR(30),
departamento VARCHAR(40),
mtsAdicionales DECIMAL(12,5)
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ipfmrp048 FROM "ipfmrp048"
DISPLAY FORM ipfmrp048
CALL ui.Window.getCurrent().setText("Transacciones de Inventario por Departamento")
DISPLAY "ipprrp048" AT 4,3
DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi
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 e.departamento, c.cod_mov,c.bodega, c.cod_n, c.cod_grupo, c.cod_tipo, c.cod_sec
FROM departamento,cod_mov,bodega,cod_n,cod_grupo,cod_tipo,cod_sec
BEFORE CONSTRUCT
CALL bodegas('1')
CALL busca_departamento()
CALL cmovimientos()
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
END CONSTRUCT
LET select_ac =
"SELECT isnull('('+cast(c.departamento as char(10))+')'+e.nom_dpto, 'NO DEPARTAMENTO'), c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, f.factor_conv,ISNULL(f.factor_ad,0), ",
"SUM(c.cantidad_2) ",
"FROM iptb00006 c ",
"left join adtb00001 e on c.departamento = e.departamento ",
"inner join iptb00001 f on c.cod_n = f.cod_n and c.cod_grupo = f.cod_grupo and c.cod_tipo = f.cod_tipo and c.cod_sec = f.cod_sec",
" WHERE ",criterio clipped," and c.fecha between ? and ? ",
" AND c.status_t is NULL ",
"GROUP BY c.departamento,e.nom_dpto, c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,f.factor_conv,f.factor_ad ",
# "HAVING SUM(c.cantidad_2) <> 0 ",
"ORDER BY c.cod_mov, e.nom_dpto,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec "
DISPLAY "<< Estoy Buscando Acumulado Del Periodo Dado >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
DISPLAY " "
AT 19,14
LET ano_act = year(datos_cons.fech_fi)
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
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 r_filename ="ipprrp048.4rp"
LET idx = 1
FOREACH actual INTO acumulado_ac.*
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL selectOutputSimple() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
LET idx = 2
START REPORT opera TO XML HANDLER HANDLER
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET acumulado.consumo = acumulado_ac.consumo
LET acumulado.factor_conv = acumulado_ac.factor_conv
LET acumulado.factor_ad = acumulado_ac.factor_ad
LET acumulado.cod_mov = acumulado_ac.cod_mov
LET acumulado.mtsAdicionales = acumulado.factor_ad * acumulado.consumo
# Busqueda del Material Con su descripcion y unidad de medida
LET acumulado.descrip_esp = null
LET acumulado.unidad_med = null
LET acumulado.cod_cia = NULL
SELECT a.cod_cia,a.descrip_esp,a.unidad_med,b.descripcion
INTO acumulado.cod_cia,acumulado.descrip_esp,acumulado.unidad_med,acumulado.descripcion_origen
FROM iptb00002 a,iptb00022 b
WHERE a.cod_n = acumulado_ac.cod_n AND
a.cod_grupo = acumulado_ac.cod_grupo AND
a.cod_tipo = acumulado_ac.cod_tipo AND
a.cod_Sec = acumulado_ac.cod_sec AND
a.cod_cia = b.cod_cia
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
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.departamento = acumulado_ac.departamento
OUTPUT TO REPORT opera(acumulado.*)
END FOREACH
IF idx > 1 THEN
FINISH REPORT opera
ELSE
CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO")
END IF
END FUNCTION
REPORT opera(x)
DEFINE x RECORD
cod_cia LIKE iptb00002.cod_cia,
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),
descrip_ing LIKE iptb00002.descrip_ing,
unidad_med LIKE iptb00002.unidad_med,
cod_mov LIKE iptb00006.cod_mov,
descrip_mov LIKE iptb00005.descrip_mov,
consumo DECIMAL(12,5),
factor_conv DECIMAL(12,5),
factor_ad DECIMAL(12,5),
descripcion_origen VARCHAR(30),
departamento VARCHAR(40),
mtsAdicionales DECIMAL(12,5)
END RECORD,
titulo_mov VARCHAR(50),
rango_fecha CHAR(50),
fecha_reporte CHAR(15),
producto,descripcion_bodega VARCHAR(150),
t_consumo, t_m_consumo, t_t_consumo,t_mtsAdicionales,
t_t_mtsAdicionales, t_m_mtsAdicionales DECIMAL (12,5)
FORMAT
BEFORE GROUP OF x.cod_mov
# LET descripcion_bodega = ui.ComboBox.forName('formonly.bodega').getTextOf()
SELECT descrip_mov INTO x.descrip_mov FROM iptb00005
WHERE cod_mov = x.cod_mov
LET titulo_mov = "Movimiento: ",x.cod_mov," ",x.descrip_mov CLIPPED
PRINTX titulo_mov
BEFORE GROUP OF x.departamento
PRINTX x.departamento
ON EVERY ROW
LET rango_fecha = "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
"Hasta ", datos_cons.fech_fi using "dd/mm/yyyy"
LET fecha_reporte = TODAY
LET producto = x.cod_n USING "&&&&&","-",x.cod_grupo USING "&&&&&","-",
x.cod_tipo USING "&&&&&","-",x.cod_sec USING "&&&&&"," ",
x.descrip_esp
PRINTX producto, x.consumo, p_companias.nombre,
rango_fecha, fecha_reporte, x.unidad_med, x.factor_conv,
x.factor_ad, x.mtsAdicionales,descripcion_bodega
AFTER GROUP OF x.departamento
LET t_consumo = GROUP SUM(x.consumo)
LET t_mtsAdicionales = GROUP SUM(x.mtsAdicionales)
PRINTX t_consumo,t_mtsAdicionales
AFTER GROUP OF x.cod_mov
LET t_m_consumo = GROUP SUM(x.consumo)
LET t_m_mtsAdicionales =GROUP SUM(x.mtsAdicionales)
PRINTX t_m_consumo,t_m_mtsAdicionales
ON LAST ROW
LET t_t_consumo = SUM(x.consumo)
LET t_t_mtsAdicionales = SUM(x.mtsAdicionales)
PRINTX t_t_consumo,t_t_mtsAdicionales
END REPORT
FUNCTION busca_departamento()
DEFINE
pdepartamento ui.combobox,
kdepartamento SMALLINT,
kdescripcion CHAR(30)
LET pdepartamento = ui.combobox.forname("formonly.departamento")
CALL pdepartamento.clear()
DECLARE pagar CURSOR FOR
SELECT departamento, nom_dpto
FROM adtb00001
WHERE status_t IS NULL
ORDER BY nom_dpto
FOREACH pagar INTO kdepartamento, kdescripcion
CALL pdepartamento.additem(kdepartamento, kdescripcion)
END FOREACH
END FUNCTION