{ ------------------------------------------------------------------------------- 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 SELECT * INTO p_companias.* FROM companias CALL ipprcs004() END MAIN FUNCTION ipprcs004() DEFINE pcantidadconduce DEC(12,5), chexistencia,chordenes CHAR(2), pbodega smallint OPTIONS FORM LINE 7, ERROR LINE 24, COMMENT LINE 23 OPEN FORM ipfmcs004 FROM "ipfmcs004_1" DISPLAY FORM ipfmcs004 CALL ui.Interface.LoadStyles("mbsStyle") ## Aqui se prepara el criterio de seleccion LABEL volver: 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 int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF 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 EXIT INPUT 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 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF 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' AS Expr1, '0','0',b.descripcion, c.precio ", "FROM vetb00061 AS b INNER JOIN ", " vetb00025 AS c ON b.ventas = c.ventas 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 " 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 ## 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() FOREACH accion INTO prod11[idx].*,descrip1 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # Busca La Existencia del Producto LET prod11[idx].existencia = 0 IF inventario = "PRODUCTOS TERMINADOS" THEN IF chexistencia = 'SI' THEN SELECT SUM(a.cantidad_2) INTO prod11[idx].existencia FROM iptb00006 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 # QUERY PARA BUSCAR LAS CANTIDADES EN ORDENES # IF chordenes= 'SI' THEN LET prod11[idx].cantidad_ordenes = 0 SELECT SUM(a.cantidad) INTO prod11[idx].cantidad_ordenes FROM prtb00013 a,prtb00012 b WHERE a.num_oc = b.num_oc AND b.cerrada = 'N' AND b.status_t IS NULL AND 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 LET pcantidadConduce = 0 SELECT SUM(c.cantidad_2) INTO pcantidadConduce FROM prtb00013 a,prtb00012 b,iptb00006 c,iptb00005 d WHERE a.num_oc = b.num_oc AND b.cerrada = 'N' AND b.status_t IS NULL AND 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.cod_n = c.cod_n AND a.cod_grupo=c.cod_grupo AND a.cod_tipo=c.cod_tipo AND a.cod_sec=c.cod_Sec AND c.cod_mov = d.cod_mov AND (d.control_despacho = 'SI' OR d.control_devolucion = 'SI') AND a.num_oc = c.num_oc AND c.status_t IS NULL LET prod11[idx].cantidad_ordenes = prod11[idx].cantidad_ordenes + pcantidadConduce IF prod11[idx].existencia IS NULL THEN LET prod11[idx].existencia=0 END IF IF prod11[idx].cantidad_ordenes IS NULL THEN LET prod11[idx].cantidad_ordenes=0 END IF LET prod11[idx].pventas = prod11[idx].existencia - prod11[idx].cantidad_ordenes # 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 IF prod11[idx].existencia IS NULL THEN LET prod11[idx].existencia = 0 END IF LET prod11[idx].descrip_esp1 =prod11[idx].descrip_esp1 CLIPPED LET idx = idx + 1 END FOREACH CALL set_count (idx-1) DISPLAY ARRAY prod11 TO consart.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN ELSE CALL prod11.clear() GOTO volver END IF END FUNCTION