Files
MBS/PROYECTOS/indir/inprrp029.4gl
T

365 lines
11 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : INPRRP029
OBJETIVO : REPORTE COMPARATIVO DE INVENTARIO
PROGRAMADOR : Ing. Juan F. Soto
FECHA REALIZACION : Diciembre 08, 1994.
-------------------------------------------------------------------------------
}
GLOBALS "inprgb000.4gl"
DEFINE ano_act CHAR(4)
FUNCTION inprrp029()
DEFINE mes CHAR(2)
DEFINE idx_ant,idx_cos,idx_act SMALLINT
DEFINE salir,primera CHAR(1)
DEFINE balance_in DECIMAL(12,2)
DEFINE existe 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,
existe_act DECIMAL(10,2),
costo LIKE intb00013.costo_st
END RECORD
DEFINE costos RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
fecha CHAR(2),
costo_st LIKE intb00013.costo_st
END RECORD
DEFINE actual RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
balance LIKE intb00006.cantidad_2
END RECORD
DEFINE anterior RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
balance LIKE intb00006.cantidad_2
END RECORD
DEFINE select_cost,select_act,select_ant CHAR(1000)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM infmrp29 FROM "infmrp29"
DISPLAY FORM infmrp29
CALL pantalla()
DISPLAY "inprrp029" AT 4,3
DISPLAY "Comparativo de Inventario" AT 6,27
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
LABEL vuelve:
INPUT BY NAME datos_cons.fech_fi
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 ano_act = year(datos_cons.fech_fi)
CONSTRUCT criterio ON d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec
FROM cod_n,cod_grupo,cod_tipo,cod_sec
LET select_cost =
"SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,max(b.mes_fin), ",
" b.costo_st,b.mes_ini ",
"FROM intb00013 b,intb00002 d ",
"WHERE b.ano = ? and d.cod_n = b.cod_n and d.cod_grupo = b.cod_grupo and ",
" d.cod_tipo = b.cod_tipo and d.cod_sec = b.cod_sec and ",
criterio CLIPPED," AND b.status_t is null ",
"GROUP BY 1,2,3,4,6,7 ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Los Costos Actuales >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_costo FROM select_cost
DECLARE material_costo SCROLL CURSOR FOR busca_costo
OPEN material_costo USING ano_act
DISPLAY " " AT 19,14
LET select_ant =
"SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,sum(d.cantidad_2) ",
"FROM intb00006 d ",
"WHERE d.status_t is null and fecha <= ? AND ",criterio CLIPPED,
"GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Los Balances Acutales >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_ant FROM select_ant
DECLARE busca_balan_ant SCROLL CURSOR FOR busca_ant
OPEN busca_balan_ant USING datos_cons.fech_fi
DISPLAY " "
AT 19,14
LET SELEC =
"SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,d.descrip_esp, ",
" d.unidad_med ",
"FROM intb00001 d, intb00002 b ",
"WHERE d.cod_n = b.cod_n AND d.cod_grupo = b.cod_grupo AND ",
" d.cod_tipo = b.cod_tipo AND d.cod_sec = b.cod_sec AND ",
" d.status_t is null AND ",criterio clipped," ORDER BY 1,2,3,4"
DISPLAY "<< Estoy Buscando Las Materias Primas >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca FROM selec
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE accion CURSOR FOR busca
OPEN accion
DISPLAY " "
AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT compara TO "C:\\archivo"
LET idx_ant = 1
LET idx_act = 1
LET idx_cos = 1
WHILE status != notfound
FETCH accion INTO existe.*
IF status = notfound THEN
EXIT WHILE
END IF
# Busqueda de los costos actuales
LET existe.existe_act = 0
LET existe.costo = 0
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_cos material_costo INTO costos.*
IF status = notfound THEN
LET idx_cos = 1
LET salir = "S"
EXIT WHILE
END IF
LET idx_cos = idx_cos + 1
LET existe.costo = 0
IF costos.cod_n = existe.cod_n AND
costos.cod_grupo = existe.cod_grupo AND
costos.cod_tipo = existe.cod_tipo AND
costos.cod_sec = existe.cod_Sec THEN
LET idx_cos = 1
LET salir = "S"
LET existe.costo = costos.costo_st
EXIT WHILE
END IF
IF salir = "S" THEN
LET idx_cos = 1
EXIT WHILE
END IF
END WHILE
# Busqueda de los balances actuales
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_ant busca_balan_ant INTO anterior.*
IF status = notfound THEN
LET idx_ant = 1
LET salir = "S"
EXIT WHILE
END IF
LET idx_ant = idx_ant + 1
LET existe.existe_act = 0
IF anterior.cod_n = existe.cod_n AND
anterior.cod_grupo = existe.cod_grupo AND
anterior.cod_tipo = existe.cod_tipo AND
anterior.cod_sec = existe.cod_Sec THEN
LET salir = "S"
LET idx_ant = 1
IF anterior.balance IS NULL THEN
LET anterior.balance = 0
END IF
LET existe.existe_act = anterior.balance
EXIT WHILE
END IF
IF salir = "S" THEN
LET idx_ant = 1
EXIT WHILE
END IF
END WHILE
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
OUTPUT TO REPORT compara(existe.*)
END WHILE
FINISH REPORT compara
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT compara(x)
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,
existe_act DECIMAL(10,2),
costo LIKE intb00013.costo_st
END RECORD,
precio DECIMAL(8,2)
DEFINE t_valor_p,t_valor_c,
diferencia,valor_p,valor_c,total_c,total_p DECIMAL (12,2)
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(2)
DEFINE negrillas_off CHAR(2)
DEFINE comp_on CHAR(3)
DEFINE comp_off CHAR(3)
DEFINE doce CHAR(3)
DEFINE hora CHAR(5)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 031
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET hora = time
LET lj = (120 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1,comp_on
PRINT COLUMN 1, "inprrp029",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 113, "Pag. ",pageno using "###"
PRINT COLUMN 37, " Sistema de Inventario de Materia Prima",
COLUMN 113, today using "dd/mm/yyyy"
PRINT COLUMN 37, " Comparativo de Inventario",
COLUMN 116, hora
PRINT COLUMN 1, "AL ",datos_cons.fech_fi using "dd/mm/yyyy"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"--------------------"
PRINT COLUMN 47, "INVENTARIO"
PRINT COLUMN 1, "ARTICULOS",
COLUMN 47, "AL ",datos_cons.fech_fi using "dd/mm/yyyy",
COLUMN 63, "PRECIO",
COLUMN 75, "VALOR",
COLUMN 89, "STD",
COLUMN 99, "VALOR",
COLUMN 117, "DIF"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"--------------------"
IF total_p is null THEN
LET total_p = 0
END IF
SKIP 1 LINE
BEFORE GROUP OF x.cod_n
LET precio = 0
LET valor_p = 0
LET valor_c = 0
LET diferencia = 0
ON EVERY ROW
IF total_p is null THEN
LET total_p = 0
END IF
IF t_valor_p is null THEN
LET t_valor_p = 0
END IF
IF t_valor_c is null THEN
LET t_valor_c = 0
END IF
SELECT avg(costo_lq) INTO precio FROM cttb00013
WHERE cod_n = x.cod_n and cod_grupo = x.cod_grupo and
cod_tipo = x.cod_tipo and cod_sec = x.cod_sec and
year(fecha) = ano_act and costo_lq > 0
IF precio is null THEN
LET precio = 0
END IF
LET valor_p = x.existe_act * precio
LET valor_c = x.existe_act * x.costo
LET diferencia = valor_c - valor_p
PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-",
x.cod_tipo USING "&&","-",x.cod_sec USING "&&&",
" ",x.descrip_esp," ",x.unidad_med,
COLUMN 47, x.existe_act USING "---,---,---.##",
COLUMN 62, precio using "#,###.##",
COLUMN 71, valor_p using "#,###,###.##",
COLUMN 84, x.costo USING "#,###.####",
COLUMN 95, valor_c using "#,###,###.##",
COLUMN 107, diferencia USING "((,(((,((#.##)"
LET t_valor_p = t_valor_p + valor_p
LET t_valor_c = t_valor_c + valor_c
LET total_p = total_p + diferencia
ON LAST ROW
PRINT COLUMN 71, "------------",
COLUMN 95, "------------",
COLUMN 107, "--------------"
PRINT COLUMN 71, t_valor_p USING "##,###,###.##",
COLUMN 95, t_valor_c using "##,###,###.##",
COLUMN 107, total_p USING "(((,(((,((#.##)"
LET total_p = 0
SKIP 2 LINES
PRINT COLUMN 1, "==================================================",
"=================================================="
PRINT COLUMN 1, "Total Registros Impresos =", count(*) USING "<<<<"
PRINT COLUMN 4, comp_off
END REPORT