2314 lines
93 KiB
Plaintext
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
|
|
|