Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md

This commit is contained in:
2026-08-18 20:59:52 -04:00
commit 454973e269
5978 changed files with 2664094 additions and 0 deletions
+849
View File
@@ -0,0 +1,849 @@
{
-------------------------------------------------------------------------------
PROGRAMA : INPRRP042
OBJETIVO : REPORTE DIAS DE PRODUCCION CON ORDENES
PROGRAMADOR : Ing. Juan Francisco Soto
FECHA REALIZACION : Febrero 11, 1997
-------------------------------------------------------------------------------
}
GLOBALS "inprgb000.4gl"
DEFINE sale CHAR(1)
DEFINE p_ano CHAR(4)
DEFINE codigo_act CHAR(10)
DEFINE cons_prom_k,cons_prom,costo_e DECIMAL(12,4)
# Variable que se incrementa para imprimir el arreglo
DEFINE i SMALLINT
# Arreglo Para los equivalentes
DEFINE equivalentes ARRAY[1000] OF RECORD
codigo_p CHAR(10),
descrip_p CHAR(30),
unidad_p CHAR(3),
existe_p DECIMAL(12,2),
consumo_p DECIMAL(12,2),
dia_llegada_p SMALLINT,
fecha_p DATE,
num_oc_p INTEGER,
cantidad_p DECIMAL(12,2),
costo_p DECIMAL(12,4),
codigo_e CHAR(10),
descrip_e CHAR(30),
unidad_e CHAR(4),
existe_e DECIMAL(12,2),
consumo_e DECIMAL(12,2),
dia_llegada_e SMALLINT,
costo_e DECIMAL(12,4),
fecha_e DATE,
num_oc_e INTEGER,
cantidad_e DECIMAL(12,2)
END RECORD
DEFINE valor1 DECIMAL(12,2)
FUNCTION inprrp042()
# Variable que toma el valor de los dias que se va a valorar el reporte
# Variables varias para el control de busqueda de las informaciones
DEFINE selec1,selec2,selec3,select_bal CHAR(1000)
DEFINE mes CHAR(2)
DEFINE tiene,salir,primera CHAR(1)
DEFINE idx_3,idx_1,idx_b SMALLINT
DEFINE dias1 SMALLINT
# Record para la validacion de los equivalente
DEFINE equivale RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
cod_n_e LIKE intb00001.cod_n,
cod_grupo_e LIKE intb00001.cod_grupo,
cod_tipo_e LIKE intb00001.cod_tipo,
cod_sec_e LIKE intb00001.cod_sec,
descrip_e LIKE intb00001.descrip_esp,
unidad_e CHAR(34),
existe_e DECIMAL(12,2),
consumo_e DECIMAL(12,2),
dia_llegada_e INTEGER
END RECORD
# Record para la validacion de los costos del material
DEFINE costo RECORD
mes1 CHAR(2),
mes2 CHAR(2),
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
costo_st LIKE intb00013.costo_st
END RECORD
# Record para el consumo de los materiales
DEFINE consume RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
consumo DECIMAL(14,2)
END RECORD
# Record para la impresion del reporte, estas variables se validan con el
# select que esta en la variable selec
DEFINE estadis RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
dia_llegada LIKE intb00002.dia_llegada,
consumo LIKE intb00006.cantidad_1,
existe LIKE intb00002.existencia,
valor DECIMAL(12,4),
costo DECIMAL(12,4),
dias INTEGER ,
fecha_llegada DATE,
cantidad DECIMAL(12,2),
num_oc INTEGER,
p_cons_prom DECIMAL(12,2)
END RECORD
# Record para las existencia de la materia prima
DEFINE balances RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
balance LIKE intb00006.cantidad_2
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM infmrp042 FROM "infmrp004"
DISPLAY FORM infmrp042
CALL pantalla()
DISPLAY "inprrp042" AT 4,3
DISPLAY "Dias de Produccion " AT 6,30
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi
AFTER FIELD fech_in
IF datos_cons.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER FIELD fech_fi
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET dias1 = datos_cons.fech_fi - datos_cons.fech_in
LET dias1 = dias1 + 1
LET p_ano = year(datos_cons.fech_fi)
CONSTRUCT criterio ON b.cod_n,b.cod_grupo,b.cod_tipo,b.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
# Busqueda de los equivalentes
LET selec2 =
"SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,b.cod_n_e,b.cod_grupo_e,",
" b.cod_tipo_e,b.cod_sec_e ",
"FROM intb00004 b ",
"WHERE b.status_t is null and ",criterio clipped,
"UNION ",
"SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,b.cod_n_s,b.cod_grupo_s,",
" b.cod_tipo_s,b.cod_sec_s ",
"FROM intb00003 b ",
"WHERE b.status_t is null and ",criterio clipped," ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Equivalentes... Espere>>" AT 19,14
PREPARE comando1 FROM selec2
DECLARE busca1 SCROLL CURSOR FOR comando1
OPEN busca1
# Busqueda de los costos de los materiales
LET selec1 =
"SELECT b.mes_ini,max(b.mes_fin),b.cod_n,b.cod_grupo,b.cod_tipo, ",
" b.cod_sec,b.costo_st ",
"FROM intb00013 b ",
"WHERE ",criterio clipped," and ano = ? ",
"GROUP BY 1,3,4,5,6,7 ORDER BY 3,4,5,6"
DISPLAY "<< Estoy Buscando Costos... Espere >>" AT 19,14
PREPARE comando FROM selec1
DECLARE busca3 SCROLL CURSOR FOR comando
OPEN busca3 USING p_ano
LET select_bal =
"SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,sum(b.cantidad_2) ",
"FROM intb00006 b ",
"WHERE ", criterio clipped," and b.status_t is null and b.fecha <= ? ",
"GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
DISPLAY "<< Estoy Buscando Balances Iniciales >>" AT 19,14
PREPARE busca_balan FROM select_bal
DECLARE material_bal SCROLL CURSOR FOR busca_balan
OPEN material_bal USING datos_cons.fech_fi
LET SELEC =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med,b.dia_llegada ",
"FROM intb00001 a,intb00002 b ",
"WHERE ",criterio clipped," AND a.cod_n = b.cod_n AND ",
" a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND ",
" a.cod_sec = b.cod_sec AND a.status_t is null ",
"GROUP BY 1,2,3,4,5,6,7 ORDER BY 1,2,3,4"
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion
LET selec3 =
"SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,sum(b.cantidad_2) ",
"FROM intb00006 b ",
"WHERE ",criterio clipped," AND b.status_t is null AND ",
" b.fecha between ? AND ? AND b.cod_mov = 36 ",
"GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"
DISPLAY "<< Buscando Consumo Material... Por Favor Espere >>"
AT 19,14 ATTRIBUTE (REVERSE)
PREPARE comando2 FROM selec3
DECLARE consu SCROLL CURSOR FOR comando2
OPEN consu USING datos_cons.fech_in,datos_cons.fech_fi
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT estadis_oc TO "C:\\archivo"
# Loop principal para la busqueda de la materia prima y el consumo
LET idx = 1
LET salir = "N"
WHILE salir != "S"
FETCH accion INTO estadis.*
IF status = notfound THEN
LET salir = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET estadis.consumo = 0
LET estadis.existe = 0
LET estadis.valor = 0
LET estadis.costo = 0
# Busca el primer registro del record consume
#FETCH FIRST consu INTO consume.*
LET idx_b = 1
LET sale = "N"
WHILE sale != "S"
FETCH ABSOLUTE idx_b consu INTO consume.*
IF status = notfound THEN
LET sale = "S"
EXIT WHILE
END IF
LET idx_b = idx_b + 1
IF consume.cod_n = estadis.cod_n AND
consume.cod_grupo = estadis.cod_grupo AND
consume.cod_Tipo = estadis.cod_tipo AND
consume.cod_sec = estadis.cod_sec THEN
LET estadis.consumo = consume.consumo
LET sale = "S"
LET idx_b = 1
EXIT WHILE
END IF
END WHILE
# Chequea que el codigo buscado no este como equivalente en el arreglo
LET codigo_act = estadis.cod_n using "&","-",
estadis.cod_grupo using "&","-",
estadis.cod_tipo using "&&","-",
estadis.cod_sec using "&&&"
IF estadis.consumo IS NULL THEN
LET estadis.consumo = 0
END IF
LET tiene = "N"
FOR i = 1 TO idx
IF codigo_act = equivalentes[i].codigo_e THEN
LET tiene = "N"
CONTINUE WHILE
END IF
END FOR
# Loop para busqueda del balance de la materia prima
LET salir = "N"
LET Idx_b = 1
WHILE salir != "S"
FETCH ABSOLUTE idx_b material_bal 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 = estadis.cod_n AND
balances.cod_grupo = estadis.cod_grupo AND
balances.cod_tipo = estadis.cod_tipo AND
balances.cod_sec = estadis.cod_sec THEN
IF balances.balance IS NULL THEN
LET balances.balance = 0
END IF
LET estadis.existe = balances.balance
LET salir = "S"
LET idx_b = 1
EXIT WHILE
END IF
END WHILE
# Busqueda del costo del material
LET salir = "N"
LET idx_1 = 1
WHILE salir != "S"
FETCH ABSOLUTE idx_1 busca3 INTO costo.*
IF status = notfound THEN
LET idx_1 = 1
LET salir = "S"
EXIT WHILE
END IF
LET idx_1 = idx_1 + 1
IF costo.cod_n = estadis.cod_n AND
costo.cod_grupo = estadis.cod_grupo AND
costo.cod_tipo = estadis.cod_tipo AND
costo.cod_sec = estadis.cod_sec THEN
LET estadis.costo = costo.costo_st
LET idx_1 = 1
LET salir = "S"
EXIT WHILE
END IF
END WHILE
# Busqueda de los equivalentes
LET salir = "N"
LET idx_3 = 1
WHILE salir != "S"
FETCH ABSOLUTE idx_3 busca1 INTO equivale.*
IF status = notfound THEN
LET idx_3 = 1
LET salir = "S"
EXIT WHILE
END IF
LET idx_3 = idx_3 + 1
LET equivale.descrip_e = null
LET equivale.unidad_e = null
LET equivale.consumo_e = 0
LET equivale.existe_e = 0
LET costo_e = 0
DISPLAY estadis.cod_grupo at 20,20
DISPLAY estadis.cod_tipo at 20,30
DISPLAY estadis.cod_sec at 20,40
DISPLAY equivale.cod_grupo at 21,20
DISPLAY equivale.cod_tipo at 21,30
DISPLAY equivale.cod_sec at 21,40
#sleep 4
IF equivale.cod_n = estadis.cod_n AND
equivale.cod_grupo = estadis.cod_grupo AND
equivale.cod_tipo = estadis.cod_tipo AND
equivale.cod_sec = estadis.cod_sec THEN
SELECT a.descrip_esp,a.unidad_med,b.dia_llegada
INTO equivale.descrip_e,equivale.unidad_e,equivale.dia_llegada_e
FROM intb00001 a,intb00002 b
WHERE a.cod_n=equivale.cod_n_e and a.cod_grupo=equivale.cod_grupo_e and
a.cod_tipo=equivale.cod_tipo_e and a.cod_sec=equivale.cod_sec_e and
b.cod_n=equivale.cod_n_e and b.cod_grupo=equivale.cod_grupo_e and
b.cod_tipo=equivale.cod_tipo_e and b.cod_sec=equivale.cod_sec_e and
b.status_t is null
SELECT SUM(cantidad_2) INTO equivale.consumo_e FROM intb00006
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 and cod_mov = 36 and
fecha between datos_cons.fech_in and datos_cons.fech_fi
SELECT SUM(cantidad_2) INTO equivale.existe_e FROM intb00006
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 and fecha <= datos_cons.fech_fi
# Busca el costo del equivalente
SELECT costo_st INTO costo_e FROM intb00013
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 and ano = p_ano
IF status = notfound THEN
LET status = 0
END IF
LET equivalentes[idx].codigo_p = estadis.cod_n using "&","-",
estadis.cod_grupo using "&","-",
estadis.cod_tipo using "&&","-",
estadis.cod_sec using "&&&"
LET equivalentes[idx].codigo_e = equivale.cod_n_e using "&","-",
equivale.cod_grupo_e using "&","-",
equivale.cod_tipo_e using "&&","-",
equivale.cod_sec_e using "&&&"
LET estadis.fecha_llegada = null
LET estadis.num_oc = null
LET estadis.cantidad = null
SELECT MIN(a.fech_ent)
INTO estadis.fecha_llegada
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = equivale.cod_n_e AND
a.cod_grupo = equivale.cod_grupo_e AND
a.cod_tipo = equivale.cod_tipo_e AND
a.cod_sec = equivale.cod_sec_e AND
a.fech_ent >= TODAY and a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
SELECT MIN(a.num_oc)
INTO estadis.num_oc
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = equivale.cod_n_e AND
a.cod_grupo = equivale.cod_grupo_e AND
a.cod_tipo = equivale.cod_tipo_e AND
a.cod_sec = equivale.cod_sec_e AND
a.fech_ent = estadis.fecha_llegada and a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
LET estadis.cantidad = 0
SELECT AVG(a.cantidad)
INTO estadis.cantidad
FROM cotb00025 a
WHERE a.cod_n = equivale.cod_n_e AND
a.cod_grupo = equivale.cod_grupo_e AND
a.cod_tipo = equivale.cod_tipo_e AND
a.cod_sec = equivale.cod_sec_e AND
a.fech_ent = estadis.fecha_llegada AND
a.num_oc = estadis.num_oc and a.status_t is null
IF estadis.cantidad = 0 THEN
LET estadis.num_oc = null
LET estadis.fecha_llegada = null
END IF
LET equivalentes[idx].fecha_e = estadis.fecha_llegada
LET equivalentes[idx].num_oc_e = estadis.num_oc
LET equivalentes[idx].cantidad_e = estadis.cantidad
LET estadis.fecha_llegada = null
LET estadis.num_oc = null
LET estadis.cantidad = null
SELECT MIN(a.fech_ent)
INTO estadis.fecha_llegada
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent >= TODAY and a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
SELECT MIN(a.num_oc)
INTO estadis.num_oc
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent = estadis.fecha_llegada and a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
LET estadis.cantidad = 0
SELECT AVG(a.cantidad)
INTO estadis.cantidad
FROM cotb00025 a
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent = estadis.fecha_llegada AND
a.num_oc = estadis.num_oc and a.status_t is null
IF estadis.cantidad = 0 THEN
LET estadis.num_oc = null
LET estadis.fecha_llegada = null
END IF
LET equivalentes[idx].fecha_p = estadis.fecha_llegada
LET equivalentes[idx].num_oc_p = estadis.num_oc
LET equivalentes[idx].cantidad_p = estadis.cantidad
LET equivalentes[idx].descrip_p = estadis.descrip_esp
LET equivalentes[idx].unidad_p = estadis.unidad_med
LET equivalentes[idx].existe_p = estadis.existe
LET equivalentes[idx].consumo_p = estadis.consumo
LET equivalentes[idx].dia_llegada_p = estadis.dia_llegada
LET equivalentes[idx].costo_p = estadis.costo
LET equivalentes[idx].descrip_e = equivale.descrip_e
LET equivalentes[idx].unidad_e = equivale.unidad_e
LET equivalentes[idx].existe_e = equivale.existe_e
LET equivalentes[idx].consumo_e = equivale.consumo_e
LET equivalentes[idx].dia_llegada_e = equivale.dia_llegada_e
LET equivalentes[idx].costo_e = costo_e
LET tiene = "S"
LET idx = idx + 1
#EXIT WHILE
END IF
END WHILE
# Se multiplica por -1 por que el movimiento 36 es negativo
IF estadis.consumo IS NULL THEN
LET estadis.consumo = 0
END IF
LET estadis.consumo = estadis.consumo * -1
# Calculo para los dias de produccion
LET cons_prom = 0
IF estadis.consumo > 0 THEN
LET cons_prom = estadis.consumo / dias1
LET estadis.dias = (estadis.existe / estadis.consumo) * dias1
END IF
# Calculo para el exedente de la existencia apartir de los dias de exeso
# especificado
# Control para salir el material, si: tiene = "S" es equivalente
# tiene = "N" es principal
LET estadis.fecha_llegada = null
LET estadis.num_oc = null
LET estadis.cantidad = null
IF tiene = "N" THEN
SELECT MIN(a.fech_ent)
INTO estadis.fecha_llegada
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent >= TODAY and
a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
SELECT MIN(a.num_oc)
INTO estadis.num_oc
FROM cotb00025 a,cotb00014 b
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent = estadis.fecha_llegada and
a.status_t is null AND
a.num_oc = b.num_oc AND b.cierre = "N"
SELECT AVG(a.cantidad)
INTO estadis.cantidad
FROM cotb00025 a
WHERE a.cod_n = estadis.cod_n AND
a.cod_grupo = estadis.cod_grupo AND
a.cod_tipo = estadis.cod_tipo AND
a.cod_sec = estadis.cod_sec AND
a.fech_ent= estadis.fecha_llegada AND
a.num_oc = estadis.num_oc and
a.status_t is null
IF estadis.cantidad = 0 THEN
LET estadis.num_oc = null
LET estadis.fecha_llegada = null
END IF
LET estadis.p_cons_prom = cons_prom * 30
OUTPUT TO REPORT estadis_oc(estadis.*,dias1)
LET estadis.p_cons_prom = 0
END IF
LET tiene = "N"
LET salir = "N"
END WHILE
FINISH REPORT estadis_oc
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT estadis_oc(x,dias2)
DEFINE x RECORD
cod_n LIKE intb00001.cod_n,
cod_grupo LIKE intb00001.cod_grupo,
cod_tipo LIKE intb00001.cod_tipo,
cod_sec LIKE intb00001.cod_sec,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
dia_llegada LIKE intb00002.dia_llegada,
consumo LIKE intb00006.cantidad_1,
existe LIKE intb00002.existencia,
valor DECIMAL(12,3),
costo DECIMAL(12,4),
dias INTEGER ,
fecha_llegada DATE,
cantidad DECIMAL(12,2),
num_oc INTEGER,
p_cons_prom DECIMAL(12,2)
END RECORD
DEFINE primera CHAR(1)
DEFINE codigo_ant CHAR(10)
DEFINE consume DECIMAL (12,2)
DEFINE normal,dsiete,negra,doble,doble_off,borra,comp_off CHAR(2)
DEFINE promedio DECIMAL(10,2)
DEFINE doce,comp CHAR(3)
DEFINE dias,no_r SMALLINT
DEFINE dias4,dias5,dias3,dias2 SMALLINT
DEFINE hora CHAR(5)
DEFINE t_valor,existe_p,consumo_p DECIMAL(12,2)
OUTPUT
LEFT MARGIN 1
FORMAT
PAGE HEADER
IF no_r is null THEN
LET no_r = 0
END IF
LET doble = ASCII 14
LET doble_off = ASCII 20
LET negra = ASCII 27, ASCII 69
LET borra = ASCII 27, ASCII 70
LET comp = ASCII 15
LET dsiete = ASCII 17
LET comp_off = ASCII 18
LET doce = ASCII 030
LET normal = ASCII 27, ASCII 80
LET hora = time
LET lj = (126 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, comp
PRINT COLUMN 1, "inprrp042",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 119, "Pag. ", pageno USING "###"
PRINT COLUMN 40, " Sistema de Inventario de Materia Prima",
COLUMN 119, today using "dd/mm/yyyy"
PRINT COLUMN 40, " Dias De Produccion",
COLUMN 122, hora
SKIP 1 LINES
PRINT COLUMN 1, "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
COLUMN 20, "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-------------------------------------------"
PRINT COLUMN 50, "Consumo",
COLUMN 64, "Consumo",
COLUMN 90, "Dias de" ,
COLUMN 107, "Dias de",
COLUMN 115, "Fecha",
COLUMN 138, "Numero"
PRINT COLUMN 1, "Codigo",
COLUMN 14, "Descripcion",
COLUMN 50, "Del Periodo",
COLUMN 64, "De 30 Dias",
COLUMN 79, "Existencia",
COLUMN 90, "Inventario",
COLUMN 107, "Llegada",
COLUMN 115, "Llegada",
COLUMN 128, "Cantidad",
COLUMN 138, "Orden"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-------------------------------------------"
skip 1 line
ON EVERY ROW
LET dias3 = x.fecha_llegada - TODAY
IF x.consumo = 0 THEN
LET x.dias = 0
END IF
IF x.cantidad = 0 OR
x.cantidad IS NULL THEN
LET x.fecha_llegada = null
LET x.num_oc = null
LET dias3 = 0
END IF
PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-",
x.cod_tipo USING "&&","-",x.cod_sec USING "&&&",
COLUMN 14, x.descrip_esp,
COLUMN 45, x.unidad_med,
COLUMN 48, x.consumo USING "##,###,###.##",
COLUMN 62, x.p_cons_prom USING "#,###,###.##",
COLUMN 75, x.existe USING "---,---,---.##",
COLUMN 90, x.dias USING "######" ,
COLUMN 107, dias3 using "###",
COLUMN 114, x.fecha_llegada USING "DD/MM/YY",
COLUMN 124, x.cantidad USING "##,###,###.##",
COLUMN 138, x.num_oc USING "&&&&&&"
LET no_r = no_r + 1
LET consumo_p = 0
LET existe_p = 0
ON LAST ROW
SKIP 2 LINES
PRINT COLUMN 1, "==================================================",
"==================================================",
"======================================"
PRINT COLUMN 50, "EQUIVALENTES / SUSTITUTOS"
SKIP 1 LINE
LET x.dias = 0
LET existe_p = 0
LET consumo_p = 0
FOR i = 1 TO idx
IF equivalentes[i].codigo_p is not null THEN
IF codigo_ant != equivalentes[i].codigo_p THEN
LET codigo_ant = equivalentes[i].codigo_p
LET primera = "S"
END IF
IF equivalentes[i].consumo_p is null THEN
LET equivalentes[i].consumo_p = 0
END IF
IF equivalentes[i].consumo_e is null THEN
LET equivalentes[i].consumo_e = 0
END IF
IF equivalentes[i].existe_p is null THEN
LET equivalentes[i].existe_p = 0
END IF
IF equivalentes[i].existe_e is null THEN
LET equivalentes[i].existe_e = 0
END IF
LET existe_p = equivalentes[i].existe_p +
equivalentes[i].existe_e
LET consumo_p = equivalentes[i].consumo_p +
equivalentes[i].consumo_e
# Calculo para los dias de produccion
IF consumo_p < 0 THEN
LET consumo_p = consumo_p * -1
END IF
LET cons_prom_k = 0
IF consumo_p > 0 THEN
LET cons_prom = consumo_p / dias2
LET x.dias = (existe_p /
consumo_p) * dias2
LET cons_prom_k = cons_prom * 30
END IF
# Calculo para el exedente de la existencia apartir de los dias de exeso
# especificado
LET dias4 = equivalentes[i].fecha_p - TODAY
LET dias5 = equivalentes[i].fecha_e - TODAY
IF equivalentes[i].cantidad_p IS NULL OR
equivalentes[i].cantidad_p = 0 THEN
LET equivalentes[i].num_oc_p = null
LET equivalentes[i].fecha_p = null
LET dias4 = 0
END IF
PRINT COLUMN 1, equivalentes[i].codigo_p,
COLUMN 14, equivalentes[i].descrip_p,
COLUMN 45, equivalentes[i].unidad_p,
COLUMN 48, equivalentes[i].consumo_p using "##,###,###.##",
COLUMN 75, equivalentes[i].existe_p using "--,---,---.##",
COLUMN 107, dias4 using "####",
COLUMN 114, equivalentes[i].fecha_p USING "DD/MM/YY",
COLUMN 124, equivalentes[i].cantidad_p USING "##,###,###.##",
COLUMN 138, equivalentes[i].num_oc_p USING "&&&&&&"
IF equivalentes[i].cantidad_e IS NULL OR
equivalentes[i].cantidad_e = 0 THEN
LET equivalentes[i].num_oc_e = null
LET equivalentes[i].fecha_e = null
LET dias5 = 0
END IF
PRINT COLUMN 1, equivalentes[i].codigo_e,
COLUMN 14, equivalentes[i].descrip_e,
COLUMN 45, equivalentes[i].unidad_e,
COLUMN 48, equivalentes[i].consumo_e using "##,###,###.##",
COLUMN 75, equivalentes[i].existe_e using "--,---,---.##",
COLUMN 107, dias5 using "####",
COLUMN 114, equivalentes[i].fecha_e USING "DD/MM/YY",
COLUMN 124, equivalentes[i].cantidad_e USING "##,###,###.##",
COLUMN 138, equivalentes[i].num_oc_e USING "&&&&&&"
PRINT COLUMN 48, "--------------",
COLUMN 64, "--------------"
PRINT COLUMN 48, consumo_p using "##,###,###.##",
COLUMN 64, cons_prom_k USING "#,###,###.##",
COLUMN 75, existe_p using "--,---,---.##",
COLUMN 90, x.dias using "####"
SKIP 1 LINE
LET no_r = no_r + 2
END IF
END FOR
PRINT COLUMN 4, "Total Registros Impresos =", no_r USING "<<<<"
PRINT COLUMN 1, normal
LET t_valor = 0
LET no_r = 0
END REPORT