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