{ ------------------------------------------------------------------------------- PROGRAMA : IRPRRP043 OBJETIVO : Rreporte de Consumo Por Maquina PROGRAMADOR : Juan Soto FECHA REALIZACION : Agosto 20, 2020 MODIFICACION : Incluir costo estandar del repuesto y valor consumo por departamento. ------------------------------------------------------------------------------- } 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 irprrp008() END MAIN FUNCTION irprrp008() ##### 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 LET tipo_papel = 1 CALL msgrp000(tipo_papel) DISPLAY " " at 19,14 ####### Creando criterio de busqueda INPUT BY NAME fecha1,fecha2,departamento BEFORE INPUT CALL busca_departamento() 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 FINISH REPORT rep_consu 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