{ ------------------------------------------------------------------ PROGRAMA : COPRRP010 OBJETIVO : Proyecciones (DETALLADAS) PROGRAMADOR : Lic. Abner Montalvo Z. FECHA REALIZACION : Septiembre 19, 1992. MODIFICADO POR : Juan Fco. Soto FECHA : Noviembre 13, 1992. DESCRIPCION : Optimizando Las operaciones de busqueda, para mayor rapidez. ------------------------------------------------------------------ } DATABASE marmotech GLOBALS DEFINE criterio CHAR(1000) DEFINE parar,salir,salir1,salir_m CHAR(1), formulario,linea_mensaje CHAR(80) DEFINE meses_py SMALLINT, fecha_inicial_py DATE, fecha_final_py DATE, fecha_final CHAR(6) DEFINE mes_ini SMALLINT, mes_fin SMALLINT, mes1 SMALLINT, mes2 SMALLINT, mes3 SMALLINT, posicion SMALLINT, posicion1 SMALLINT, posicion2 SMALLINT, mes_proceso SMALLINT, ano_fin CHAR(4), dia_ini SMALLINT, rango_p CHAR(4), total_registros SMALLINT DEFINE mes_agot1 CHAR(13), mes_agot2 CHAR(13), mes_reorden CHAR(13), dia_reord CHAR(2), mes_reord CHAR(10), primera_vez1 CHAR(1), primera_vez2 CHAR(1), cantidad1,acum_mvtos,acum_parcial DECIMAL(13,4), cantidad2 DECIMAL(13,4), fecha1 DATE, fecha2 DATE, descrip3 CHAR(30), tipo_material CHAR(11), unidad CHAR(3), balance_se DECIMAL(12,2) DEFINE balances RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, balan_corte DECIMAL(13,4) END RECORD DEFINE mat_primas RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT END RECORD DEFINE sustituto RECORD cod_n_s SMALLINT, cod_grupo_s SMALLINT, cod_tipo_s SMALLINT, cod_sec_s SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT END RECORD DEFINE balan_ini DECIMAL(13,4), balan_ini_sin_oc DECIMAL(13,4), balan_fin DECIMAL(13,4) # DEFINE mvtos RECORD # cod_mov SMALLINT, # status_mov CHAR(1), # cantidad_1 DECIMAL(13,4), # cantidad_2 DECIMAL(13,4) # END RECORD DEFINE cantidad_usada DECIMAL(13,4), cantidad_producir DECIMAL(13,4), consumo_mes DECIMAL(13,4), monto_orden DECIMAL(13,4), cantidad_orden DECIMAL(13,4) DEFINE consumos RECORD meses SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, consumo_mes DECIMAL(13,4) END RECORD DEFINE sustituto1 RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cod_n_s SMALLINT, cod_grupo_s SMALLINT, cod_tipo_s SMALLINT, cod_sec_s SMALLINT, mes SMALLINT, num_orden SMALLINT, tipo CHAR(2), fecha_entrega DATE, cantidad DECIMAL(13,4), cantidad_r DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE equivale RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cod_n_e SMALLINT, cod_grupo_e SMALLINT, cod_tipo_e SMALLINT, cod_sec_e SMALLINT, mes SMALLINT, num_orden SMALLINT, tipo CHAR(2), fecha_entrega DATE, cantidad DECIMAL(13,4), cantidad_r DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE ordeness RECORD cod_n_se SMALLINT, cod_grupo_se SMALLINT, cod_tipo_se SMALLINT, cod_sec_se SMALLINT, mes SMALLINT, num_orden SMALLINT, tipo CHAR(2), fecha_entrega DATE, cantidad DECIMAL(13,4), cantidad_r DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE mvtos_mp RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, num_orden SMALLINT, fecha_mov DATE, cantidad DECIMAL(13,4) END RECORD DEFINE pb RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE mes_busca CHAR(2), idx_c,idx,idx_b,idx_or,idx_e,idx_s SMALLINT, numero_msg SMALLINT, limpia_linea CHAR(79) DEFINE bi ARRAY[100] OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cod_n_se SMALLINT, cod_grupo_se SMALLINT, cod_tipo_se SMALLINT, cod_sec_se SMALLINT, tipo CHAR(1), balan_ini DECIMAL (13,4) END RECORD DEFINE oc ARRAY[100] OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cod_n_se SMALLINT, cod_grupo_se SMALLINT, cod_tipo_se SMALLINT, cod_sec_se SMALLINT, mes SMALLINT, num_orden SMALLINT, fecha_ent DATE, cantidad DECIMAL (13,4), precio DECIMAL (13,4), impuesto DECIMAL (13,4) , bandera CHAR(1) END RECORD DEFINE bm ARRAY[100] OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT, balan_ini DECIMAL (13,4), consumo_mes DECIMAL (13,4), balan_fin DECIMAL (13,4), agot1 CHAR (15), agot2 CHAR (15), pto_reorden CHAR (15) END RECORD DEFINE a, b, c, d, tipo_papel SMALLINT DEFINE calc_agot_sin_oc CHAR(1), calc_agot_con_oc, encontre CHAR(1), cant_orden_mes DECIMAL (13,4), agot_sin_oc DECIMAL (13,4), agot_con_oc DECIMAL (13,4), fecha_agot_sin_oc CHAR(15), fecha_agot_con_oc CHAR(15), nombre_mes , materia_prima CHAR(10), total_precio,consumo_dia, meses_llegada, mes_decimal DECIMAL (10,2), fletes, otros_gastos, cf, cif, gravamenes, porc_rc, porc1, porc_grav, impuesto, porc_precio, precio_mp, cf_mp, g_seguro, recibido, cantidad_imp DECIMAL (13,4), dia_agotar, cdll, dias_llegada, mes_entero, porc_total_rc, porc_total_grav,idx_10, idx_11 SMALLINT, mes_pedido INTEGER, pto_reorden CHAR(15) DEFINE select_cons,select_mp,select_bal,select_orden,select_equi,select_s, select_sust,select_e, select_princ CHAR(1500) END GLOBALS FUNCTION coprrp010() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM coprrp010 FROM "cofmrp010" DISPLAY FORM coprrp010 CALL pantalla() DISPLAY "coprrp010" AT 4,3 DISPLAY "Detalle de Proyecciones" AT 6,28 LET tipo_papel = 2 #CALL msgrp000(tipo_papel) CALL copcrp010() RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION copcrp010() LET int_flag = FALSE INPUT BY NAME meses_py, fecha_inicial_py, porc_total_grav, porc_total_rc 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 FIELD porc_total_grav IF porc_total_grav IS NULL OR porc_total_grav = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD porc_total_grav END IF AFTER FIELD porc_total_rc IF porc_total_rc IS NULL OR porc_total_rc = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD porc_total_rc 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 END INPUT CONSTRUCT criterio ON x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_Sec FROM cod_n,cod_grupo,cod_tipo,cod_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET total_registros = 0 LET limpia_linea = " ", " " DISPLAY limpia_linea AT 15,1 DISPLAY limpia_linea AT 16,1 DISPLAY limpia_linea AT 18,1 DISPLAY "Realizando Calculos para Plan de Produccion... Por Favor Espere" AT 15,16 ATTRIBUTE (REVERSE, YELLOW) # Funcion que actualiza las cantidades parciales con lo recibido START REPORT proyeccion TO "ord1" LET a = 0 LET b = 0 LET c = 0 DISPLAY "Estoy Borrando La Tabla De Punto de Reorden " AT 18,15 DELETE FROM cotb00020 LET select_princ = "SELECT x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,x.orden_compra, ", " x.fecha,x.cantidad_2 ", "FROM intb00006 x ", "WHERE x.status_t is null and x.orden_compra is not null and ", " x.cantidad_2 > 0 and x.fecha between ? and ? and ", criterio clipped," ORDER BY 1,2,3,4,5,6 " DISPLAY "Estoy buscando los movimientos de los materiales" AT 18,15 PREPARE busca_princ FROM select_princ DECLARE mvtos_mater SCROLL CURSOR FOR busca_princ OPEN mvtos_mater USING fecha_inicial_py, fecha_final_py LET select_e = "SELECT s.cod_n,s.cod_grupo,s.cod_tipo,s.cod_sec,s.cod_n_e, ", " s.cod_grupo_e, s.cod_tipo_e, s.cod_sec_e ", "FROM intb00004 s, intb00002 x ", "WHERE s.status_t IS NULL AND s.cod_n_e = x.cod_n AND ", " s.cod_grupo_e = x.cod_grupo AND s.cod_tipo_e = x.cod_tipo AND ", " s.cod_sec_e = x.cod_sec AND s.status_t IS NULL AND ", " x.status_t IS NULL ORDER BY 1,2,3,4" DISPLAY "Estoy buscando las materias primas equivalentes" AT 18,15 PREPARE busca_equivale FROM select_e DECLARE material_equiv SCROLL CURSOR FOR busca_equivale OPEN material_equiv LET select_s = "SELECT o.cod_n,o.cod_grupo,o.cod_tipo,o.cod_sec,o.cod_n_s, ", " o.cod_grupo_s, o.cod_tipo_s, o.cod_sec_s ", "FROM intb00003 o, intb00002 x ", "WHERE o.status_t IS NULL AND o.cod_n_s = x.cod_n AND ", " o.cod_grupo_s = x.cod_grupo AND o.cod_tipo_s = x.cod_tipo AND ", " o.cod_sec_s = x.cod_sec AND o.status_t IS NULL AND ", " x.status_t IS NULL ", " ORDER BY 1,2,3,4 " DISPLAY "Estoy buscando todas la materias primas sustitutas" AT 18,15 PREPARE busca_todos_s FROM select_s DECLARE material_sust SCROLL CURSOR FOR busca_todos_s OPEN material_sust LET select_cons = "SELECT MONTH(x.fecha_ini),a4.cod_n_mp,a4.cod_grupo_mp,a4.cod_tipo_mp, ", " a4.cod_sec_mp,sum(a4.cantidad * x.cantidad / c4.base_medida) ", "FROM catb00001 a4, cotb00026 x, catb00002 c4 ", "WHERE a4.cod_n_pt = x.cod_n AND a4.cod_grupo_pt = x.cod_grupo AND ", " a4.cod_tipo_pt = x.cod_tipo AND a4.cod_sec_pt = x.cod_sec AND ", " a4.num_formula = c4.num_formula AND c4.uso = 'S' AND ", " x.rango_plan = ? GROUP BY 1,2,3,4,5 ORDER BY 2,3,4,5,1 " DISPLAY "Estoy buscando el consumo de las materias primas principales" AT 18,10 PREPARE prep_consumo FROM select_cons DECLARE busca_cons SCROLL CURSOR FOR prep_consumo OPEN busca_cons USING rango_p LET select_sust = "SELECT UNIQUE d2.cod_n,d2.cod_grupo,d2.cod_tipo,d2.cod_sec,a2.cod_n, ", " a2.cod_grupo,a2.cod_tipo,a2.cod_sec,MONTH(c2.fecha_ini), ", " a2.num_oc,f2.tipo,a2.fech_ent,a2.cantidad,a2.cantidad_r, ", " x.precio, e2.base ", "FROM cotb00025 a2,cotb00015 x,cotb00026 c2,intb00003 d2,intb00002 e2, ", " cotb00014 f2 ", "WHERE (a2.cod_n = x.cod_n AND a2.cod_grupo = x.cod_grupo AND ", " a2.cod_tipo = x.cod_tipo AND a2.cod_sec = x.cod_sec) AND ", " (a2.cod_n = d2.cod_n_s AND a2.cod_grupo = d2.cod_grupo_s AND ", " a2.cod_tipo = d2.cod_tipo_s AND a2.cod_sec = d2.cod_sec_s) AND ", " (a2.cod_n = e2.cod_n AND a2.cod_grupo = e2.cod_grupo AND ", " a2.cod_tipo = e2.cod_tipo AND a2.cod_sec = e2.cod_sec) AND ", " a2.num_req = x.num_req AND a2.num_oc = x.num_oc AND ", " a2.tipo=x.tipo AND x.tipo=f2.tipo AND x.num_oc=f2.num_oc AND ", " d2.status_t IS NULL AND a2.status_t IS NULL AND ", " c2.rango_plan = ? AND a2.fech_ent between c2.fecha_ini AND ", " c2.fecha_fin AND f2.cierre = 'N' ORDER BY 1,2,3,4,10,11 " DISPLAY " Estoy buscando las ordenes de compras de los sustitutos " AT 18,10 PREPARE busca_sustituto FROM select_sust DECLARE ordenes_sust SCROLL CURSOR FOR busca_sustituto OPEN ordenes_sust USING rango_p LET select_equi = "SELECT UNIQUE d3.cod_n,d3.cod_grupo,d3.cod_tipo,d3.cod_sec,a3.cod_n, ", " a3.cod_grupo,a3.cod_tipo,a3.cod_sec,MONTH(c3.fecha_ini), ", " a3.num_oc,f3.tipo,a3.fech_ent,a3.cantidad,a3.cantidad_r, ", " x.precio, e3.base ", "FROM cotb00025 a3,cotb00015 x,cotb00026 c3,intb00004 d3,intb00002 e3, ", " cotb00014 f3 ", "WHERE a3.cod_n = x.cod_n AND a3.cod_grupo = x.cod_grupo AND ", " a3.cod_tipo = x.cod_tipo AND a3.cod_sec = x.cod_sec AND ", " a3.cod_n = d3.cod_n_e AND a3.cod_grupo = d3.cod_grupo_e AND ", " a3.cod_tipo = d3.cod_tipo_e AND a3.cod_sec = d3.cod_sec_e AND ", " e3.cod_n = a3.cod_n AND e3.cod_grupo = a3.cod_grupo AND ", " e3.cod_tipo = a3.cod_tipo AND e3.cod_sec = a3.cod_sec AND ", " a3.num_req = x.num_req AND a3.num_oc = x.num_oc AND ", " x.num_oc=f3.num_oc AND a3.tipo=x.tipo AND x.tipo=f3.tipo AND ", " c3.rango_plan = ? AND d3.status_t IS NULL AND ", " a3.status_t IS NULL AND a3.fech_ent between c3.fecha_ini AND ", " c3.fecha_fin AND f3.cierre = 'N' ORDER BY 1,2,3,4,10,11 " DISPLAY " Estoy buscando las ordenes de compras de los equivalentes " AT 18,10 PREPARE equivalentes FROM select_equi IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF DECLARE ordenes_equiv SCROLL CURSOR FOR equivalentes OPEN ordenes_equiv USING rango_p # Busca los Balances de las Materias Primas LET select_bal = "SELECT x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,SUM(x.cantidad_2) ", "FROM intb00006 x ", "WHERE ",criterio clipped," AND x.fecha < ? AND x.status_t IS NULL ", "GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 " DISPLAY "Estoy buscando los balances iniciales de las materias primas" AT 18,10 PREPARE busca_balan FROM select_bal IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF DECLARE balan_prima SCROLL CURSOR FOR busca_balan OPEN balan_prima USING fecha_inicial_py # Busca las Ordenes de cada material con su fecha de entregas parciales LET select_orden = "SELECT UNIQUE x.cod_n,x.cod_grupo,x.cod_tipo, x.cod_sec, ", " MONTH(c1.fecha_ini),a1.num_oc,f1.tipo,a1.fech_ent, ", " a1.cantidad, a1.cantidad_r, x.precio, e1.base ", "FROM cotb00025 a1,cotb00015 x,cotb00026 c1,intb00002 e1,cotb00014 f1 ", "WHERE a1.cod_n = x.cod_n AND a1.cod_grupo = x.cod_grupo AND ", " a1.cod_tipo = x.cod_tipo AND a1.cod_sec = x.cod_sec AND ", " e1.cod_n = a1.cod_n AND e1.cod_grupo = a1.cod_grupo AND ", " e1.cod_tipo = a1.cod_tipo AND e1.cod_sec = a1.cod_sec AND ", " a1.num_req = x.num_req AND a1.num_oc = x.num_oc AND ", " a1.tipo=x.tipo AND x.tipo=f1.tipo AND x.num_oc=f1.num_oc AND ", " c1.rango_plan = ? AND a1.status_t IS NULL AND ", " a1.fech_ent between c1.fecha_ini AND c1.fecha_fin AND ", " f1.cierre = 'N' ORDER BY 1,2,3,4,6,7 " DISPLAY "Estoy buscando las ordenes de las materias primas principales" AT 18,10 PREPARE busca_ordenes FROM select_orden IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF DECLARE ordenes_material SCROLL CURSOR FOR busca_ordenes OPEN ordenes_material USING rango_p # Busca el Material Principal y le calcula el balance inicial a la fecha LET select_mp = "SELECT UNIQUE x.cod_n, x.cod_grupo,x.cod_tipo, x.cod_sec ", "FROM intb00002 x, catb00001 y ", "WHERE ",criterio clipped," AND x.cod_n = y.cod_n_mp AND ", " x.cod_grupo=y.cod_grupo_mp AND x.cod_tipo=y.cod_tipo_mp AND ", " x.cod_sec = y.cod_sec_mp AND x.status_t IS NULL AND ", " y.status_t IS NULL ORDER BY 1, 2, 3, 4 " DISPLAY " Estoy buscando las materias primas principales " AT 18,10 PREPARE busca_mat_prima FROM select_mp IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF DECLARE material CURSOR FOR busca_mat_prima OPEN material LET idx_c = 1 LET idx_e = 1 LET idx_s = 1 LET idx_or = 1 LET idx_b = 1 LET idx_10 = 1 DISPLAY " " AT 18,10 WHILE status != NOTFOUND FETCH material INTO mat_primas.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN EXIT WHILE END IF DISPLAY mat_primas.cod_n at 18,25 DISPLAY mat_primas.cod_grupo at 18,35 DISPLAY mat_primas.cod_tipo using "&&" at 18,45 DISPLAY mat_primas.cod_sec using "&&&" at 18,55 LET b = b + 1 LET balances.balan_corte = 0 LET mes_ini = MONTH(fecha_inicial_py) LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_b balan_prima INTO balances.* IF status = notfound THEN LET salir = "S" LET idx_b = 1 EXIT WHILE END IF LET idx_b = idx_b + 1 IF balances.cod_n = mat_primas.cod_n AND balances.cod_grupo = mat_primas.cod_grupo AND balances.cod_tipo = mat_primas.cod_tipo AND balances.cod_sec = mat_primas.cod_sec THEN LET salir = "S" END IF IF salir = "S" THEN LET idx_b = 1 EXIT WHILE END IF END WHILE IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET bi[b].cod_n = mat_primas.cod_n LET bi[b].cod_grupo = mat_primas.cod_grupo LET bi[b].cod_tipo = mat_primas.cod_tipo LET bi[b].cod_sec = mat_primas.cod_sec LET bi[b].cod_n_se = 0 LET bi[b].cod_grupo_se = 0 LET bi[b].cod_tipo_se = 0 LET bi[b].cod_sec_se = 0 LET bi[b].tipo = "P" LET bi[b].balan_ini = balances.balan_corte LET balan_ini = balances.balan_corte # Busca materiales sustitutos del material y le calcula el balance inicial # a la fecha LET salir1 = "N" WHILE salir1 != "S" FETCH ABSOLUTE idx_s material_sust INTO sustituto.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN LET idx_s = 1 LET salir1 = "S" EXIT WHILE END IF LET idx_s = idx_s + 1 IF sustituto.cod_n_s = mat_primas.cod_n AND sustituto.cod_grupo_s = mat_primas.cod_grupo AND sustituto.cod_tipo_s = mat_primas.cod_tipo AND sustituto.cod_sec_s = mat_primas.cod_sec THEN LET balances.balan_corte = 0 LET balance_se = 0 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_b balan_prima INTO balances.* IF status = notfound THEN LET idx_b = 1 LET salir = "S" EXIT WHILE END IF LET idx_b = idx_b + 1 IF balances.cod_n = sustituto.cod_n AND balances.cod_grupo = sustituto.cod_grupo AND balances.cod_tipo = sustituto.cod_tipo AND balances.cod_sec = sustituto.cod_sec THEN LET salir = "S" LET balance_se = balances.balan_corte END IF IF salir = "S" THEN LET idx_b = 1 EXIT WHILE END IF END WHILE IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET b = b + 1 LET bi[b].cod_n = mat_primas.cod_n LET bi[b].cod_grupo = mat_primas.cod_grupo LET bi[b].cod_tipo = mat_primas.cod_tipo LET bi[b].cod_sec = mat_primas.cod_sec LET bi[b].cod_n_se = sustituto.cod_n LET bi[b].cod_grupo_se = sustituto.cod_grupo LET bi[b].cod_tipo_se = sustituto.cod_tipo LET bi[b].cod_sec_se = sustituto.cod_sec LET bi[b].tipo = "S" LET bi[b].balan_ini = balance_se LET balan_ini = balan_ini + balance_se END IF END WHILE # Busca materiales equivalentes del material y le calcula el balance inicial # a la fecha LET salir1 = "N" WHILE salir1 != "S" FETCH ABSOLUTE idx_e material_equiv INTO sustituto.* IF status = NOTFOUND THEN LET idx_e = 1 LET salir1 = "S" EXIT WHILE END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET idx_e = idx_e + 1 IF sustituto.cod_n_s = mat_primas.cod_n AND sustituto.cod_grupo_s = mat_primas.cod_grupo AND sustituto.cod_tipo_s = mat_primas.cod_tipo AND sustituto.cod_sec_s = mat_primas.cod_sec THEN LET balance_se = 0 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_b balan_prima INTO balances.* IF status = notfound THEN LET idx_b = 1 LET salir = "S" EXIT WHILE END IF LET idx_b = idx_b + 1 IF balances.cod_n = sustituto.cod_n AND balances.cod_grupo = sustituto.cod_grupo AND balances.cod_tipo = sustituto.cod_tipo AND balances.cod_sec = sustituto.cod_sec THEN LET salir = "S" LET balance_se = balances.balan_corte END IF IF salir = "S" THEN LET idx_b = 1 EXIT WHILE END IF END WHILE IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET b = b + 1 LET bi[b].cod_n = mat_primas.cod_n LET bi[b].cod_grupo = mat_primas.cod_grupo LET bi[b].cod_tipo = mat_primas.cod_tipo LET bi[b].cod_sec = mat_primas.cod_sec LET bi[b].cod_n_se = sustituto.cod_n LET bi[b].cod_grupo_se = sustituto.cod_grupo LET bi[b].cod_tipo_se = sustituto.cod_tipo LET bi[b].cod_sec_se = sustituto.cod_sec LET bi[b].tipo = "E" LET bi[b].balan_ini = balance_se LET balan_ini = balan_ini + balance_se END IF END WHILE LET balan_ini_sin_oc = balan_ini LET calc_agot_sin_oc = "N" LET calc_agot_con_oc = "N" # Busca las Ordenes de Compras para el mes "d" de la materia prima FOR d = 1 TO meses_py IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF DISPLAY rango_p at 20,2 SELECT UNIQUE fecha_ini, fecha_fin INTO fecha1, fecha2 FROM cotb00026 WHERE rango_plan = rango_p AND MONTH(fecha_ini) = mes_ini LET cant_orden_mes = 0 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_or ordenes_material INTO ordeness.* IF status = notfound THEN LET idx_or = 1 LET salir = "N" EXIT WHILE END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET idx_or = idx_or + 1 IF ordeness.cod_n_se = mat_primas.cod_n AND ordeness.cod_grupo_se = mat_primas.cod_grupo AND ordeness.cod_tipo_se = mat_primas.cod_tipo AND ordeness.cod_sec_se = mat_primas.cod_sec AND ordeness.mes = mes_ini THEN # Calcula el F.O.B. de la orden del material principal DISPLAY ordeness.num_orden at 20,1 DECLARE precio_base CURSOR FOR SELECT a5.cod_n, a5.cod_grupo, a5.cod_tipo, a5.cod_sec, a5.cantidad, a5.precio, b5.base FROM cotb00015 a5, intb00002 b5 WHERE a5.num_oc=ordeness.num_orden AND a5.cod_n=b5.cod_n AND a5.cod_grupo=b5.cod_grupo AND a5.cod_tipo=b5.cod_tipo AND a5.cod_sec = b5.cod_sec LET total_precio = 0 FOREACH precio_base INTO pb.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN EXIT FOREACH END IF IF pb.base = 0 or pb.base IS NULL THEN LET total_precio = total_precio + pb.cantidad * pb.precio END IF IF pb.base > 0 THEN LET total_precio = total_precio + pb.cantidad * pb.precio / pb.base END IF END FOREACH LET cantidad_imp = ordeness.cantidad - ordeness.cantidad_r IF cantidad_imp <= 0 THEN LET ordeness.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET ordeness.cantidad = cantidad_imp SELECT c_flete, otros_g INTO fletes, otros_gastos FROM cotb00014 WHERE tipo=ordeness.tipo and num_oc=ordeness.num_orden AND status_t IS NULL SELECT y.seguro INTO g_seguro FROM cotb00014 x, cotb00017 y WHERE x.tipo=ordeness.tipo AND x.num_oc=ordeness.num_orden AND x.via = y.via_t AND x.cod_pt = y.cod_pt AND y.cod_n = mat_primas.cod_n AND y.cod_grupo = mat_primas.cod_grupo AND y.cod_tipo = mat_primas.cod_tipo AND y.cod_sec = mat_primas.cod_sec AND y.status_t IS NULL SELECT gravamen INTO gravamenes FROM intb00002 WHERE cod_n = mat_primas.cod_n AND cod_grupo = mat_primas.cod_grupo AND cod_tipo = mat_primas.cod_tipo AND cod_sec = mat_primas.cod_sec AND status_t IS NULL LET cf = total_precio + fletes + otros_gastos LET cif = cf + (cf * g_seguro / 100) LET gravamenes = gravamenes / 100 LET porc_grav = porc_total_grav / 100 LET porc_rc = porc_total_rc / 100 LET porc1 = cif * gravamenes LET impuesto = ( porc1 + ( porc1 * porc_grav )) + ( 0.08 * ( porc1 + ( porc1 * porc_grav ) + cif )) + (porc_rc * cif ) IF ordeness.base = 0 OR ordeness.base IS NULL THEN LET ordeness.base = 1 END IF IF total_precio <> 0 THEN LET porc_precio = (ordeness.cantidad * ordeness.precio / ordeness.base) / total_precio ELSE LET porc_precio = 0 END IF LET precio_mp = porc_precio * impuesto LET cf_mp = ordeness.cantidad * ordeness.precio / ordeness.base + (porc_precio * (fletes + otros_gastos)) LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = 0 LET oc[a].cod_grupo_se = 0 LET oc[a].cod_tipo_se = 0 LET oc[a].cod_sec_se = 0 LET oc[a].mes = mes_ini LET oc[a].num_orden = ordeness.num_orden LET oc[a].fecha_ent = ordeness.fecha_entrega LET oc[a].cantidad = ordeness.cantidad LET oc[a].precio = cf_mp LET oc[a].impuesto = precio_mp LET oc[a].bandera = "O" LET cant_orden_mes = cant_orden_mes + ordeness.cantidad END IF END IF END WHILE # Busca los reportes de entradas del mes para el material principal LET salir = "N" LET idx_10 = 1 WHILE salir != "S" FETCH ABSOLUTE idx_10 mvtos_mater INTO mvtos_mp.* IF STATUS = NOTFOUND THEN LET idx_10 = 1 LET salir = "N" EXIT WHILE END IF LET idx_10 = idx_10 + 1 IF mat_primas.cod_n = mvtos_mp.cod_n AND mat_primas.cod_grupo = mvtos_mp.cod_grupo AND mat_primas.cod_tipo = mvtos_mp.cod_tipo AND mat_primas.cod_sec = mvtos_mp.cod_sec AND mvtos_mp.fecha_mov >= fecha1 AND mvtos_mp.fecha_mov < fecha2 THEN LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = 0 LET oc[a].cod_grupo_se = 0 LET oc[a].cod_tipo_se = 0 LET oc[a].cod_sec_se = 0 LET oc[a].mes = mes_ini LET oc[a].num_orden = mvtos_mp.num_orden LET oc[a].fecha_ent = mvtos_mp.fecha_mov LET oc[a].cantidad = mvtos_mp.cantidad LET oc[a].precio = null LET oc[a].impuesto = null LET oc[a].bandera = "M" LET cant_orden_mes = cant_orden_mes + mvtos_mp.cantidad END IF END WHILE # Calcula el consumo en el mes "d" de la materia prima LET consumo_mes = 0 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_c busca_cons INTO consumos.* IF status = notfound THEN LET idx_c = 1 LET salir = "N" EXIT WHILE END IF LET idx_c = idx_c + 1 IF consumos.meses = mes_ini AND consumos.cod_n = mat_primas.cod_n AND consumos.cod_grupo = mat_primas.cod_grupo AND consumos.cod_tipo = mat_primas.cod_tipo AND consumos.cod_sec = mat_primas.cod_sec THEN LET consumo_mes = consumos.consumo_mes LET salir = "S" ELSE LET consumo_mes = 0 END IF IF salir = "S" THEN LET idx_c = 1 EXIT WHILE END IF END WHILE # Busca las ordenes de compras de los sustitutos para el mes "d" LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_s ordenes_sust INTO sustituto1.* IF status = NOTFOUND THEN LET idx_s = 1 LET salir = "N" EXIT WHILE END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET idx_s = idx_s + 1 IF sustituto1.cod_n = mat_primas.cod_n AND sustituto1.cod_grupo = mat_primas.cod_grupo AND sustituto1.cod_tipo = mat_primas.cod_tipo AND sustituto1.cod_sec = mat_primas.cod_sec AND sustituto1.mes = mes_ini THEN # Calcula el F.O.B. de la orden del material sustituto DECLARE precio_base2 CURSOR FOR SELECT a6.cod_n, a6.cod_grupo, a6.cod_tipo, a6.cod_sec, a6.cantidad, a6.precio, b6.base FROM cotb00015 a6, intb00002 b6 WHERE a6.num_oc = sustituto1.num_orden AND a6.cod_n = b6.cod_n AND a6.cod_grupo = b6.cod_grupo AND a6.cod_tipo = b6.cod_tipo AND a6.cod_sec = b6.cod_sec LET total_precio = 0 FOREACH precio_base2 INTO pb.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN EXIT FOREACH END IF IF pb.base = 0 or pb.base IS NULL THEN LET total_precio = total_precio + pb.cantidad * pb.precio END IF IF pb.base > 0 THEN LET total_precio = total_precio + pb.cantidad * pb.precio / pb.base END IF END FOREACH LET cantidad_imp = sustituto1.cantidad - sustituto1.cantidad_r IF cantidad_imp <= 0 THEN LET sustituto1.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET sustituto1.cantidad = cantidad_imp SELECT c_flete, otros_g INTO fletes, otros_gastos FROM cotb00014 WHERE tipo=sustituto1.tipo AND num_oc=sustituto1.num_orden AND status_t IS NULL SELECT y.seguro INTO g_seguro FROM cotb00014 x, cotb00017 y WHERE x.tipo=sustituto1.tipo AND x.num_oc=sustituto1.num_orden AND x.via = y.via_t AND x.cod_pt = y.cod_pt AND y.cod_n = sustituto1.cod_n AND y.cod_grupo = sustituto1.cod_grupo AND y.cod_tipo = sustituto1.cod_tipo AND y.cod_sec = sustituto1.cod_sec AND y.status_t IS NULL SELECT gravamen INTO gravamenes FROM intb00002 WHERE cod_n = sustituto1.cod_n_s AND cod_grupo = sustituto1.cod_grupo_s AND cod_tipo = sustituto1.cod_tipo_s AND cod_sec = sustituto1.cod_sec_s AND status_t IS NULL LET cf = total_precio + fletes + otros_gastos LET cif = cf + (cf * g_seguro / 100) LET gravamenes = gravamenes / 100 LET porc_grav = porc_total_grav / 100 LET porc_rc = porc_total_rc / 100 LET porc1 = cif * gravamenes LET impuesto = ( porc1 + ( porc1 * porc_grav )) + ( 0.08 * ( porc1 + ( porc1 * porc_grav ) + cif )) + ( porc_rc * cif ) IF sustituto1.base = 0 OR sustituto1.base IS NULL THEN LET sustituto1.base = 1 END IF LET porc_precio = (sustituto1.cantidad * sustituto1.precio / sustituto1.base) / total_precio LET precio_mp = porc_precio * impuesto LET cf_mp = sustituto1.cantidad * sustituto1.precio / sustituto1.base+(porc_precio*(fletes+otros_gastos)) LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = sustituto1.cod_n_s LET oc[a].cod_grupo_se = sustituto1.cod_grupo_s LET oc[a].cod_tipo_se = sustituto1.cod_tipo_s LET oc[a].cod_sec_se = sustituto1.cod_sec_s LET oc[a].mes = mes_ini LET oc[a].num_orden = sustituto1.num_orden LET oc[a].fecha_ent = sustituto1.fecha_entrega LET oc[a].cantidad = sustituto1.cantidad LET oc[a].precio = cf_mp LET oc[a].impuesto = precio_mp LET oc[a].bandera = "O" LET cant_orden_mes = cant_orden_mes + sustituto1.cantidad END IF END IF END WHILE # Busca los reportes de entradas del mes para los sustitutos : LET idx_11 = 1 LET salir_m = "N" WHILE salir_m != "S" FETCH ABSOLUTE idx_11 material_sust INTO sustituto.* IF status = NOTFOUND THEN LET idx_11 = 1 LET salir_m = "N" EXIT WHILE END IF LET idx_11 = idx_11 + 1 IF sustituto.cod_n_s = mat_primas.cod_n AND sustituto.cod_grupo_s = mat_primas.cod_grupo AND sustituto.cod_tipo_s = mat_primas.cod_tipo AND sustituto.cod_sec_s = mat_primas.cod_sec THEN LET salir = "N" LET idx_10 = 1 WHILE salir != "S" FETCH ABSOLUTE idx_10 mvtos_mater INTO mvtos_mp.* IF STATUS = NOTFOUND THEN LET idx_10 = 1 LET salir = "N" EXIT WHILE END IF LET idx_10 = idx_10 + 1 IF sustituto.cod_n = mvtos_mp.cod_n AND sustituto.cod_grupo = mvtos_mp.cod_grupo AND sustituto.cod_tipo = mvtos_mp.cod_tipo AND sustituto.cod_sec = mvtos_mp.cod_sec AND (mvtos_mp.fecha_mov >= fecha1 AND mvtos_mp.fecha_mov < fecha2) THEN LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = sustituto.cod_n LET oc[a].cod_grupo_se = sustituto.cod_grupo LET oc[a].cod_tipo_se = sustituto.cod_tipo LET oc[a].cod_sec_se = sustituto.cod_sec LET oc[a].mes = mes_ini LET oc[a].num_orden = mvtos_mp.num_orden LET oc[a].fecha_ent = mvtos_mp.fecha_mov LET oc[a].cantidad = mvtos_mp.cantidad LET oc[a].precio = null LET oc[a].impuesto = null LET oc[a].bandera = "M" LET cant_orden_mes = cant_orden_mes + mvtos_mp.cantidad END IF END WHILE END IF END WHILE # Busca las ordenes de compras de los equivalentes para el mes "d" LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_e ordenes_equiv INTO equivale.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN LET idx_e = 1 LET salir = "S" EXIT WHILE END IF LET idx_e = idx_e + 1 IF equivale.cod_n = mat_primas.cod_n AND equivale.cod_grupo = mat_primas.cod_grupo AND equivale.cod_tipo = mat_primas.cod_tipo AND equivale.cod_sec = mat_primas.cod_sec AND equivale.mes = mes_ini THEN # Calcula el F.O.B. de la orden del material equivalente DECLARE precio_base3 CURSOR FOR SELECT a7.cod_n, a7.cod_grupo, a7.cod_tipo, a7.cod_sec, a7.cantidad, a7.precio, b7.base FROM cotb00015 a7, intb00002 b7 WHERE a7.num_oc=equivale.num_orden AND a7.cod_n=b7.cod_n AND a7.cod_grupo=b7.cod_grupo AND a7.cod_tipo=b7.cod_tipo AND a7.cod_sec = b7.cod_sec LET total_precio = 0 FOREACH precio_base3 INTO pb.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF status = NOTFOUND THEN EXIT FOREACH END IF IF pb.base = 0 or pb.base IS NULL THEN LET total_precio = total_precio + pb.cantidad * pb.precio END IF IF pb.base > 0 THEN LET total_precio = total_precio + pb.cantidad * pb.precio / pb.base END IF END FOREACH LET cantidad_imp = equivale.cantidad - equivale.cantidad_r IF cantidad_imp <= 0 THEN LET equivale.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET equivale.cantidad = cantidad_imp SELECT c_flete, otros_g INTO fletes, otros_gastos FROM cotb00014 WHERE tipo=equivale.tipo AND num_oc=equivale.num_orden AND status_t IS NULL SELECT y.seguro INTO g_seguro FROM cotb00014 x, cotb00017 y WHERE x.tipo=equivale.tipo AND x.num_oc=equivale.num_orden AND x.via = y.via_t AND x.cod_pt = y.cod_pt AND y.cod_n = equivale.cod_n AND y.cod_grupo = equivale.cod_grupo AND y.cod_tipo = equivale.cod_tipo AND y.cod_sec = equivale.cod_sec AND y.status_t IS NULL SELECT gravamen INTO gravamenes FROM intb00002 WHERE cod_n = equivale.cod_n_e AND cod_grupo = equivale.cod_grupo_e AND cod_tipo = equivale.cod_tipo_e AND cod_sec = equivale.cod_sec_e AND status_t IS NULL LET cf = total_precio + fletes + otros_gastos LET cif = cf + (cf * g_seguro / 100) LET gravamenes = gravamenes / 100 LET porc_grav = porc_total_grav / 100 LET porc_rc = porc_total_rc / 100 LET porc1 = cif * gravamenes LET impuesto = ( porc1 + ( porc1 * porc_grav )) + (0.08*(porc1+(porc1*porc_grav)+cif))+ (porc_rc*cif) IF equivale.base = 0 OR equivale.base IS NULL THEN LET equivale.base = 1 END IF IF total_precio = 0 OR total_precio IS NULL THEN LET total_precio = 1 END IF LET porc_precio = (equivale.cantidad * equivale.precio / equivale.base) / total_precio LET precio_mp = porc_precio * impuesto LET cf_mp = equivale.cantidad * equivale.precio / equivale.base + (porc_precio * (fletes + otros_gastos)) LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = equivale.cod_n_e LET oc[a].cod_grupo_se = equivale.cod_grupo_e LET oc[a].cod_tipo_se = equivale.cod_tipo_e LET oc[a].cod_sec_se = equivale.cod_sec_e LET oc[a].mes = mes_ini LET oc[a].num_orden = equivale.num_orden LET oc[a].fecha_ent = equivale.fecha_entrega LET oc[a].cantidad = equivale.cantidad LET oc[a].precio = cf_mp LET oc[a].impuesto = precio_mp LET oc[a].bandera = "O" LET cant_orden_mes = cant_orden_mes + equivale.cantidad END IF END IF END WHILE # Busca los reportes de entradas del mes de los equivalentes LET idx_11 = 1 LET salir_m = "N" WHILE salir_m != "S" FETCH ABSOLUTE idx_11 material_equiv INTO sustituto.* IF status = NOTFOUND THEN LET idx_11 = 1 LET salir_m = "N" EXIT WHILE END IF LET idx_11 = idx_11 + 1 IF sustituto.cod_n_s = mat_primas.cod_n AND sustituto.cod_grupo_s = mat_primas.cod_grupo AND sustituto.cod_tipo_s = mat_primas.cod_tipo AND sustituto.cod_sec_s = mat_primas.cod_sec THEN LET salir = "N" LET idx_10 = 1 WHILE salir != "S" FETCH ABSOLUTE idx_10 mvtos_mater INTO mvtos_mp.* IF STATUS = NOTFOUND THEN LET idx_10 = 1 LET salir = "N" EXIT WHILE END IF LET idx_10 = idx_10 + 1 IF sustituto.cod_n = mvtos_mp.cod_n AND sustituto.cod_grupo = mvtos_mp.cod_grupo AND sustituto.cod_tipo = mvtos_mp.cod_tipo AND sustituto.cod_sec = mvtos_mp.cod_sec AND (mvtos_mp.fecha_mov >= fecha1 AND mvtos_mp.fecha_mov < fecha2) THEN LET a = a + 1 LET oc[a].cod_n = mat_primas.cod_n LET oc[a].cod_grupo = mat_primas.cod_grupo LET oc[a].cod_tipo = mat_primas.cod_tipo LET oc[a].cod_sec = mat_primas.cod_sec LET oc[a].cod_n_se = sustituto.cod_n LET oc[a].cod_grupo_se = sustituto.cod_grupo LET oc[a].cod_tipo_se = sustituto.cod_tipo LET oc[a].cod_sec_se = sustituto.cod_sec LET oc[a].mes = mes_ini LET oc[a].num_orden = mvtos_mp.num_orden LET oc[a].fecha_ent = mvtos_mp.fecha_mov LET oc[a].cantidad = mvtos_mp.cantidad LET oc[a].precio = null LET oc[a].impuesto = null LET oc[a].bandera = "M" LET cant_orden_mes = cant_orden_mes + mvtos_mp.cantidad END IF END WHILE END IF END WHILE # Calcula el balance final de la materia prima para el mes "d" LET balan_fin = balan_ini - consumo_mes + cant_orden_mes LET fecha_agot_sin_oc = NULL LET fecha_agot_con_oc = NULL LET pto_reorden = NULL # Determina si hay o no agotamiento, sin tomar en cuenta la ordenes de compras IF calc_agot_sin_oc = "N" THEN LET agot_sin_oc = balan_ini_sin_oc - consumo_mes IF agot_sin_oc = 0 THEN LET mes_proceso = mes_ini IF dia_ini > 15 THEN LET mes_ini = mes_ini + 1 IF mes_ini > 12 THEN LET mes_ini = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes_ini LET mes_ini = mes_proceso IF mes_ini = 2 THEN LET fecha_agot_sin_oc = "28 ",nombre_mes ELSE LET fecha_agot_sin_oc = "30 ",nombre_mes END IF END IF IF agot_sin_oc < 0 THEN LET consumo_dia = consumo_mes / 30 IF consumo_dia > 0 THEN LET meses_llegada = balan_ini_sin_oc / consumo_dia END IF CALL redondear() LET dia_agotar = meses_llegada IF dia_agotar < 0 THEN LET dia_agotar = dia_agotar * -1 END IF IF dia_agotar = 0 THEN LET dia_agotar = 30 END IF LET mes_proceso = mes_ini IF dia_ini > 15 THEN LET mes_ini = mes_ini + 1 IF mes_ini > 12 THEN LET mes_ini = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes_ini LET mes_ini = mes_proceso IF dia_agotar > 28 AND mes_ini = 2 THEN LET dia_agotar = 28 END IF LET fecha_agot_sin_oc = dia_agotar using "&&"," ",nombre_mes END IF END IF # Determina si hay o no agotamiento, tomando en cuenta la ordenes de compras IF calc_agot_con_oc = "N" THEN LET agot_con_oc = balan_ini - consumo_mes + cant_orden_mes IF agot_con_oc = 0 THEN LET mes_proceso = mes_ini IF dia_ini > 15 THEN LET mes_ini = mes_ini + 1 IF mes_ini > 12 THEN LET mes_ini = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes_ini LET mes_ini = mes_proceso IF mes_ini = 2 THEN LET fecha_agot_con_oc = "28 ",nombre_mes ELSE LET fecha_agot_con_oc = "30 ",nombre_mes END IF END IF IF agot_con_oc < 0 THEN LET consumo_dia = consumo_mes / 30 IF consumo_dia > 0 THEN LET meses_llegada = balan_ini / consumo_dia END IF CALL redondear() LET dia_agotar = meses_llegada IF dia_agotar < 0 THEN LET dia_agotar = dia_agotar * -1 END IF IF dia_agotar = 0 THEN LET dia_agotar = 30 END IF LET mes_proceso = mes_ini IF dia_ini > 15 THEN LET mes_ini = mes_ini + 1 IF mes_ini > 12 THEN LET mes_ini = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes_ini LET mes_ini = mes_proceso IF dia_agotar > 28 AND mes_ini = 2 THEN LET dia_agotar = 28 END IF LET fecha_agot_con_oc = dia_agotar using "&&"," ",nombre_mes END IF IF agot_con_oc <= 0 THEN LET cdll = 0 SELECT dia_llegada INTO cdll FROM intb00002 WHERE cod_n = mat_primas.cod_n AND cod_grupo = mat_primas.cod_grupo AND cod_tipo = mat_primas.cod_tipo AND cod_sec = mat_primas.cod_sec AND status_t IS NULL IF cdll = 0 OR cdll IS NULL THEN CALL parada() RETURN END IF LET dias_llegada = cdll - dia_agotar LET meses_llegada = dias_llegada / 30 { IF dia_agotar <= 15 THEN LET meses_llegada = meses_llegada + 1 END IF } CALL redondear() CALL resta_meses() SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes_pedido LET pto_reorden = dia_agotar using "&&"," ",nombre_mes END IF END IF IF agot_sin_oc <= 0 THEN IF calc_agot_sin_oc = "N" THEN LET calc_agot_sin_oc = "S" ELSE LET fecha_agot_sin_oc = NULL END IF END IF IF agot_con_oc <= 0 THEN IF calc_agot_con_oc = "N" THEN LET calc_agot_con_oc = "S" ELSE LET fecha_agot_con_oc = NULL LET pto_reorden = NULL END IF END IF LET c = c + 1 LET bm[c].cod_n = mat_primas.cod_n LET bm[c].cod_grupo = mat_primas.cod_grupo LET bm[c].cod_tipo = mat_primas.cod_tipo LET bm[c].cod_sec = mat_primas.cod_sec LET bm[c].mes = mes_ini LET bm[c].balan_ini = balan_ini LET bm[c].consumo_mes = consumo_mes LET bm[c].balan_fin = balan_fin LET bm[c].agot1 = fecha_agot_sin_oc LET bm[c].agot2 = fecha_agot_con_oc LET bm[c].pto_reorden = pto_reorden LET mes_ini = mes_ini + 1 IF mes_ini = 13 THEN LET mes_ini = 1 END IF LET balan_ini = balan_fin # Calcula el balance final sin considerar las ordenes de compras LET balan_ini_sin_oc = balan_ini_sin_oc - consumo_mes END FOR LET a = 0 LET b = 0 LET c = 0 LET d = 0 OUTPUT TO REPORT proyeccion() END WHILE FINISH REPORT proyeccion RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT proyeccion() DEFINE comprimido_12_off CHAR(2), comprimido_12_on CHAR(2), comprimido_on CHAR(2), comprimido_off CHAR(2), doble_on CHAR(2), doble_off CHAR(2), negrillas_on CHAR(2), negrillas_off CHAR(2) OUTPUT LEFT MARGIN 6 TOP MARGIN 1 FORMAT PAGE HEADER LET negrillas_on = ASCII 27, ASCII 71 LET negrillas_off = ASCII 27, ASCII 72 LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET comprimido_on = ASCII 15 LET comprimido_off = ASCII 18 LET comprimido_12_on = ASCII 27, ASCII 77 LET comprimido_12_off = ASCII 27, ASCII 80 LET l = (147 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comprimido_on,negrillas_on COLUMN l, p_companias.nombre CLIPPED, PRINT COLUMN 3, "coprrp010", COLUMN 65, "SISTEMA DE COMPRAS", COLUMN 140, "Pag. ", pageno using "###" PRINT COLUMN 62, "DETALLE DE PROYECCIONES", COLUMN 140, today using "dd/mm/yy" PRINT COLUMN 61, "Del ", COLUMN 65, fecha_inicial_py using "dd/mmm/yy", COLUMN 73, " Al ", COLUMN 75, fecha_final_py using "dd/mmm/yy", COLUMN 140, time SKIP 2 LINES PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-------" PRINT COLUMN 52, "UNIDAD", COLUMN 84, "BALANCE", COLUMN 96, "FECHA DE AGOTA-", COLUMN 114, "FECHA DE AGOTA-", COLUMN 132, "FECHA DE" PRINT COLUMN 19, "MATERIAL", COLUMN 52, "MEDIDA", COLUMN 64, "TIPO", COLUMN 84, "INICIAL", COLUMN 96, "MIENTO SIN O.C.", COLUMN 114, "MIENTO CON O.C.", COLUMN 132, "REORDEN" PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-------", negrillas_on ON EVERY ROW IF total_registros = 6 THEN SKIP TO TOP OF PAGE LET total_registros = 0 END IF IF total_registros != 0 THEN SKIP 1 LINE END IF FOR c = 1 TO 100 IF bi[c].tipo IS NULL THEN EXIT FOR END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF bi[c].tipo = "P" THEN CALL buscar_agotamiento() LET bi[c].cod_n_se = bi[c].cod_n LET bi[c].cod_grupo_se = bi[c].cod_grupo LET bi[c].cod_tipo_se = bi[c].cod_tipo LET bi[c].cod_sec_se = bi[c].cod_sec END IF LET descrip3 = null LET unidad = null #INITIALIZE descrip3, unidad TO NULL SELECT descrip_esp, unidad_med INTO descrip3, unidad FROM intb00001 WHERE cod_n = bi[c].cod_n_se AND cod_grupo = bi[c].cod_grupo_se AND cod_tipo = bi[c].cod_tipo_se AND cod_sec = bi[c].cod_sec_se AND status_t IS NULL IF bi[c].tipo = "P" OR bi[c].tipo IS NULL THEN LET tipo_material = "Principal " ELSE IF bi[c].tipo = "S" THEN LET tipo_material = "Sustituto " ELSE IF bi[c].tipo = "E" THEN LET tipo_material = "Equivalente" END IF END IF END IF PRINT COLUMN 1, negrillas_on, COLUMN 5, bi[c].cod_n_se using "&", COLUMN 6, "-", COLUMN 7, bi[c].cod_grupo_se using "&", COLUMN 8, "-", COLUMN 9, bi[c].cod_tipo_se using "&&", COLUMN 11, "-", COLUMN 12, bi[c].cod_sec_se using "&&&", COLUMN 20, descrip3, COLUMN 55, unidad, COLUMN 63, tipo_material, COLUMN 79, bi[c].balan_ini using "---,---,--&.&&", COLUMN 98, mes_agot1, COLUMN 116, mes_agot2, COLUMN 134, mes_reorden LET dia_reord = mes_reorden[1,2] LET mes_reord = mes_reorden[4,13] INSERT INTO cotb00020 VALUES(fecha_inicial_py,fecha_final_py, bi[c].cod_n_se,bi[c].cod_grupo_se, bi[c].cod_tipo_se,bi[c].cod_sec_se, tipo_material,dia_reord,mes_reord) INITIALIZE mes_agot1, mes_agot2, mes_reorden,dia_reord,mes_reord TO NULL END FOR PRINT COLUMN 1, negrillas_off, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-------" LET mes_ini = MONTH(fecha_inicial_py) LET mes1 = 99 LET mes2 = 99 FOR c = 1 TO meses_py STEP 2 IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF total_registros = 6 THEN SKIP TO TOP OF PAGE LET total_registros = 0 END IF LET mes1 = mes_ini LET mes2 = mes_ini + 1 IF mes2 > 12 THEN LET mes2 = 1 END IF LET mes3 = mes1 CALL busca_posicion_inicio() LET posicion1 = mes3 LET mes3 = mes2 CALL busca_posicion_inicio() LET posicion2 = mes3 IF posicion1 = 0 THEN LET primera_vez1 = "N" ELSE LET primera_vez1 = "S" END IF IF posicion2 = 0 THEN LET primera_vez2 = "N" ELSE LET primera_vez2 = "S" END IF # IF bm[c].consumo_mes != 0 THEN IF mes1 !=0 THEN LET mes_proceso = mes1 IF dia_ini > 15 THEN LET mes1 = mes1 + 1 IF mes1 > 12 THEN LET mes1 = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes1 LET mes1 = mes_proceso SELECT UNIQUE fecha_ini, fecha_fin INTO fecha1, fecha2 FROM cotb00026 WHERE rango_plan = rango_p AND MONTH(fecha_ini) = mes1 PRINT COLUMN 1, "| MES: ", COLUMN 8, negrillas_on, COLUMN 10, nombre_mes, COLUMN 21, negrillas_off, COLUMN 28, "DEL ", COLUMN 32, fecha1 using "dd/mm/yy", COLUMN 40, " AL ", COLUMN 44, fecha2 using "dd/mm/yy", COLUMN 78, "|"; END IF # IF bm[c + 1].consumo_mes != 0 THEN IF mes2 !=0 THEN LET mes_proceso = mes2 IF dia_ini > 15 THEN LET mes2 = mes2 + 1 IF mes2 > 12 THEN LET mes2 = 1 END IF END IF SELECT descrip INTO nombre_mes FROM mestable WHERE mes = mes2 LET mes2 = mes_proceso SELECT UNIQUE fecha_ini, fecha_fin INTO fecha1, fecha2 FROM cotb00026 WHERE rango_plan = rango_p AND MONTH(fecha_ini) = mes2 PRINT COLUMN 80, "MES: ", COLUMN 85, negrillas_on, COLUMN 87, nombre_mes, COLUMN 97, negrillas_off, COLUMN 107, "DEL ", COLUMN 111, fecha1 using "dd/mm/yy", COLUMN 119, " AL ", COLUMN 123, fecha2 using "dd/mm/yy", COLUMN 155, "|" ELSE PRINT COLUMN 151, "|" END IF # IF bm[c].consumo_mes != 0 THEN IF mes1 !=0 THEN PRINT COLUMN 1, "| BALANCE AL INICIO: ", COLUMN 22, bm[c].balan_ini using "---,---,--&.&&", COLUMN 39, "CONSUMO PROYECTADO:", COLUMN 59, bm[c].consumo_mes using "---,---,--&.&&", COLUMN 74, "|"; END IF # IF bm[c + 1].consumo_mes != 0 THEN IF mes2 !=0 THEN PRINT COLUMN 76, "BALANCE AL INICIO: ", COLUMN 95, bm[c + 1 ].balan_ini using "---,---,--&.&&", COLUMN 112, "CONSUMO PROYECTADO:", COLUMN 132, bm[c + 1 ].consumo_mes using "---,---,--&.&&", COLUMN 147, "|" PRINT COLUMN 1, "|", COLUMN 74, "|", COLUMN 147, "|" ELSE PRINT COLUMN 147, "|" PRINT COLUMN 1, "|", COLUMN 74, "|", COLUMN 147, "|" END IF LET cantidad1 = 0 LET cantidad2 = 0 WHILE oc[posicion1].mes = mes1 OR oc[posicion2].mes = mes2 IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF primera_vez1 = "S" THEN IF posicion1 != 0 THEN IF oc[posicion1].mes = mes1 THEN PRINT COLUMN 1, "|", COLUMN 4, "ORDEN", COLUMN 12, "MATERIAL", COLUMN 29, "CANTIDAD", COLUMN 47, " C & F", COLUMN 61, "IMPUESTO", COLUMN 70, "DIA", COLUMN 74, "|"; LET primera_vez1 = "N" IF posicion2 = 0 THEN PRINT COLUMN 147, "|" END IF ELSE PRINT COLUMN 1, "|", COLUMN 74, "|"; END IF ELSE PRINT COLUMN 1, "|", COLUMN 74, "|"; END IF END IF IF primera_vez2 = "S" THEN IF posicion2 != 0 THEN IF oc[posicion2].mes = mes2 THEN IF posicion1 = 0 THEN PRINT COLUMN 1, "|", COLUMN 74, "|"; END IF PRINT COLUMN 77, "ORDEN", COLUMN 85, "MATERIAL", COLUMN 102, "CANTIDAD", COLUMN 120, " C & F", COLUMN 134, "IMPUESTO", COLUMN 143, "DIA", COLUMN 147, "|" LET primera_vez2 = "N" ELSE PRINT COLUMN 147, "|" END IF ELSE PRINT COLUMN 147, "|" END IF END IF IF posicion1 != 0 THEN IF oc[posicion1].mes = mes1 THEN IF oc[posicion1].cod_n_se = 0 OR oc[posicion1].cod_n_se IS NULL THEN LET oc[posicion1].cod_n_se = oc[posicion1].cod_n LET oc[posicion1].cod_grupo_se = oc[posicion1].cod_grupo LET oc[posicion1].cod_tipo_se = oc[posicion1].cod_tipo LET oc[posicion1].cod_sec_se = oc[posicion1].cod_sec END IF PRINT COLUMN 1, "|", COLUMN 3, oc[posicion1].num_orden, COLUMN 11, oc[posicion1].cod_n_se using "&", COLUMN 12, "-", COLUMN 13, oc[posicion1].cod_grupo_se using "&", COLUMN 14, "-", COLUMN 15, oc[posicion1].cod_tipo_se using "&&", COLUMN 17, "-", COLUMN 18, oc[posicion1].cod_sec_se using "&&&", COLUMN 23, oc[posicion1].cantidad using "---,---,--&.&&", COLUMN 39, oc[posicion1].precio using "---,---,--&.&&", COLUMN 55, oc[posicion1].impuesto using "---,---,--&.&&", COLUMN 71, DAY(oc[posicion1].fecha_ent) using "&&", COLUMN 74, "|"; IF oc[posicion1].bandera = "O" THEN LET cantidad1 = cantidad1 + oc[posicion1].cantidad END IF ELSE PRINT COLUMN 1, "|", COLUMN 74, "|"; END IF ELSE PRINT COLUMN 1, "|", COLUMN 74, "|"; END IF IF posicion2 != 0 THEN IF oc[posicion2].mes = mes2 THEN IF oc[posicion2].cod_n_se = 0 OR oc[posicion2].cod_n_se IS NULL THEN LET oc[posicion2].cod_n_se = oc[posicion2].cod_n LET oc[posicion2].cod_grupo_se = oc[posicion2].cod_grupo LET oc[posicion2].cod_tipo_se = oc[posicion2].cod_tipo LET oc[posicion2].cod_sec_se = oc[posicion2].cod_sec END IF PRINT COLUMN 76, oc[posicion2].num_orden, COLUMN 84, oc[posicion2].cod_n_se using "&", COLUMN 85, "-", COLUMN 86, oc[posicion2].cod_grupo_se using "&", COLUMN 87, "-", COLUMN 88, oc[posicion2].cod_tipo_se using "&&", COLUMN 90, "-", COLUMN 91, oc[posicion2].cod_sec_se using "&&&", COLUMN 96, oc[posicion2].cantidad using "---,---,--&.&&", COLUMN 112, oc[posicion2].precio using "---,---,--&.&&", COLUMN 128, oc[posicion2].impuesto using "---,---,--&.&&", COLUMN 144, DAY(oc[posicion2].fecha_ent) using "&&", COLUMN 147, "|" IF oc[posicion2].bandera = "O" THEN LET cantidad2 = cantidad2 + oc[posicion2].cantidad END IF ELSE PRINT COLUMN 147, "|" END IF ELSE PRINT COLUMN 147, "|" END IF IF posicion1 != 0 THEN LET posicion1 = posicion1 + 1 END IF IF posicion2 != 0 THEN LET posicion2 = posicion2 + 1 END IF END WHILE LET mes_ini = mes_ini + 2 IF mes_ini = 13 THEN LET mes_ini = 1 END IF IF mes_ini = 14 THEN LET mes_ini = 2 END IF PRINT COLUMN 1, "|", COLUMN 74, "|", COLUMN 147, "|" # IF bm[c].consumo_mes != 0 THEN IF mes1 !=0 THEN PRINT COLUMN 1, "|", COLUMN 3, "CANTIDAD A LLEGAR: ", COLUMN 22, cantidad1 using "---,---,--&.&&", COLUMN 39, "BALANCE FINAL MES: ", COLUMN 59, bm[c].balan_fin using "---,---,--&.&&", COLUMN 74, "|"; END IF # IF bm[c + 1].consumo_mes != 0 THEN IF mes2 !=0 THEN PRINT COLUMN 76, "CANTIDAD A LLEGAR: ", COLUMN 95, cantidad2 using "---,---,--&.&&", COLUMN 112, "BALANCE FINAL MES: ", COLUMN 132, bm[c + 1].balan_fin using "---,---,--&.&&", COLUMN 147, "|" ELSE PRINT COLUMN 147, "|" END IF PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-------" LET total_registros = total_registros + 1 END FOR FOR d = 1 TO 100 IF ( bi[d].tipo = " " OR bi[d].tipo IS NULL ) AND ( oc[d].mes = 0 OR oc[d].mes IS NULL ) AND ( bm[d].mes = 0 OR bm[d].mes IS NULL ) THEN EXIT FOR END IF IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF INITIALIZE bi[d].cod_n, bi[d].cod_grupo, bi[d].cod_tipo, bi[d].cod_sec, bi[d].cod_n_se, bi[d].cod_grupo_se, bi[d].cod_tipo_se, bi[d].cod_sec_se, bi[d].tipo, bi[d].balan_ini, oc[d].cod_n, oc[d].cod_grupo, oc[d].cod_tipo, oc[d].cod_sec, oc[d].cod_n_se, oc[d].cod_grupo_se, oc[d].cod_tipo_se, oc[d].cod_sec_se, oc[d].mes, oc[d].num_orden, oc[d].fecha_ent, oc[d].cantidad, oc[d].precio, oc[d].impuesto, bm[d].cod_n, bm[d].cod_grupo, bm[d].cod_tipo, bm[d].cod_sec, bm[d].mes, bm[d].balan_ini, bm[d].consumo_mes, bm[d].balan_fin, bm[d].agot1, bm[d].agot2, bm[d].pto_reorden TO NULL END FOR LET a = 0 LET b = 0 LET c = 0 LET d = 0 ON LAST ROW PRINT COLUMN 1, comprimido_12_off END REPORT FUNCTION busca_posicion_inicio() # Esta funcion localiza la posicion a partir de la cual debe comenzar a leer # para fines de impresion, las ordenes de compras para un mes x. LET posicion = 1 FOR d = 1 TO 100 IF oc[d].mes = mes3 THEN LET posicion = d EXIT FOR END IF END FOR LET mes3 = posicion RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION parada() LET materia_prima = mat_primas.cod_n using "&","-", mat_primas.cod_grupo using "&","-", mat_primas.cod_tipo using "&&","-", mat_primas.cod_sec using "&&&" DISPLAY "La materia prima " AT 18,26 DISPLAY materia_prima AT 18,43 DISPLAY "no tiene dias de llegada. Programa ha sido cancelado" AT 19,14 DISPLAY "Presione para finalizar" AT 20,24 PROMPT " " FOR parar RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION resta_meses() #Esta funcion resta una cantidad de meses a un mes dado LET mes_pedido = mes_ini FOR idx = 1 TO meses_llegada LET mes_pedido = mes_pedido - 1 IF mes_pedido = 0 THEN LET mes_pedido = 12 END IF END FOR RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION redondear() #Esta funcion lleva una cantidad de meses con decimales a una cantidad de meses #sin decimales, es decir, redondeado a un numero entero LET mes_entero = meses_llegada LET mes_decimal = meses_llegada - mes_entero IF mes_decimal > 0.49 THEN LET mes_entero = mes_entero + 1 END IF LET meses_llegada = mes_entero RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION buscar_agotamiento() # Esta funcion busca el mes de agotamiento sin y con ordenes de compra y el # mes de reorden del material principal INITIALIZE mes_agot1, mes_agot2, mes_reorden TO NULL FOR d = 1 TO 100 IF bm[d].cod_n = 0 OR bm[d].cod_n IS NULL THEN EXIT FOR END IF IF bm[d].agot1 IS NOT NULL THEN LET mes_agot1 = bm[d].agot1 END IF IF bm[d].agot2 IS NOT NULL THEN LET mes_agot2 = bm[d].agot2 END IF IF bm[d].pto_reorden IS NOT NULL THEN LET mes_reorden = bm[d].pto_reorden END IF END FOR LET d = 0 RUN "type C:\\archivo > %USPRINT%" END FUNCTION