{ ------------------------------------------------------------------------------- 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