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

366 lines
12 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : INPRRP035
OBJETIVO : Valorizacion de Inventario Metodo UEPS
PROGRAMADOR : Tadeo A. Ferreras F.
FECHA REALIZACION : Septiembre 20/ 1995
-------------------------------------------------------------------------------
}
GLOBALS "inprgb000.4gl"
DEFINE fecha1,fecha2 DATE,
p_cantidad,valor1 DECIMAL(12,2),
p_mes1,p_ano1 SMALLINT
####### Definicion de variables a usar en el reporte #######
# Costo de la materia prima
DEFINE reg_rep35 RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(3),
precio DECIMAL(20,4),
codigo CHAR(7)
END RECORD
# Variables para asignarles los selects
DEFINE selec8,selec9,selec4 CHAR(1000)
# Bandera para utilizarla en los loops de busqueda
DEFINE salir,salir1,salir2 CHAR(1)
# Indices de busqueda de las informaciones
DEFINE idx_1,idx_2,idx1,i,j,k INTEGER
FUNCTION inprrp035()
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM infmrp035 FROM "infmrp034"
DISPLAY FORM infmrp035
CALL pantalla()
DISPLAY "inprrp035" AT 4,3
DISPLAY "Valorizacion de Inventario Metodo UEPS" AT 6,23
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
########### Captura de valores para el criterio de busqueda ############
INPUT BY NAME p_mes1,p_ano1
AFTER FIELD p_mes1
IF p_mes1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_mes1
END IF
AFTER FIELD p_ano1
IF p_ano1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_ano1
END IF
SELECT a.fecha_inicio INTO fecha1
FROM prdtable a
WHERE a.mes = 1 AND a.ano = p_ano1
LET fecha1 = fecha1 - 1
SELECT a.fecha_corte INTO fecha2
FROM prdtable a
WHERE a.mes = p_mes1 AND a.ano = p_ano1
DISPLAY BY NAME fecha1,fecha2
END INPUT
########### Facilidad para cancelar la variacioncon la tecla DELETE ####
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.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 del inventario inicial de cada materia prima
LET selec4 =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,",
" b.descrip_esp,b.unidad_med ",
"FROM intb00002 a, intb00001 b ",
"WHERE (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 AND ",
criterio CLIPPED,
" ORDER BY 1,2,3,4"
DISPLAY "<<Buscando Informacion... Espere por Favor.>>" AT 17,14
ATTRIBUTE(REVERSE,BOLD)
PREPARE comando4 FROM selec4
DECLARE stand CURSOR FOR comando4
START REPORT reporte_35 TO "C:\\archivo"
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 17,14 ATTRIBUTE (REVERSE)
# Loop inicial de busqueda de las informaciones de la materia prima
FOREACH stand INTO reg_rep35.*
IF int_flag THEN
LET int_flag = FALSE
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
LET reg_rep35.codigo = reg_rep35.cod_n USING "&",
reg_rep35.cod_grupo USING "&",
reg_rep35.cod_tipo USING "&&",
reg_rep35.cod_sec USING "&&&"
OUTPUT TO REPORT reporte_35(reg_rep35.*)
END FOREACH
FINISH REPORT reporte_35
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
# Rutina de Impresion de las informaciones
REPORT reporte_35(x)
# Variable para tomar las informaciones
DEFINE x RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(3),
precio DECIMAL(20,4),
codigo CHAR(7)
END RECORD
# Vaiables para la impresion de caracters ASCII
DEFINE fech1,fech2 DATE,
doble_on,doble_off,comp_on,comp_off,doce,normal CHAR(3),
negrillas_on,negrillas_off CHAR(6),
hora CHAR(5),
total_costo,total_valor,cant_total,capa_mas,
balance_final DECIMAL(12,2),
costo_ant DECIMAL(10,4)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
FORMAT
PAGE HEADER
# Validacion de los caracteres ascii
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 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = time
# Impresion de los encabezados
LET lj = (117 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT comp_on,negrillas_on
PRINT COLUMN 1, "inprrp035",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 110, "Pag. ",pageno using "###"
PRINT COLUMN 35, " Sistema de Inventario de Materia Prima",
COLUMN 110, today using "dd/mm/yyyy"
PRINT COLUMN 35, " Valorizacion de Inventario Metodo UEPS",
COLUMN 113, hora
PRINT COLUMN 1,"Periodo: DEL ",fecha1 USING "dd/mm/yyyy",
" AL ",fecha2 USING "dd/mm/yyyy"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-----------------"
PRINT COLUMN 1, "Material",
COLUMN 70, "Costo",
COLUMN 96, "Balance",
COLUMN 113, "Valor"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-----------------"
PRINT negrillas_off
BEFORE GROUP OF x.cod_sec
IF total_valor IS NULL THEN
LET total_valor = 0
END IF
LET total_costo = 0
LET cant_total = 0
LET costo_ant = 0
# BUSCA EL BALANCE INICIAL DEL MATERIAL
SELECT SUM(a.cantidad_2) INTO cant_total FROM intb00006 a
WHERE (a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec) AND
(a.fecha <= fecha1) AND (a.status_t IS NULL)
IF cant_total IS NULL THEN
LET cant_total = 0
END IF
#BUSCA EL BALANCE FINAL DEL MATERIAL
SELECT SUM(a.cantidad_2) INTO balance_final
FROM intb00006 a
WHERE (a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.fecha <= fecha2) AND
a.status_t IS NULL
IF balance_final IS NULL THEN
LET balance_final = 0
END IF
IF cant_total != 0 OR balance_final != 0 THEN
# BUSCA EL COSTO PROMEDIO DEL BALANCE INICIAL
IF cant_total != 0 THEN
SELECT SUM(a.costo*a.balance) / cant_total
INTO costo_ant
FROM intb00010 a
WHERE a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.fecha_ini = fecha1
END IF
PRINT COLUMN 1, negrillas_on
PRINT COLUMN 1, "MATERIAL: ",x.cod_n USING "&","-",
x.cod_grupo USING "&","-",x.cod_tipo USING "&&",
"-",x.cod_sec USING "&&&"," ",x.descrip_esp," ",
x.unidad_med
IF balance_final > cant_total THEN
PRINT COLUMN 3, "Inventario Inicial ",
COLUMN 64, costo_ant USING "##,###.####",
COLUMN 88, cant_total USING "###,###,###.##",
COLUMN 105, cant_total * costo_ant USING "##,###,###.##"
,negrillas_off
# CUANDO SEA FIN DE ANO GENERA LOS VALORES PARA LAS SIGUIENTES CAPAS
IF p_mes1 = 12 THEN
DELETE FROM intb00010 WHERE fecha_ini = fecha2
INSERT INTO intb00010 VALUES
(fecha2,x.cod_n,
x.cod_grupo,x.cod_tipo,x.cod_sec,
fecha1,x.precio,cant_total)
END IF
LET total_valor = total_valor + (cant_total * costo_ant)
LET total_costo = total_costo + (cant_total * costo_ant)
END IF
END IF
AFTER GROUP OF x.codigo
IF cant_total != 0 OR balance_final != 0 THEN
LET x.precio = costo_ant
IF balance_final > cant_total THEN
SELECT SUM(a.cantidad*a.costo_lq) INTO valor1
FROM cttb00013 a
WHERE (a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.fecha BETWEEN fecha1+1 AND fecha2) AND
a.status_t IS NULL
SELECT SUM(a.cantidad) INTO p_cantidad
FROM cttb00013 a
WHERE (a.cod_n = x.cod_n AND
a.cod_grupo = x.cod_grupo AND
a.cod_tipo = x.cod_tipo AND
a.cod_sec = x.cod_sec AND
a.fecha BETWEEN fecha1+1 AND fecha2) AND
a.status_t IS NULL
LET x.precio = valor1 / p_cantidad
LET capa_mas = balance_final - cant_total
LET total_costo = total_costo + (capa_mas * x.precio)
PRINT COLUMN 3, "Nueva Capa ",
COLUMN 64, x.precio USING "##,###.####",
COLUMN 88, capa_mas USING "###,###,###.##",
COLUMN 105, capa_mas * x.precio USING "##,###,###.##"
PRINT COLUMN 88, "--------------",
COLUMN 105, "-------------"
PRINT COLUMN 88, balance_final USING "###,###,###.##",
COLUMN 105, total_costo USING "##,###,###.##"
LET total_valor = total_valor + (capa_mas * x.precio)
# CUANDO SEA FINAL DEL ANO GENERA ESTOS VALORES PARA EL ANO SIGUIENTE
IF p_mes1 = 12 THEN
DELETE FROM intb00010 WHERE fecha_ini = fecha2
INSERT INTO intb00010 VALUES
(fecha2,x.cod_n,
x.cod_grupo,x.cod_tipo,x.cod_sec,
fecha1,x.precio,capa_mas)
END IF
ELSE
LET total_costo = total_costo + (balance_final * x.precio)
LET total_valor = total_valor + (balance_final * x.precio)
PRINT COLUMN 64, x.precio USING "##,###.####",
COLUMN 88, balance_final USING "###,###,###.##",
COLUMN 105, balance_final * x.precio USING "##,###,###.##"
PRINT COLUMN 105, "-------------"
PRINT COLUMN 105, total_costo USING "##,###,###.##"
END IF
SKIP 1 LINE
END IF
ON LAST ROW
PRINT COLUMN 105, "--------------"
PRINT COLUMN 80, "Total General --->",
COLUMN 105, total_valor USING "###,###,###.##"
PRINT comp_off
LET total_valor = 0
END REPORT