{ ----------------------------------------------------------------------------- PROGRAMA : COPRPC001 FUNCION : Funcion para actualizar campo de la tabla cotb00025, para determinar lo que se ha recibido de cada orden en cada entrega PROGRAMADOR : Ing. Juan Fco. Soto FECHA : Marzo 18, 1993 FUNCION : MUEVE_FECHA mueve las fechas parciales a un mes mas adelante para que intervenga en la proyeccion. FECHA : Abril 14, 1993 ----------------------------------------------------------------------------- } GLOBALS "coprgb000.4gl" DEFINE a_dia ARRAY[12] OF SMALLINT DEFINE fecha_final CHAR(6) DEFINE mes2,total_registros,dia,dia_ini,mes_ini,mes_fin,meses_py,mes INTEGER DEFINE rango_p,ano_fin,ano CHAR(4) DEFINE id INTEGER DEFINE p_ordenes RECORD LIKE cotb00014.* DEFINE p_entregas RECORD LIKE cotb00025.* DEFINE rid INTEGER DEFINE select_1 CHAR(1000) DEFINE p_entrega1 RECORD orden INTEGER, fecha date, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(13,4) END RECORD DEFINE p_entrega RECORD orden INTEGER, fecha date, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(13,4) END RECORD DEFINE up_fecha CHAR(6) DEFINE up_fecha1 DATE DEFINE idx1 INTEGER DEFINE basura,pendiente,recibidas DECIMAL(13,2) DEFINE orden_anterior INTEGER, ch_ord,primera_vez CHAR(1) DEFINE ant RECORD cod_n SMALLINT, cod_Grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT END RECORD FUNCTION coprpc001() OPTIONS FORM LINE 8 CLEAR SCREEN LET formulario = formulario CLIPPED,"cofmpc001" OPEN FORM cofmpc001 FROM formulario DISPLAY FORM cofmpc001 CALL pantalla() DISPLAY "coprpc001" AT 4,3 DISPLAY "Actualizacion Cantidades Llegadas" AT 6,23 #PEN FORM fmres FROM "fmres" #ISPLAY FORM fmres #NPUT BY NAME ordenes #F ordenes is null THEN # GOTO sale #ND IF LET idx1 = 1 LET pendiente = 0 LET recibidas = 0 LET ch_ord = "N" #DISPLAY "EN PROCESO DE ACTUALIZACION... ESPERE POR FAVOR" AT 12,10 #CALL actualiza() #END FUNCTION #FUNCTION actualiza() #OPTIONS #FORM LINE 10, #ERROR LINE 24 CONSTRUCT BY NAME criterio ON tipo,num_oc IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET select_1 = "SELECT num_oc,fech_ent,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,rowid ", "FROM cotb00025 ", "WHERE ",criterio clipped, "ORDER BY 1,3,4,5,6,2 " PREPARE buscate FROM select_1 DECLARE fecha SCROLL CURSOR FOR buscate OPEN fecha LET primera_vez = "S" WHILE status != notfound FETCH ABSOLUTE idx1 fecha INTO p_entrega.*,rid IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET pendiente = 0 DISPLAY "ORDEN : " AT 14,2 DISPLAY p_entrega.orden at 14,12 attribute (bold) DISPLAY "MATERIAL: " AT 14,20 DISPLAY p_entrega.cod_n at 14,30 attribute (bold) DISPLAY p_entrega.cod_grupo at 14,40 attribute (bold) DISPLAY p_entrega.cod_tipo at 14,50 attribute (bold) DISPLAY p_entrega.cod_sec at 14,60 attribute (bold) IF orden_anterior = p_entrega.orden and ant.cod_n = p_entrega.cod_n and ant.cod_grupo = p_entrega.cod_grupo and ant.cod_tipo = p_entrega.cod_tipo and ant.cod_sec = p_entrega.cod_Sec THEN LET primera_vez = "N" ELSE LET primera_vez = "S" END IF IF primera_vez = "S" THEN LET primera_vez = "N" LET orden_anterior = p_entrega.orden LET ant.cod_n = p_entrega.cod_n LET ant.cod_grupo = p_entrega.cod_grupo LET ant.cod_tipo = p_entrega.cod_tipo LET ant.cod_sec = p_entrega.cod_sec IF ch_ord = "S" THEN SELECT unique num_oc FROM cotb00025 WHERE num_oc = p_entrega.orden and cod_n = p_entrega.cod_n and cod_grupo = p_entrega.cod_grupo and cod_tipo = p_entrega.cod_tipo and cod_sec = p_entrega.cod_sec and status_t is null IF STATUS = NOTFOUND then let status = 0 END IF ELSE SELECT sum(cantidad_2) INTO recibidas FROM intb00006 WHERE orden_compra = p_entrega.orden and cod_n = p_entrega.cod_n and cod_grupo = p_entrega.cod_grupo and cod_tipo = p_entrega.cod_tipo and cod_sec = p_entrega.cod_sec and status_t is null and cantidad_2 > 0 IF STATUS = NOTFOUND then let status = 0 END IF END IF END IF LET idx1 = idx1 + 1 IF recibidas = 0 or recibidas is null THEN LET ch_ord = "S" END IF IF ch_ord = "S" THEN GOTO alli END IF IF orden_anterior = p_entrega.orden and ant.cod_n = p_entrega.cod_n and ant.cod_grupo = p_entrega.cod_grupo and ant.cod_tipo = p_entrega.cod_tipo and ant.cod_sec = p_entrega.cod_Sec THEN IF recibidas > 0 THEN LET recibidas = recibidas - p_entrega.cantidad LET pendiente = p_entrega.cantidad END IF IF recibidas = 0 THEN LET pendiente = p_entrega.cantidad END IF IF recibidas < 0 THEN LET pendiente = recibidas + p_entrega.cantidad END IF LABEL alli: FETCH ABSOLUTE idx1 fecha INTO p_entrega1.* IF p_entrega1.orden = p_entrega.orden and p_entrega1.cod_n = p_entrega.cod_n and p_entrega1.cod_grupo = p_entrega.cod_grupo and p_entrega1.cod_tipo = p_entrega.cod_tipo and p_entrega1.cod_sec = p_entrega.cod_Sec THEN LET basura = 0 ELSE IF ch_ord = "S" THEN GOTO actual END IF IF recibidas < 0 or recibidas > 0 THEN LET pendiente = recibidas + p_entrega.cantidad ELSE LET pendiente = p_entrega.cantidad END IF END IF END IF LABEL actual: UPDATE cotb00025 set cantidad_r = pendiente WHERE rowid = rid LET ch_ord = "N" IF pendiente < p_entrega.cantidad THEN LET pendiente = 0 LET ch_ord = "S" IF p_entrega1.orden = p_entrega.orden and p_entrega1.cod_n = p_entrega.cod_n and p_entrega1.cod_grupo = p_entrega.cod_grupo and p_entrega1.cod_tipo = p_entrega.cod_tipo and p_entrega1.cod_sec = p_entrega.cod_Sec THEN LET basura = 0 ELSE LET ch_ord = "N" END IF END IF END WHILE LABEL sale: END FUNCTION FUNCTION mueve_fecha() DEFINE archivo CHAR(17), hoy date, tiempo CHAR(12) OPTIONS PROMPT LINE 16, ERROR LINE 24 CLEAR SCREEN DISPLAY "ESTE PORCESO MUEVE LAS FECHAS DE ENTREGAS " AT 8,8 ATTRIBUTE (BOLD) DISPLAY "A UNA FECHA QUE ESTE EN EL RANGO DE LA " AT 9,8 ATTRIBUTE (BOLD) DISPLAY "PROYECCION. " AT 10,8 ATTRIBUTE (BOLD) DISPLAY "ANTES DE IMPRIMIR EL REPORTE DE PROYECCION" AT 11,8 ATTRIBUTE (BOLD) DISPLAY "SE DEBE HACER ESTE PROCESO. " AT 12,8 ATTRIBUTE (BOLD) DISPLAY "LAS FECHAS ORIGINALES DE LAS ENTREGAS SE " AT 13,8 ATTRIBUTE (BOLD) DISPLAY "ACTUALIZARAN. ESTA SEGURO DE HACER ESTO " AT 14,8 ATTRIBUTE (BOLD) PROMPT "Preciones Cualquier Tecla Para Proceder o - Cancela" FOR CHAR OPT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF OPEN WINDOW mueve AT 12,8 WITH FORM "cofmwd011" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,MESSAGE LINE FIRST, PROMPT LINE LAST) INPUT BY NAME meses_py, fecha_inicial_py AFTER FIELD meses_py IF meses_py IS NULL OR meses_py = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD meses_py END IF AFTER FIELD fecha_inicial_py IF fecha_inicial_py IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_inicial_py END IF LET mes_fin = MONTH(fecha_inicial_py) LET ano_fin = YEAR(fecha_inicial_py) FOR idx = 1 TO meses_py LET mes_fin = mes_fin + 1 IF mes_fin > 12 THEN LET mes_fin = 1 LET ano_fin = ano_fin + 1 END IF END FOR LET dia_ini = DAY(fecha_inicial_py) LET mes_ini = MONTH(fecha_inicial_py) IF dia_ini > 15 THEN LET mes2 = mes_fin LET mes_fin = mes_fin + 1 IF mes_fin > 12 THEN LET mes_fin = 1 END IF END IF LET rango_p = MONTH(fecha_inicial_py) using "&&", mes_fin using "&&" IF dia_ini > 15 THEN LET mes_fin = mes2 LET mes2 = 0 END IF LET fecha_final = DAY(fecha_inicial_py) using "&&", mes_fin using "&&", ano_fin[3,4] using "&&" LET fecha_final_py = fecha_final LET total_registros = null SELECT count(*) INTO total_registros FROM cotb00026 WHERE rango_plan=rango_p AND fecha_ini=fecha_inicial_py AND status_t is NULL IF total_registros = 0 OR total_registros IS NULL THEN LET numero_msg = 48 CALL msg(numero_msg) NEXT FIELD meses_py END IF AFTER INPUT IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF EXIT INPUT LET dia_ini = DAY(fecha_inicial_py) LET mes_ini = MONTH(fecha_inicial_py) LET mes_fin = MONTH(fecha_inicial_py) + meses_py IF dia_ini > 15 THEN LET mes2 = mes_fin LET mes_fin = mes_fin + 1 IF mes_fin > 12 THEN LET mes_fin = 1 END IF END IF LET rango_p = MONTH(fecha_inicial_py) using "&&", mes_fin using "&&" IF dia_ini > 15 THEN LET mes_fin = mes2 LET mes2 = 0 END IF LET total_registros = null SELECT count(*) INTO total_registros FROM cotb00026 WHERE rango_plan=rango_p AND fecha_ini=fecha_inicial_py AND status_t is NULL IF total_registros = 0 OR total_registros IS NULL THEN LET numero_msg = 48 CALL msg(numero_msg) NEXT FIELD meses_py END IF EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GO TO cierra END IF PROMPT "Esta Seguro De Proceder (S/N)? " FOR CHAR clasifica LET clasifica = upshift(clasifica) IF clasifica = "S" THEN LET hoy = today LET tiempo = time LET archivo = hoy using "ddmmyy",tiempo[1,8],".up" START REPORT actua TO archivo DECLARE fecha_p CURSOR FOR SELECT rowid,* FROM cotb00025 WHERE fech_ent < fecha_inicial_py and cantidad - cantidad_r > 0 and cod_n = 1 FOREACH fecha_p INTO id,p_entregas.* IF status = notfound THEN EXIT FOREACH END IF LET dia = DAY(p_entregas.fech_ent) LET mes = MONTH(fecha_inicial_py) LET ano = YEAR(fecha_inicial_py) CALL tabla_dias() DISPLAY dia at 1,2 IF a_dia[mes] < dia THEN LET dia = a_dia[mes] END IF LET up_fecha = dia using "&&",mes using "&&",ano[3,4] display up_fecha at 2,2 LET up_fecha1 = up_fecha DISPLAY BY NAME p_entregas.num_oc, p_entregas.fech_ent, up_fecha1 ATTRIBUTE (BOLD) UPDATE cotb00025 set fech_ent = up_fecha1, us_mod = user, fech_mod = current WHERE rowid = id OUTPUT TO REPORT actua() END FOREACH END IF LABEL cierra: CLOSE WINDOW mueve END FUNCTION REPORT actua() FORMAT ON EVERY ROW PRINT COLUMN 1, p_entregas.num_oc using "&&&&&"," ", p_entregas.cod_n using "&","-", p_entregas.cod_grupo using "&","-", p_entregas.cod_tipo using "&&","-", p_entregas.cod_sec using "&&&","-", p_entregas.fech_ent using "dd/mm/yy"," ", up_fecha1 using "dd/mm/yy" END REPORT FUNCTION tabla_dias() LET a_dia[1] = 31 LET a_dia[2] = 28 LET a_dia[3] = 31 LET a_dia[4] = 30 LET a_dia[5] = 31 LET a_dia[6] = 30 LET a_dia[7] = 31 LET a_dia[8] = 31 LET a_dia[9] = 30 LET a_dia[10] = 31 LET a_dia[11] = 30 LET a_dia[12] = 31 END FUNCTION