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

427 lines
14 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : INPRRP010
OBJETIVO : Acumulado por Tipo de Movimiento
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Octubre 01, 1992
MODIFICACION : Rompimiento Por Tipo de Movimiento, Con <Esc> Todos los
movimientos, Salir un movimiento por pagina.
FECHA MODIFICACION : Octubre 22, 1992.
MODIFICADO POR : Juan Fco. Soto.
-------------------------------------------------------------------------------
}
GLOBALS "inprgb000.4gl"
DEFINE datos_sp CHAR(30)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL inprrp010()
END MAIN
FUNCTION inprrp010()
DEFINE salir CHAR(1)
DEFINE select_ac,select_ant,select_p CHAR(1000)
DEFINE idx_ac,ano,idx_a,idx_c SMALLINT
DEFINE ano_act,c_ano CHAR(4)
DEFINE fecha_2 CHAR(8)
DEFINE fecha_ini_per CHAR(8)
DEFINE acumulado_a RECORD
cod_mov LIKE intb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
consumo LIKE intb00006.cantidad_2
END RECORD
DEFINE acumulado_ac RECORD
cod_mov LIKE intb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
consumo LIKE intb00006.cantidad_2
END RECORD
DEFINE acumulado_m RECORD
cod_mov LIKE intb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
consumo LIKE intb00006.cantidad_2
END RECORD
DEFINE acumulado 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,
cod_mov LIKE intb00006.cod_mov,
descrip_mov LIKE intb00005.descrip_mov,
consumo DECIMAL(10,2),
consumo_mes DECIMAL(10,2),
consumo_ant DECIMAL(10,2),
porciento DECIMAL(6,2)
END RECORD
WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM infmrp010 FROM "infmrp010"
DISPLAY FORM infmrp010
CALL pantalla()
DISPLAY "inprrp010" AT 4,3
DISPLAY "Acumulado por Movimientos" AT 6,27
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
LET ano_act = year(datos_cons.fech_fi)
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CONSTRUCT criterio ON c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec
FROM cod_mov,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 ano = year(datos_cons.fech_fi)
LET ano = ano - 1
LET c_ano = ano
LET select_ac =
"SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,sum(c.cantidad_2) ",
"FROM intb00006 c ",
"WHERE ",criterio clipped," and year(c.fecha) = ? and c.cod_mov != 99 and ",
" c.status_t is null GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4,5 "
DISPLAY "<< Estoy Buscando Acumulado del Ano Actual >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_act FROM select_ac
DECLARE actual SCROLL CURSOR FOR busca_act
OPEN actual USING ano_act
DISPLAY " " AT 19,14
LET select_ant =
"SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,SUM(c.cantidad_2) ",
"FROM intb00006 c ",
"WHERE ",criterio clipped," and year(c.fecha) = ? AND c.status_t is NULL AND ",
" c.cod_mov != 99 ",
"GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Acumulado del Ano Anterior >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_ant FROM select_ant
DECLARE anterior SCROLL CURSOR FOR busca_ant
OPEN anterior USING c_ano
DISPLAY " " AT 19,14
LET select_p =
"SELECT c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,SUM(c.cantidad_2) ",
"FROM intb00006 c ",
"WHERE ",criterio clipped," and c.fecha between ? AND ? AND ",
" c.status_t is NULL AND c.cod_mov != 99 ",
"GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Acumulado del Periodo Especificado >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_p FROM select_p
DECLARE periodo SCROLL CURSOR FOR busca_p
OPEN periodo USING datos_cons.fech_in,datos_cons.fech_fi
DISPLAY " "
AT 19,14
LET SELEC =
"SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med ",
"FROM intb00001 a, intb00002 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 ",
" ORDER BY 1,2,3,4 "
DISPLAY "<< Estoy Buscando Materiales >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca FROM selec
DECLARE accion SCROLL CURSOR FOR busca
OPEN accion
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT clase TO "C:\\archivo"
LET idx_c = 1
LET idx_a = 1
LET idx_ac = 1
WHILE status != notfound
FETCH actual INTO acumulado_ac.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET acumulado.consumo = acumulado_ac.consumo
LET acumulado.cod_mov = acumulado_ac.cod_mov
# Buscando Acumulado Mensuales
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_a periodo INTO acumulado_m.*
IF status = notfound THEN
LET idx_a = 1
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 idx_a = idx_a + 1
IF acumulado_m.cod_n = acumulado_ac.cod_n and
acumulado_m.cod_grupo = acumulado_ac.cod_grupo and
acumulado_m.cod_tipo = acumulado_ac.cod_tipo and
acumulado_m.cod_Sec = acumulado_ac.cod_Sec AND
acumulado_m.cod_mov = acumulado_ac.cod_mov THEN
LET salir = "S"
LET acumulado.consumo_mes = acumulado_m.consumo
ELSE
LET acumulado.consumo_mes = 0
END IF
IF salir = "S" THEN
LET idx_a = 1
EXIT WHILE
END IF
END WHILE
# Busque de consumo ano anterior para un material
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_ac anterior INTO acumulado_a.*
IF status = notfound THEN
LET idx_ac = 1
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 idx_ac = idx_ac + 1
IF acumulado_a.cod_n = acumulado_ac.cod_n and
acumulado_a.cod_grupo = acumulado_ac.cod_grupo and
acumulado_a.cod_tipo = acumulado_ac.cod_tipo and
acumulado_a.cod_Sec = acumulado_ac.cod_Sec AND
acumulado_a.cod_mov = acumulado_ac.cod_mov THEN
LET salir = "S"
LET acumulado.consumo_ant = acumulado_a.consumo
ELSE
LET acumulado.consumo_ant = 0
END IF
IF salir = "S" THEN
LET idx_ac = 1
EXIT WHILE
END IF
END WHILE
# Busqueda del Material Con su descripcion y unidad de medida
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_c accion INTO acumulado.*
IF status = notfound THEN
LET idx_c = 1
LET salir = "S"
EXIT WHILE
END IF
LET idx_c = idx_c + 1
IF acumulado_ac.cod_n = acumulado.cod_n and
acumulado_ac.cod_grupo = acumulado.cod_grupo and
acumulado_ac.cod_tipo = acumulado.cod_tipo and
acumulado_ac.cod_Sec = acumulado.cod_Sec THEN
LET salir = "S"
END IF
IF salir = "S" THEN
LET idx_c = 1
EXIT WHILE
END IF
END WHILE
IF acumulado.consumo_ant is null THEN
LET acumulado.consumo_ant = 0
END IF
LET acumulado.porciento=0
IF acumulado.consumo_ant != 0 THEN
LET acumulado.porciento = ((acumulado.consumo/acumulado.consumo_ant)-1)*100
END IF
OUTPUT TO REPORT clase(acumulado.*,c_ano)
END WHILE
FINISH REPORT clase
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT clase(x,c_ano1)
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,
cod_mov LIKE intb00006.cod_mov,
descrip_mov LIKE intb00005.descrip_mov,
consumo DECIMAL(10,2),
consumo_mes DECIMAL(10,2),
consumo_ant DECIMAL(10,2),
porciento DECIMAL(6,2)
END RECORD
DEFINE c_ano1 char(4)
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(2)
DEFINE doce CHAR(3)
DEFINE normal CHAR(2)
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 normal = ASCII 27, ASCII 80
LET hora = time
LET lj = (100 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT doce
PRINT COLUMN 2, "inprrp010",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 93, "Pag. ",pageno using "###"
PRINT COLUMN 28, " Sistema de Inventario de Materia Prima",
COLUMN 93, today using "dd/mm/yyyy"
PRINT COLUMN 28, " Acumulado por Movimientos",
COLUMN 96, hora
SKIP 1 LINES
PRINT COLUMN 2, "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
COLUMN 21, "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------"
PRINT COLUMN 63, "Acumulado",
COLUMN 76, "Acumulado Ano",
COLUMN 92, "Porciento"
PRINT COLUMN 1, "Mat. Prima",
COLUMN 14, "Descripcion",
COLUMN 54, "Periodo",
COLUMN 63, "Al ",datos_cons.fech_fi using "dd/mm/yyyy",
COLUMN 76, "Anterior ",c_ano1,
COLUMN 92, "Variacion"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------"
BEFORE GROUP OF x.cod_mov
SELECT descrip_mov INTO x.descrip_mov FROM intb00005
WHERE cod_mov = x.cod_mov
PRINT COLUMN 2, "Movimiento",
COLUMN 13, x.cod_mov using "<<"," ",x.descrip_mov
skip 1 line
ON EVERY ROW
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 48, x.consumo_mes USING "##,###,###.##",
COLUMN 62, x.consumo USING "##,###,###.##",
COLUMN 76, x.consumo_ant USING "##,###,###.##",
COLUMN 90, x.porciento USING "(,(((.##)"," %"
AFTER GROUP OF x.cod_mov
SKIP TO TOP OF PAGE
ON LAST ROW
SKIP 2 LINES
PRINT COLUMN 1, "==================================================",
"==================================================",
"==============================="
PRINT COLUMN 4, "Total Registros Impresos =", count(*) USING "<<<<"
PRINT COLUMN 4, ASCII 27, ASCII 80
END REPORT