{ ------------------------------------------------------------------ PROGRAMA : COPRRP011 OBJETIVO : Reporte Resumido de Proyecciones PROGRAMADOR : Lic. Abner Montalvo Z. FECHA REALIZACION : Septiembre 19, 1992. ------------------------------------------------------------------ } 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), 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) 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), balance_inicial_periodo DECIMAL(13,4), consumo_periodo DECIMAL(13,4), ordenes_periodo DECIMAL(13,4), balance_final_periodo 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 s_sustituto 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, fecha_entrega DATE, cantidad DECIMAL(13,4), cantidad_r DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE p_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, fecha_entrega DATE, cantidad DECIMAL(13,4), cantidad_r DECIMAL(13,4), precio DECIMAL(13,4), base DECIMAL(13,4) END RECORD DEFINE ordenesss RECORD cod_n_se SMALLINT, cod_grupo_se SMALLINT, cod_tipo_se SMALLINT, cod_sec_se SMALLINT, mes SMALLINT, num_orden SMALLINT, 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, j, 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 coprrp011() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM coprrp011 FROM "cofmrp011" DISPLAY FORM coprrp011 CALL pantalla() DISPLAY "coprrp011" AT 4,3 DISPLAY "Resumen de Proyecciones" AT 6,28 LET tipo_papel = 2 CALL msgrp000(tipo_papel) CALL copcrp011() RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION copcrp011() LET int_flag = FALSE 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 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 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 el Plan de Produccion " AT 15,16 ATTRIBUTE (REVERSE, YELLOW) DISPLAY " Por Favor, Espere ... " AT 16,28 ATTRIBUTE (REVERSE, YELLOW) # Funcion que actualiza las cantidades parciales con lo recibido # CALL cofurp001() START REPORT proyeccion2 TO "C:\\archivo" LET a = 0 LET b = 0 LET c = 0 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 p_equivalentes" AT 18,15 PREPARE busca_p_equivale FROM select_e DECLARE material_equiv SCROLL CURSOR FOR busca_p_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, ", "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 ", "e2.cod_n = a2.cod_n AND ", "e2.cod_grupo = a2.cod_grupo AND ", "e2.cod_tipo = a2.cod_tipo AND ", "e2.cod_sec = a2.cod_sec AND ", "a2.num_req = x.num_req AND ", "a2.num_oc = x.num_oc AND ", "x.num_oc = f2.num_oc AND ", "d2.status_t IS NULL AND ", "c2.rango_plan = ? AND ", "f2.cierre = 'N' AND ", "a2.fech_ent between c2.fecha_ini AND ", "c2.fecha_fin ", " 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, ", "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 ", "c3.rango_plan = ? AND ", "f3.cierre = 'N' AND ", "d3.status_t IS NULL AND ", "a3.fech_ent between c3.fecha_ini AND ", "c3.fecha_fin ", "ORDER BY 1,2,3,4,10,11 " DISPLAY " Estoy buscando las ordenes de compras de los p_equivalentes " AT 18,10 PREPARE p_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 p_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, ", "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 ", "x.num_oc = f1.num_oc AND ", "f1.cierre = 'N' AND ", "c1.rango_plan = ? AND ", "a1.fech_ent between c1.fecha_ini AND ", " c1.fecha_fin ", " 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 salir1 = "S" LET balances.balan_corte = 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" 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 = balances.balan_corte LET balan_ini = balan_ini + balances.balan_corte END IF IF salir1 = "S" THEN LET idx_s = 1 EXIT WHILE END IF END WHILE # Busca materiales p_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 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 salir1 = "S" EXIT WHILE 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 salir1 = "S" LET balances.balan_corte = 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" 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 = balances.balan_corte LET balan_ini = balan_ini + balances.balan_corte END IF IF salir1 = "S" THEN LET idx_e = 1 LET salir1 = "S" EXIT WHILE 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 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 ordenesss.* 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 ordenesss.cod_n_se = mat_primas.cod_n AND ordenesss.cod_grupo_se = mat_primas.cod_grupo AND ordenesss.cod_tipo_se = mat_primas.cod_tipo AND ordenesss.cod_sec_se = mat_primas.cod_sec AND ordenesss.mes = mes_ini THEN LET cantidad_imp = ordenesss.cantidad - ordenesss.cantidad_r IF cantidad_imp <= 0 THEN LET ordenesss.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET ordenesss.cantidad = cantidad_imp 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 = ordenesss.num_orden LET oc[a].fecha_ent = ordenesss.fecha_entrega LET oc[a].cantidad = ordenesss.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 + ordenesss.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 s_sustituto.* 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 s_sustituto.cod_n = mat_primas.cod_n AND s_sustituto.cod_grupo = mat_primas.cod_grupo AND s_sustituto.cod_tipo = mat_primas.cod_tipo AND s_sustituto.cod_sec = mat_primas.cod_sec AND s_sustituto.mes = mes_ini THEN LET cantidad_imp = s_sustituto.cantidad - s_sustituto.cantidad_r IF cantidad_imp <= 0 THEN LET s_sustituto.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET s_sustituto.cantidad = cantidad_imp 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 = s_sustituto.cod_n_s LET oc[a].cod_grupo_se = s_sustituto.cod_grupo_s LET oc[a].cod_tipo_se = s_sustituto.cod_tipo_s LET oc[a].cod_sec_se = s_sustituto.cod_sec_s LET oc[a].mes = mes_ini LET oc[a].num_orden = s_sustituto.num_orden LET oc[a].fecha_ent = s_sustituto.fecha_entrega LET oc[a].cantidad = s_sustituto.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 + s_sustituto.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 p_equivalentes para el mes "d" LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_e ordenes_equiv INTO p_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 p_equivale.cod_n = mat_primas.cod_n AND p_equivale.cod_grupo = mat_primas.cod_grupo AND p_equivale.cod_tipo = mat_primas.cod_tipo AND p_equivale.cod_sec = mat_primas.cod_sec AND p_equivale.mes = mes_ini THEN LET cantidad_imp = p_equivale.cantidad - p_equivale.cantidad_r IF cantidad_imp <= 0 THEN LET p_equivale.cantidad = 0 END IF IF cantidad_imp > 0 THEN LET p_equivale.cantidad = cantidad_imp 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 = p_equivale.cod_n_e LET oc[a].cod_grupo_se = p_equivale.cod_grupo_e LET oc[a].cod_tipo_se = p_equivale.cod_tipo_e LET oc[a].cod_sec_se = p_equivale.cod_sec_e LET oc[a].mes = mes_ini LET oc[a].num_orden = p_equivale.num_orden LET oc[a].fecha_ent = p_equivale.fecha_entrega LET oc[a].cantidad = p_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 + p_equivale.cantidad END IF END IF END WHILE # Busca los reportes de entradas del mes de los p_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 LET meses_llegada = balan_ini_sin_oc / consumo_dia 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 LET meses_llegada = balan_ini / consumo_dia 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 proyeccion2() END WHILE FINISH REPORT proyeccion2 RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT proyeccion2() DEFINE comprimido_12_on, comprimido_12_off, negrillas_on, negrillas_off, comprimido_on, comprimido_off, doble_on, doble_off CHAR(2) OUTPUT LEFT MARGIN 0 TOP MARGIN 1 BOTTOM MARGIN 3 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 comprimido_12_on = ASCII 27, ASCII 77 LET comprimido_12_off = ASCII 27, ASCII 80 LET l = (163 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comprimido_on, negrillas_on PRINT COLUMN 1, "coprrp011", COLUMN l, p_companias.nombre CLIPPED, COLUMN 156, "Pag. ", pageno using "###" PRINT COLUMN 76, "SISTEMA DE COMPRAS", COLUMN 156, today using "dd/mm/yy" PRINT COLUMN 73, "RESUMEN DE PROYECCIONES" PRINT COLUMN 72, "Del ", COLUMN 76, fecha_inicial_py using "dd/mmm/yy", COLUMN 84, " Al ", COLUMN 88, fecha_final_py using "dd/mmm/yy", COLUMN 156, time SKIP 2 LINES PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------" PRINT COLUMN 43, "UNIDAD", COLUMN 68, "BALANCE", COLUMN 81, "ORDENES", COLUMN 95, "CONSUMO", COLUMN 109, "BALANCE", COLUMN 119, "FECHA AGOTA-", COLUMN 135, "FECHA AGOTA-", COLUMN 150, "FECHA" PRINT COLUMN 14, "MATERIAL", COLUMN 43, "MEDIDA", COLUMN 51, "TIPO", COLUMN 68, "INICIAL", COLUMN 81, "PERIODO", COLUMN 95, "PERIODO", COLUMN 110, "FINAL", COLUMN 119, "MIENTO SIN OC", COLUMN 135, "MIENTO CON OC", COLUMN 150, "REORDEN" PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------", negrillas_off LET a = 0 LET b = 0 LET c = 0 LET d = 0 ON EVERY ROW LET balance_inicial_periodo = 0 FOR c = 1 TO 100 IF bi[c].cod_n = 0 OR bi[c].cod_n 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 LET consumo_periodo = 0 LET ordenes_periodo = 0 INITIALIZE descrip3, unidad, mes_agot1, mes_agot2, mes_reorden, balance_final_periodo TO NULL IF bi[c].tipo = "P" THEN CALL buscar_datos_bm() CALL buscar_ordenes() 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 LET balance_final_periodo = bm[meses_py].balan_fin ELSE INITIALIZE consumo_periodo, ordenes_periodo TO NULL END IF 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 2, bi[c].cod_n_se using "&", COLUMN 3, "-", COLUMN 4, bi[c].cod_grupo_se using "&", COLUMN 5, "-", COLUMN 6, bi[c].cod_tipo_se using "&&", COLUMN 8, "-", COLUMN 9, bi[c].cod_sec_se using "&&&", COLUMN 13, descrip3, COLUMN 45, unidad, COLUMN 50, tipo_material, COLUMN 62, bi[c].balan_ini using "---,---,--&.&&", COLUMN 76, ordenes_periodo using "---,---,--&.&&", COLUMN 90, consumo_periodo using "---,---,--&.&&", COLUMN 104, balance_final_periodo using "---,---,--&.&&", COLUMN 119, mes_agot1, COLUMN 135, mes_agot2, COLUMN 150, mes_reorden END FOR PRINT COLUMN 1, "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------------------", "-----------------------" SKIP 1 LINES 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 END REPORT FUNCTION buscar_datos_bm() # Esta funcion busca el mes de agotamiento sin y con ordenes de compra y el # mes de reorden del material principal y ademas calcula el consumo del periodo # de la materia prima principal FOR d = 1 TO meses_py 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 LET consumo_periodo = consumo_periodo + bm[d].consumo_mes END FOR LET d = 0 RUN "type C:\\archivo > %USPRINT%" END FUNCTION FUNCTION buscar_ordenes() FOR j = 1 TO 100 IF oc[j].cod_n IS NULL OR oc[j].cod_n = 0 THEN EXIT FOR END IF LET ordenes_periodo = ordenes_periodo + oc[j].cantidad END FOR RUN "type C:\\archivo > %USPRINT%" END FUNCTION