Files
MBS/PROYECTOS/irdir/irprrp045.4gl
T

350 lines
12 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IRPRRP045
OBJETIVO : Rreporte de Consumo Por Maquina USUARIOS
PROGRAMADOR : Juan Soto
FECHA REALIZACION : Junio 14, 20, 2022
-------------------------------------------------------------------------------
}
IMPORT os
GLOBALS "irprgb000.4gl"
DEFINE fecha1,fecha2 DATE,
departamento INT
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 irprrp045()
END MAIN
FUNCTION irprrp045()
##### Definicion de la variables a imprimir
DEFINE cons_maq RECORD
tipoinventario VARCHAR(40),
maquina LIKE irtb00006.maquina,
nombre LIKE irtb00009.nombre,
cod_n LIKE irtb00006.cod_n,
cod_grupo LIKE irtb00006.cod_grupo,
cod_tipo LIKE irtb00006.cod_tipo,
cod_sec LIKE irtb00006.cod_sec,
descrip_esp CHAR(30),
unidad_med CHAR(4),
fecha DATE,
num_doc INT,
descripcion_mov VARCHAR(100),
cantidad_2 LIKE irtb00006.cantidad_2,
codigo CHAR(25),
costo_st LIKE irtb00013.costo_st,
valor DECIMAL(12,2)
END RECORD
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM irfmrp008 FROM "irfmrp043"
DISPLAY FORM irfmrp008
DISPLAY "irprrp008" AT 4,3
DISPLAY "Consumo de Repuesto Por Maquina" AT 6,25
####### Creando criterio de busqueda
INPUT BY NAME fecha1,fecha2,departamento
BEFORE INPUT
CALL departamento_user(usuarios)
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
AFTER FIELD fecha2
IF fecha2 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha2
END IF
IF fecha1 > fecha2 THEN
LET numero_msg = 168
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
END INPUT
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
AFTER CONSTRUCT
##### Creando la facilidad para cancelar opreacion mediante DELETE
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
##### Selecionando la informacion requerida para la salida de
##### informacion
IF departamento IS NULL THEN
LET selec =
"SELECT 'REPUESTOS',a.sec_a as departamento,b.nom_dpto,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ",
" c.descrip_esp,c.unidad_med,a.fecha,a.num_doc,cast(d.cod_mov as char(5))+'-'+d.descrip_mov, a.cantidad_2*-1 ",
"FROM irtb00006 a,adtb00001 b,irtb00002 c,irtb00005 d ",
"WHERE a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND ",
" a.cod_mov = d.cod_mov AND d.consumo = 'SI' AND ",
" a.sec_a = b.departamento AND a.status_t is NULL AND ",
" a.fecha BETWEEN ? AND ? AND a.cantidad_2 < 0 AND ",
criterio CLIPPED ,
" UNION ",
"SELECT 'MAT PRIMA', a.depto_a as departamento,b.nom_dpto,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ",
" c.descrip_esp,c.unidad_med,a.fecha,a.num_doc,cast(d.cod_mov as char(5))+'-'+d.descrip_mov, a.cantidad_2*-1 ",
"FROM intb00006 a,adtb00001 b,intb00001 c,intb00005 d ",
"WHERE a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND ",
" a.cod_mov = d.cod_mov AND d.consumo = 'SI' AND ",
" a.depto_a = b.departamento AND a.status_t is NULL AND ",
" a.fecha BETWEEN ? AND ? AND a.cantidad_2 < 0 AND ",
criterio CLIPPED,
" ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec"
ELSE
LET selec =
"SELECT 'REPUESTOS',a.sec_a as departamento,b.nom_dpto,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ",
" c.descrip_esp,c.unidad_med,a.fecha,a.num_doc,cast(d.cod_mov as char(5))+'-'+d.descrip_mov, a.cantidad_2*-1 ",
"FROM irtb00006 a,adtb00001 b,irtb00002 c,irtb00005 d ",
"WHERE a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND ",
" a.cod_mov = d.cod_mov AND d.consumo = 'SI' AND ",
" a.sec_a = ", departamento, " and ",
" a.sec_a = b.departamento AND a.status_t is NULL AND ",
" a.fecha BETWEEN ? AND ? AND a.cantidad_2 < 0 AND ",
criterio CLIPPED ,
" UNION ",
"SELECT 'MAT PRIMA', a.depto_a as departamento,b.nom_dpto,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ",
" c.descrip_esp,c.unidad_med,a.fecha,a.num_doc,cast(d.cod_mov as char(5))+'-'+d.descrip_mov, a.cantidad_2*-1 ",
"FROM intb00006 a,adtb00001 b,intb00001 c,intb00005 d ",
"WHERE a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND ",
" a.cod_mov = d.cod_mov AND d.consumo = 'SI' AND ",
" a.depto_a = ", departamento, " and ",
" a.depto_a = b.departamento AND a.status_t is NULL AND ",
" a.fecha BETWEEN ? AND ? AND a.cantidad_2 < 0 AND ",
criterio CLIPPED,
" ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec"
END IF
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>"
AT 17,14 ATTRIBUTE (REVERSE,BOLD)
LET selec1 =
"SELECT COUNT(*) ",
"FROM irtb00006 a,adtb00001 b,irtb00002 c ",
"WHERE a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ",
" a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND ",
" a.sec_a = b.departamento AND a.status_t is NULL AND ",
" a.fecha BETWEEN ? AND ? AND a.cantidad_2 <0 AND ",
criterio clipped
# PREPARE comando1 FROM selec1
# DECLARE busca1 CURSOR FOR comando1
# OPEN busca1 USING fecha1,fecha2
# FETCH busca1 INTO regi
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion USING fecha1,fecha2,fecha1,fecha2
LET idx = 1
LET p_param = "S"
FOREACH accion INTO cons_maq.*
IF idx =1 THEN
LET r_filename = 'irprrp043.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview = 1
CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
START REPORT rep_consu TO XML HANDLER HANDLER
END IF
END IF
LET idx = idx +1
# CALL termometro(regi,p_param)
LET p_param = "N"
LET cons_maq.codigo = cons_maq.cod_n USING "&",'-',
cons_maq.cod_grupo USING "&&",'-',
cons_maq.cod_tipo USING "&&&",'-',
cons_maq.cod_sec USING "&&&&"
LET cons_maq.costo_st = 0
IF cons_maq.tipoinventario = 'REPUESTOS' THEN
SELECT costo_st INTO cons_maq.costo_st
FROM irtb00013
WHERE cod_n = cons_maq.cod_n AND
cod_grupo = cons_maq.cod_grupo AND
cod_tipo = cons_maq.cod_tipo AND
cod_sec = cons_maq.cod_sec AND
ano = YEAR(cons_maq.fecha) AND
status_t IS NULL
ELSE
SELECT costo_st INTO cons_maq.costo_st
FROM intb00013
WHERE cod_n = cons_maq.cod_n AND
cod_grupo = cons_maq.cod_grupo AND
cod_tipo = cons_maq.cod_tipo AND
cod_sec = cons_maq.cod_sec AND
ano = YEAR(cons_maq.fecha) AND
status_t IS NULL
END IF
LET cons_maq.valor = 0
LET cons_maq.valor = cons_maq.costo_st * cons_maq.cantidad_2
OUTPUT TO REPORT rep_consu(cons_maq.*)
END FOREACH
IF idx > 1 THEN
FINISH REPORT rep_consu
END IF
END FUNCTION
###### Proceso de generacion del reporte.
REPORT rep_consu(x)
DEFINE x RECORD
tipoinventario VARCHAR(50),
maquina LIKE irtb00006.maquina,
nombre LIKE irtb00009.nombre,
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 CHAR(30),
unidad_med CHAR(4),
fecha DATE,
num_doc INT,
descripcion_mov VARCHAR(100),
cantidad_2 LIKE irtb00006.cantidad_2,
codigo CHAR(25),
costo_st LIKE irtb00013.costo_st,
valor DECIMAL(12,2)
END RECORD
DEFINE p RECORD
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
descrip_mov LIKE irtb00005.descrip_mov
END RECORD
DEFINE primera CHAR(1),
hora CHAR(6),
xfecha CHAR(10),
datosFechas VARCHAR(30),
dia,mes smallint,
nom_dia,nom_mes CHAR(10),
total_consumo_co,total_valor_co,total_general,total_valor_mq FLOAT
OUTPUT
LEFT MARGIN 0
ORDER BY x.maquina,x.codigo
###### Formateando la salida de la informacion
FORMAT
PAGE HEADER
LET hora = time
LET dia = WEEKDAY(x.fecha)
LET mes = MONTH(x.fecha)
LET primera = "S"
CALL busca_mes()
LET nom_mes = nombre_mes[mes]
LET dia = dia + 1
CALL busca_dia()
LET nom_dia = nombre_dia[dia]
LET datosFechas = "Del ",fecha1 USING "dd/mm/yyyy", " Al ",
fecha2 USING "dd/mm/yyyy"
BEFORE GROUP OF x.maquina
PRINTX p_companias.nombre,fecha1,fecha2,hora,datosFechas,x.maquina,x.nombre
BEFORE GROUP OF x.codigo
PRINTX x.codigo,x.descrip_esp,x.unidad_med
ON EVERY ROW
LET xfecha = x.fecha USING "dd/mm/yyyy"
PRINTX xfecha, x.cantidad_2, x.costo_st, x.valor ,x.num_doc,x.descripcion_mov
AFTER GROUP OF x.codigo
LET total_consumo_co = GROUP SUM(x.cantidad_2)
LET total_valor_co = GROUP SUM(x.valor)
AFTER GROUP OF x.maquina
LET total_valor_mq= GROUP SUM(x.valor)
PRINTX total_Valor_mq
ON LAST ROW
LET total_General= SUM(x.valor)
END REPORT
##### Igualandon los dias de la semana a la descripcion del mismo
FUNCTION busca_dia()
LET nombre_dia[1] = "Domingo"
LET nombre_dia[2] = "Lunes"
LET nombre_dia[3] = "Martes"
LET nombre_dia[4] = "Miercoles"
LET nombre_dia[5] = "Jueves"
LET nombre_dia[6] = "Viernes"
LET nombre_dia[7] = "Sabado"
END FUNCTION
####### Igualando el numero del mes a la descripcion del mismo
FUNCTION busca_mes()
LET nombre_mes[1] = "Enero"
LET nombre_mes[2] = "Febrero"
LET nombre_mes[3] = "Marzo"
LET nombre_mes[4] = "Abril"
LET nombre_mes[5] = "Mayo"
LET nombre_mes[6] = "Junio"
LET nombre_mes[7] = "Julio"
LET nombre_mes[8] = "Agosto"
LET nombre_mes[9] = "Septiembre"
LET nombre_mes[10] = "Octubre"
LET nombre_mes[11] = "Noviembre"
LET nombre_mes[12] = "Diciembre"
END FUNCTION