Files
MBS/PROYECTO/codir/coprrp010.4gl
T

2314 lines
93 KiB
Plaintext

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