Files
MBS/PROYECTO/ipdir/ipprcs002.4gl
T
jpegueroandClaude Sonnet 5 d4eb103454 Registrar y corregir ipprcs002 (Consulta Maestra de Productos)
- Registrar formulario ipfmcs002.per (faltaba)
- Extraer la funcion pantalla() de ipmn00000.4gl (programa de menu con su
  propio MAIN) a un archivo compartido nuevo (otrodir/pantalla_ip.4gl)
  para poder reutilizarla sin conflicto de MAIN duplicado
- Bug corregido: el programa nunca tenia CONNECT TO, dependia de heredar
  una conexion de otro programa que nunca lo invoca en este contexto de
  prueba - se agrego ARG_VAL + CONNECT TO "smarmotech" como en el resto
  de los programas
- Bug corregido: el arreglo global "prod" (usado solo por este programa)
  era de tamaño fijo ARRAY[200], causaba error -1326 con mas de 200
  resultados - convertido a DYNAMIC ARRAY, y se agrego prod.clear() antes
  de repoblarlo
- Agregado titulo a la ventana (usaba "screen size" clasico sin TITLE)

Pendiente de decision de Johnny: la pantalla no exige ningun filtro de
busqueda y hace una consulta SQL adicional por cada producto encontrado
(calculo de existencia) - sin filtro intenta traer todo el catalogo y
tarda mas de una hora antes de fallar. Se probo exitosamente usando
siempre un codigo de producto completo (clase-grupo-tipo-secuencia).

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

102 lines
2.9 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPPRCS002
OBJETIVO : Consulta Maestra de Productos
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : Febrero 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
-------------------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL ipprcs002()
END MAIN
FUNCTION ipprcs002()
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 7,
ERROR LINE 24,
COMMENT LINE 23
OPEN FORM ipfmcs002 FROM "ipfmcs002"
DISPLAY FORM ipfmcs002
CALL PANTALLA()
DISPLAY "ipprcs002" AT 4,3
DISPLAY "Catalogo Productos " AT 6,28
DISPLAY "<Esc> Continua Consultando" AT 2,2 ATTRIBUTE (BLUE,REVERSE)
DISPLAY "<Delete> Cancela Operacion" AT 2,56 ATTRIBUTE (BLUE,REVERSE)
## Aqui se prepara el criterio de seleccion
LABEL volver:
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
FROM 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
LET SELEC =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med, ",
" a.bodega,a.cod_grupo,a.cod_cia,a.exist_max,a.exist_min, ",
" a.dia_llegada,a.descrip_ing ",
"FROM iptb00002 a ",
"WHERE a.status_t is null AND ",criterio CLIPPED," ORDER BY 1,2,3,4 "
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
## Busca los registros con la condicion dada y verifica si el producto terminado
## existe en el catalogo de bienes y servicios.
CALL prod.clear()
LET idx = 1
FOREACH accion INTO prod[idx].*,descrip1
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET prod[idx].existencia = 0
SELECT SUM(a.cantidad_2) INTO prod[idx].existencia FROM iptb00006 a
WHERE a.cod_n = prod[idx].cod_n1 AND a.cod_grupo=prod[idx].cod_grupo1 AND
a.cod_tipo=prod[idx].cod_tipo1 AND a.cod_sec=prod[idx].cod_sec1 AND
a.status_t IS NULL
IF prod[idx].existencia IS NULL THEN
LET prod[idx].existencia = 0
END IF
LET prod[idx].descrip_esp1 = prod[idx].descrip_esp1 CLIPPED
LET idx = idx + 1
END FOREACH
CALL set_count (idx-1)
DISPLAY ARRAY prod TO consart.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
ELSE
CLEAR FORM
GOTO volver
END IF
END FUNCTION