Files
MBS/PROYECTO/ipdir/ipprrp005.4gl
T
jpegueroandClaude Sonnet 5 c795294090 Renombrar selectOutput() a selectOutputSimple() para evitar choque
otrodir/selectoutput_simple.4gl definia FUNCTION selectOutput(), mismo
nombre que otrodir/vesalidaimpresora.4gl (ya usado por Abel en
noprcs006, ipprrp002, ipprrp003, ipprrp039, ipprrp044). Al mezclar
ambos commits, cualquier programa que dependiera de FUNCIONESREPORT
mas la libreria de Abel rompia por simbolo duplicado.

Se renombra la funcion (y se actualizan sus 4 unicos llamados: ipprrp005,
ipprrp009, ipprrp035, ipprrp036) sin tocar vesalidaimpresora.4gl, para
no afectar los programas que Abel ya tiene funcionando con esa version.

Recompilados y verificados los 4 programas tras el cambio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:48:03 -04:00

329 lines
10 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPPRRP005
OBJETIVO : CATALOGO DE PRODUCTOS TERMINADOS CON SU COSTO STD.
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : Febrero 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
-------------------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
DEFINE l INTEGER
DEFINE precio DECIMAL(8,3)
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 ipprrp005()
END MAIN
FUNCTION ipprrp005()
DEFINE producto RECORD
ventas CHAR(1),
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 LIKE iptb00002.descrip_esp,
unidad_med LIKE iptb00002.unidad_med,
material DECIMAL(18,2),
labor DECIMAL(18,2),
gastos DECIMAL(18,2)
END RECORD,
codigo CHAR(4),
codigo_n smallint,
nombre_imp CHAR(11),
progreso, idx, cuenta INT ,
select_cuenta STRING
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM ipfmrp005 FROM "ipfmrp005"
DISPLAY FORM ipfmrp005
CALL ui.Window.getCurrent().setText("MAESTRA COSTO STANDARD")
#CALL pantalla()
DISPLAY "ipprrp005" AT 4,3
DISPLAY "Maestra Costos Std." AT 6,31
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME decide
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET nombre_ant = "E"
CONSTRUCT criterio ON a.cod_cia,b.ano,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
FROM cod_cia,ano, cod_n,cod_grupo,cod_tipo,cod_sec
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
{CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia}
IF decide = "A" THEN
LET SELEC =
"SELECT b.ventas,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp, ",
" a.unidad_med,MAX(b.material),MAX(b.labor),MAX(b.gastos) ",
"FROM iptb00002 a,iptb00004 b ",
"WHERE a.status_t IS NULL AND b.status_t IS NULL AND ",
criterio clipped," AND a.cod_n=b.cod_n AND a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec ",
" GROUP BY b.ventas, b.cod_n, b.cod_grupo, b.cod_tipo, b.cod_sec, a.descrip_esp, a.unidad_med
ORDER BY b.ventas, b.cod_n, b.cod_grupo, b.cod_tipo, b.cod_sec, a.descrip_esp;"
LET select_cuenta = "SELECT count(*) ",
"FROM iptb00002 a,iptb00004 b ",
"WHERE a.status_t IS NULL AND b.status_t IS NULL AND ",
criterio clipped," AND a.cod_n=b.cod_n AND a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec "
ELSE
LET SELEC =
"SELECT b.ventas,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp, ",
" a.unidad_med,MAX(b.material),MAX(b.labor),MAX(b.gastos) ",
"FROM iptb00002 a,iptb00004 b ",
"WHERE a.status_t IS NULL AND b.status_t IS NULL AND ",
criterio clipped," AND a.cod_n=b.cod_n AND a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec ",
" GROUP BY b.ventas, b.cod_n, b.cod_grupo, b.cod_tipo, b.cod_sec, a.descrip_esp, a.unidad_med
ORDER BY b.ventas, b.cod_n, b.cod_grupo, b.cod_tipo, b.cod_sec, a.descrip_esp;"
LET select_cuenta = "SELECT count(*) ",
"FROM iptb00002 a,iptb00004 b ",
"WHERE a.status_t IS NULL AND b.status_t IS NULL AND ",
criterio clipped," AND a.cod_n=b.cod_n AND a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec "
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE busca FROM selec
PREPARE busca_cta FROM select_cuenta
EXECUTE busca_cta INTO cuenta
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
DECLARE accion CURSOR FOR busca
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
LET r_filename ='ipprrp005.4rp'
LET preview = 1
CALL selectOutputSimple() RETURNING r_output
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_configurexlsxdevice(null,null,1,null,null,null,1)
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
#CALL configureOutput(r_output) RETURNING HANDLER
START REPORT maestra_st TO XML HANDLER HANDLER
LET idx = 1
FOREACH accion INTO producto.*
OUTPUT TO REPORT maestra_st(producto.*)
LET progreso = (idx /cuenta )*100
DISPLAY Progreso TO progreso
CALL ui.interface.refresh()
LET idx = idx + 1
END FOREACH
FINISH REPORT maestra_st
CLEAR SCREEN
END FUNCTION
REPORT maestra_st(x)
DEFINE x RECORD
ventas CHAR(1),
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 LIKE iptb00002.descrip_esp,
unidad_med LIKE iptb00002.unidad_med,
material DECIMAL(18,2),
labor DECIMAL(18,2),
gastos DECIMAL(18,2)
END RECORD
DEFINE nom CHAR(30)
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 hora CHAR(5),
prec_m,prec_l DECIMAL(12,2)
DEFINE producto VARCHAR(150)
DEFINE costo_std, total_producto, total_maestra DECIMAL(12,2)
DEFINE tipo_reporte VARCHAR (50)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
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 hora = time
LET l = (100 - LENGTH(p_companias.nombre CLIPPED))/2
{ PRINT COLUMN 1, doce,negrillas_on
PRINT COLUMN 1, "ipprrp005",
COLUMN l, p_companias.nombre CLIPPED,
COLUMN 93, "Pag.",pageno using "###"
PRINT COLUMN 34, "Sistema de Productos Terminados",
COLUMN 93, today using "dd/mm/yy"
PRINT COLUMN 37, "Maestra de Costos Standar",
COLUMN 96, hora
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------"
PRINT COLUMN 1, "Producto",
COLUMN 51, "Material",
COLUMN 67, "Labor",
COLUMN 78, "Gastos",
COLUMN 88, "Costo Std."
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------"
PRINT negrillas_off}
BEFORE GROUP OF x.ventas
IF x.ventas = "1" THEN
LET tipo_reporte = "PRECIO LOCAL"
ELSE
LET tipo_reporte = "PRECIO EXPORTACION"
END IF
PRINTX tipo_reporte
BEFORE GROUP OF x.cod_n
INITIALIZE p_iptb20.* TO NULL
SELECT a.* INTO p_iptb20.* FROM iptb00020 a
WHERE a.cod_n = x.cod_n
IF p_iptb20.producto IS NULL THEN
LET producto = "SIN DESCRIPCION"
END IF
{ PRINT negrillas_on
PRINT COLUMN 1, p_iptb20.producto CLIPPED,negrillas_off}
ON EVERY ROW
LET producto = x.cod_n CLIPPED ||"-" || x.cod_grupo CLIPPED ||"-"||
x.cod_tipo CLIPPED || "-"||x.cod_sec CLIPPED||
" "||x.descrip_esp CLIPPED||" "||x.unidad_med CLIPPED
IF p_iptb20.producto IS NULL THEN
LET producto = "SIN DESCRIPCION"
END IF
LET costo_std = x.material+x.labor+x.gastos
{ PRINT COLUMN 1,producto,
COLUMN 47, x.material USING "###,###.####",
COLUMN 60, x.labor USING "###,###.####",
COLUMN 73, x.gastos USING "###,###.####",
COLUMN 86, costo_std USING "###,###.####"}
PRINTX producto, x.material USING "###,###.####",x.labor USING "###,###.####",
x.gastos USING "###,###.####", costo_std USING "###,###.####"
{AFTER GROUP OF x.cod_n
PRINT negrillas_on
PRINT "Total Items Por Producto: ", GROUP COUNT(*) USING "<<<,<<<,<<<"
PRINT negrillas_off
ON LAST ROW
PRINT negrillas_on
PRINT "Total Items En Maestra: ", COUNT(*) USING "<<<,<<<,<<<"
PRINT negrillas_off
PRINT COLUMN 2, ASCII 27, ASCII 80 }
END REPORT
FUNCTION integridad()
DEFINE numero_msg INT,
bandera SMALLINT
IF sqlca.sqlcode < 0 THEN
LET numero_msg = sqlca.sqlcode
CALL msg(numero_msg)
DISPLAY numero_msg AT 23,70
LET bandera = 1
LET status = 0
SLEEP 2
RETURN
END IF
RETURN
END FUNCTION