Files
jpegueroandClaude Sonnet 5 b6085d4140 Mueve ipdir (Productos Terminados) de PROYECTOS a PROYECTO
Instruccion de Johnny: todos los directorios de fuentes de inventario
deben migrarse de la carpeta temporal PROYECTOS a la carpeta real
PROYECTO, ya que PROYECTOS sera eliminada.

Se elimino tambien un archivo suelto sin relacion llamado "ipdir"
que existia en PROYECTO (del commit inicial) y bloqueaba el nombre
de la carpeta.

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

240 lines
9.6 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPPRCS004
OBJETIVO : Consulta Maestra de Productos con existencia y precios
PROGRAMADOR : Ing. Juan F. Soto
FECHA REALIZACION : Julio 18, 1996.
-------------------------------------------------------------------------------
}
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 ipprcs004()
END MAIN
FUNCTION ipprcs004()
DEFINE transito,pcantidadconduce DEC(12,5),
chexistencia CHAR(2),
codigo,codigo1 VARCHAR(50),
progreso,noreg INT,
fecha_ordenada,fecha_recibida DATE
OPEN FORM ipfmcs004 FROM "ipfmcs004_1"
DISPLAY FORM ipfmcs004
CALL ui.Interface.LoadStyles("mbsStyle")
## Aqui se prepara el criterio de seleccion
DIALOG ATTRIBUTES(FIELD ORDER FORM, UNBUFFERED)
INPUT BY NAME datos_cons.fech_fi,inventario,chexistencia
BEFORE INPUT
LET datos_cons.fech_fi = TODAY USING "dd/mm/yyyy"
DISPLAY BY NAME datos_cons.fech_fi
AFTER INPUT
IF Inventario IS NULL THEN
CALL msg(16)
NEXT FIELD inventario
END IF
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
END INPUT
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp
FROM cod_n,cod_grupo, cod_tipo,cod_sec,descrip_esp
END CONSTRUCT
ON ACTION buscar
IF inventario = "PRODUCTOS TERMINADOS" THEN
LET SELEC =
"SELECT ' ', a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp, a.unidad_med, '0', '0','0',RTRIM(b.descripcion)+'('+RTRIM(k1.descripcion)+')', c.precio ",
"FROM vetb00061 AS b INNER JOIN ",
" vetb00025 AS c ON b.ventas = c.ventas AND c.tipo_cliente = 0 and c.sec_cliente = 0
inner join seg0009 k ON c.cod_lista =k.cod_lista and k.usuario = suser_sname()
inner join vetb00085 k1 ON k1.cod_lista = k.cod_lista
RIGHT OUTER JOIN ",
" iptb00002 AS a ON 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 ",
" WHERE (a.status_t IS NULL) AND ",criterio CLIPPED,
" ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec "
LET selec2=
"SELECT COUNT(*) ",
"FROM vetb00061 AS b INNER JOIN ",
" vetb00025 AS c ON b.ventas = c.ventas AND c.tipo_cliente = 0 and c.sec_cliente = 0
inner join seg0009 k ON c.cod_lista =k.cod_lista and k.usuario = suser_sname()
inner join vetb00085 k1 ON k1.cod_lista = k.cod_lista
RIGHT OUTER JOIN ",
" iptb00002 AS a ON 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 ",
" WHERE (a.status_t IS NULL) AND ",criterio CLIPPED
END IF
IF inventario = "MATERIA PRIMA" THEN
LET SELEC =
"SELECT ' ',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,'0','0',a.descrip_esp,",
" a.unidad_med,'0','0','0',a.descrip_ing ",
"FROM intb00001 a ",
"WHERE a.status_t is null AND ",criterio CLIPPED,
" ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
END IF
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
PREPARE cuenta FROM selec2
EXECUTE cuenta INTO noreg
## Busca los registros con la condicion dada y verifica si el producto terminado
## existe en el catalogo de bienes y servicios.
LET idx = 1
CALL prod11.clear()
LET codigo1 = 1
LET codigo = 2
LET progreso = 3
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
FOREACH accion INTO prod11[idx].*,descrip1
LET codigo = prod11[idx].cod_n1 USING "&&&&","-",
prod11[idx].cod_grupo1 USING "&&&&&","-",
prod11[idx].cod_tipo1 USING "&&&&&","-",
prod11[idx].cod_sec1 USING "&&&&&&&&&"
# Busca La Existencia del Producto
LET prod11[idx].existencia=NULL
IF inventario = "PRODUCTOS TERMINADOS" THEN
IF codigo <> codigo1 THEN
LET codigo1 = prod11[idx].cod_n1 USING "&&&&","-",
prod11[idx].cod_grupo1 USING "&&&&&","-",
prod11[idx].cod_tipo1 USING "&&&&&","-",
prod11[idx].cod_sec1 USING "&&&&&&&&&"
LET prod11[idx].estado=NULL
SELECT UNIQUE a.cod_sec FROM iptb00050 a
WHERE a.cod_n = prod11[idx].cod_n1 AND
a.cod_grupo = prod11[idx].cod_grupo1 AND
a.cod_tipo = prod11[idx].cod_tipo1 AND
a.cod_sec = prod11[idx].cod_sec1
IF STATUS <> NOTFOUND THEN
LET prod11[idx].estado = "information.png"
END IF
CALL disponibles(prod11[idx].cod_n1,prod11[idx].cod_grupo1,prod11[idx].cod_tipo1,prod11[idx].cod_sec1,datos_cons.fech_fi)
RETURNING prod11[idx].cantidad_ordenes,pcantidadConduce,prod11[idx].transito,prod11[idx].existencia,
prod11[idx].reservado,valorOrden
IF prod11[idx].existencia IS NULL THEN
LET prod11[idx].existencia = 0
END IF
LET prod11[idx].cantidad_ordenes = prod11[idx].cantidad_ordenes -
pcantidadConduce
IF prod11[idx].cantidad_ordenes IS NULL THEN
LET prod11[idx].cantidad_ordenes=0
END IF
IF prod11[idx].cantidad_ordenes >0 THEN
LET prod11[idx].pventas = prod11[idx].existencia - prod11[idx].cantidad_ordenes
ELSE
LET prod11[idx].pventas=prod11[idx].existencia
END IF
IF prod11[idx].reservado >0 THEN
LET prod11[idx].pventas = prod11[idx].pventas - prod11[idx].reservado
END IF
# MERCANCIA EN TRANSITO
CALL mercancia_transito(prod11[idx].cod_n1,prod11[idx].cod_grupo1,
prod11[idx].cod_tipo1,prod11[idx].cod_sec1,datos_cons.fech_fi,'02')
RETURNING transito,fecha_ordenada,fecha_recibida
LET prod11[idx].transito = transito
LET prod11[idx].fecha_llegada = fecha_recibida
LET prod11[idx].fecha_ordenada = fecha_ordenada
END IF
END IF
IF inventario = "MATERIA PRIMA" THEN
IF chexistencia = 'SI' THEN
SELECT SUM(a.cantidad_2) INTO prod11[idx].existencia FROM intb00006 a
WHERE (a.cod_n = prod11[idx].cod_n1 AND
a.cod_grupo=prod11[idx].cod_grupo1 AND
a.cod_tipo=prod11[idx].cod_tipo1 AND
a.cod_sec=prod11[idx].cod_sec1) AND
(a.fecha <= datos_cons.fech_fi) AND
a.status_t IS NULL
END IF
END IF
LET idx = idx + 1
LET progreso = (idx /noreg )*100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
END FOREACH
DISPLAY ARRAY prod11 TO consart.*
ON ACTION ordenDisponible
IF prod11[arr_curr()].cantidad_ordenes > 0 THEN
CALL busca_ordenes_reservadas(prod11[arr_curr()].cod_n1,prod11[arr_curr()].cod_grupo1,
prod11[arr_curr()].cod_tipo1,prod11[arr_curr()].cod_Sec1)
ELSE
CALL fgl_winmessage("INFO","PRODUCTO NO TIENE ORDENES COLOCADAS","INFO")
END IF
{ ON ACTION foto
LET idx = arr_curr()
CALL fotos(prod11[idx].cod_n1,prod11[idx].cod_grupo1,prod11[idx].cod_tipo1,
prod11[idx].cod_sec1,prod11[idx].descrip_esp1,usuarios,true)
SELECT UNIQUE a.cod_sec FROM iptb00050 a
WHERE a.cod_n = prod11[idx].cod_n1 AND
a.cod_grupo = prod11[idx].cod_grupo1 AND
a.cod_tipo = prod11[idx].cod_tipo1 AND
a.cod_sec = prod11[idx].cod_sec1
IF STATUS <> NOTFOUND THEN
LET prod11[idx].estado = "information.png"
END IF
DISPLAY prod11[idx].estado TO consart[scr_line()].estado
}
ON ACTION reservado
LET idx = arr_curr()
IF prod11[idx].reservado >0 THEN
CALL busca_reservas(prod11[idx].cod_n1,prod11[idx].cod_grupo1,prod11[idx].cod_tipo1,prod11[idx].cod_sec1)
ELSE
CALL fgl_winmessage("ERROR","PRODUCTO NO TIENE CANTIDAD RESERVADA","INFO")
END IF
ON ACTION bexistencia
LET idx = arr_curr()
CALL almacenes(prod11[idx].cod_n1,prod11[idx].cod_grupo1,prod11[idx].cod_tipo1,prod11[idx].cod_sec1)
ON ACTION btransito
CALL fechas_llegadas(prod11[idx].cod_n1,prod11[idx].cod_grupo1,prod11[idx].cod_tipo1,
prod11[idx].cod_sec1,datos_cons.fech_fi)
AFTER DISPLAY
DISPLAY 0 TO progreso
END DISPLAY
ON ACTION CANCEL
LET INT_FLAG =FALSE
EXIT PROGRAM
END DIALOG
END FUNCTION