Files
MBS/PROYECTOS/ipdir - 21102021/ipprcs004.4gl
T

192 lines
7.4 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPPRCS004
OBJETIVO : Consulta Maestra de Productos con existencia
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
CALL ipprcs004()
END MAIN
FUNCTION ipprcs004()
DEFINE pcantidadConduce,pexistencia DEC(12,5),
codigo_act,codigo_ant VARCHAR(50)
OPEN FORM ipfmcs004 FROM "ipfmcs004"
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
BEFORE INPUT
LET datos_cons.fech_fi = TODAY
CALL prod1.clear()
DISPLAY BY NAME datos_cons.fech_fi
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
AFTER INPUT
END INPUT
CONSTRUCT criterio ON b.bodega,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp
FROM bodega,cod_n,cod_grupo, cod_tipo,cod_sec,descrip_esp
BEFORE CONSTRUCT
CALL prod1.clear()
CALL bodegas("1")
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,c.descripcion,SUM(b.cantidad_2), ",
" '0','0','0','0',c.cod_bodega ",
"FROM iptb00002 a,iptb00006 b,intb00009 c ",
"WHERE ",
" (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) and b.bodega = c.cod_bodega AND b.status_t is null and ",
" CONVERT(DATE,b.fecha,104) <= '",datos_cons.fech_fi USING "mm/dd/yyyy" ,"' and ",
" a.status_t is null AND ",criterio CLIPPED,
" GROUP BY c.cod_bodega,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,c.descripcion ",
" ORDER BY c.cod_bodega,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
END IF
IF inventario = "MATERIA PRIMA" THEN
LET SELEC =
"SELECT ' ',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,",
" a.unidad_med,c.descripcion,SUM(b.cantidad_2) ",
"FROM intb00001 a,intb00006 b,intb00009 c ",
"WHERE ",
" 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 and b.bodega = c.cod_bodega and ",
" CONVERT(CHAR(10), b.fecha,104) <= '",datos_cons.fech_fi USING "mm/dd/yyyy","' ",
" AND a.status_t is null AND ",criterio CLIPPED,
" GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,c.descripcion ",
" ORDER BY cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
END IF
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.
LET idx = 1
CALL prod1.clear()
LET codigo_ant = '0'
LET codigo_act = '0'
FOREACH accion INTO prod1[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET codigo_act = prod1[idx].cod_n1 USING "&&&&&",prod1[idx].cod_grupo1 USING "&&&&&",
prod1[idx].cod_tipo1 USING "&&&&&",prod1[idx].cod_sec1 USING "&&&&&&&&"
LET prod1[idx].estado=NULL
SELECT UNIQUE a.cod_sec FROM iptb00050 a
WHERE a.cod_n = prod1[idx].cod_n1 AND
a.cod_grupo = prod1[idx].cod_grupo1 AND
a.cod_tipo = prod1[idx].cod_tipo1 AND
a.cod_sec = prod1[idx].cod_sec1
IF STATUS <> NOTFOUND THEN
LET prod1[idx].estado = "information.png"
END IF
IF prod1[idx].existencia IS NULL THEN
LET prod1[idx].existencia = 0
END IF
LET prod1[idx].cantidad_ordenes = 0
IF codigo_ant <> codigo_act THEN
LET codigo_ant = prod1[idx].cod_n1 USING "&&&&",prod1[idx].cod_grupo1 USING "&&&&",prod1[idx].cod_tipo1 USING "&&&&",prod1[idx].cod_sec1 USING "&&&&&&"
CALL disponibles(prod1[idx].cod_n1,prod1[idx].cod_grupo1,prod1[idx].cod_tipo1,prod1[idx].cod_sec1,datos_cons.fech_fi) RETURNING
prod1[idx].cantidad_ordenes,pcantidadConduce,prod1[idx].transito,pexistencia,prod1[idx].reservado
DISPLAY "ordenes1 ",prod1[idx].cantidad_ordenes
LET prod1[idx].cantidad_ordenes = prod1[idx].cantidad_ordenes -
pcantidadConduce
DISPLAY "ordenes ",prod1[idx].cantidad_ordenes," ",pcantidadConduce
END IF
IF prod1[idx].existencia IS NULL THEN
LET prod1[idx].existencia=0
END IF
IF prod1[idx].cantidad_ordenes IS NULL THEN
LET prod11[idx].cantidad_ordenes=0
END IF
IF prod1[idx].disponible IS NULL THEN
LET prod1[idx].disponible=0
END IF
LET prod1[idx].disponible = pexistencia - prod1[idx].cantidad_ordenes - prod1[idx].reservado
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL msg(3)
CONTINUE DIALOG
END IF
DISPLAY ARRAY prod1 TO consart.*
ON ACTION ordenDisponible
IF prod1[arr_curr()].cantidad_ordenes <> 0 THEN
CALL busca_ordenes_reservadas(prod1[arr_curr()].cod_n1,prod1[arr_curr()].cod_grupo1,
prod1[arr_curr()].cod_tipo1,prod1[arr_curr()].cod_Sec1)
ELSE
CALL fgl_winmessage("INFO","PRODUCTO NO TIENE ORDENES COLOCADAS","INFO")
END IF
ON ACTION reservado
LET idx = arr_curr()
IF prod1[idx].reservado >0 THEN
CALL busca_reservas(prod1[idx].cod_n1,prod1[idx].cod_grupo1,prod1[idx].cod_tipo1,prod1[idx].cod_sec1)
ELSE
CALL fgl_winmessage("ERROR","PRODUCTO NO TIENE CANTIDAD RESERVADA","INFO")
END IF
ON ACTION foto
LET idx = arr_curr()
CALL fotos(prod1[idx].cod_n1,prod1[idx].cod_grupo1,prod1[idx].cod_tipo1,
prod1[idx].cod_sec1,prod1[idx].descrip_esp1,usuarios)
LET prod1[idx].estado = " "
SELECT UNIQUE a.cod_sec FROM iptb00050 a
WHERE a.cod_n = prod1[idx].cod_n1 AND
a.cod_grupo = prod1[idx].cod_grupo1 AND
a.cod_tipo = prod1[idx].cod_tipo1 AND
a.cod_sec = prod1[idx].cod_sec1
IF STATUS <> NOTFOUND THEN
LET prod1[idx].estado = "information.png"
END IF
DISPLAY prod1[idx].estado TO consart[scr_line()].estado
AFTER DISPLAY
CALL prod1.clear()
END DISPLAY
END CONSTRUCT
ON ACTION CANCEL
CALL prod1.clear()
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
END FUNCTION