{------------------------------------------------------------------------------ PROGRAMA : ipprrp047 OBJETIVO : Operacion por Tipo de Movimiento detallado PROGRAMADOR : Ing. Juan Fco. Soto FECHA REALIZACION : Febrero 1997 MODIFICADO POR : VALENTI RODRIGUEZ FECHA MODIFICACION : ABRIL 2019 ------------------------------------------------------------------------------- } GLOBALS "ipprgb000.4gl" DEFINE nombre_v CHAR(20) DEFINE ventas,salir CHAR(1), costos VARCHAR(50), cantidad_linea SMALLINT DEFINE total_costo_st DEC(30,2) DEFINE control_existencia BOOLEAN 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 ipprrp047() END MAIN FUNCTION ipprrp047() DEFINE select_ac STRING DEFINE ano_act CHAR(4) DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename STRING, -- filename of Report Design Document including .4rp extension r_output STRING, -- output format option preview INTEGER, -- TRUE/FALSE, to set preview option criterio STRING DEFINE acumulado_ac RECORD departamento VARCHAR(40), cod_mov LIKE iptb00005.cod_mov, cod_n SMALLINT, cod_grupo SMALLINT, cod_Tipo SMALLINT, cod_Sec SMALLINT, consumo FLOAT END RECORD DEFINE acumulado RECORD cod_cia LIKE iptb00002.cod_cia, cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp CHAR(50), descrip_ing LIKE iptb00002.descrip_ing, unidad_med LIKE iptb00002.unidad_med, cod_mov LIKE iptb00006.cod_mov, descrip_mov LIKE iptb00005.descrip_mov, consumo DECIMAL(30,5), material DECIMAL(30,5), labor DECIMAL(30,5), gastos DECIMAL(30,5), descripcion_origen VARCHAR(30), departamento VARCHAR(40) END RECORD # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ipfmrp047 FROM "ipfmrp047" DISPLAY FORM ipfmrp047 CALL ui.Window.getCurrent().setText("Transacciones de Inventario") DISPLAY "ipprrp047" AT 4,3 DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME ventas,datos_cons.fech_in,datos_cons.fech_fi,control_existencia, costos AFTER FIELD ventas IF ventas = "1" THEN LET nombre_v = "LOCAL" ELSE LET nombre_v = "EXPORTACION" END IF DISPLAY BY NAME nombre_v ATTRIBUTE (BOLD) 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 END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT criterio ON f.cod_cia,c.cod_mov,c.departamento, c.cod_n, c.cod_grupo, c.cod_tipo, c.cod_sec, c.bodega FROM cod_cia,cod_mov, departamento,cod_n,cod_grupo,cod_tipo,cod_sec,bodega BEFORE CONSTRUCT LET k1 = '1' CALL bodegas(k1) CALL busca_departamento() AFTER CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF END CONSTRUCT IF control_existencia = FALSE OR control_existencia IS NULL THEN LET select_ac = "SELECT isnull(e.nom_dpto, 'NO DEPARTAMENTO'), c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, ", "SUM(c.cantidad_2),f.descrip_esp,f.unidad_med,g.descripcion,g.cod_cia ", "FROM iptb00006 c JOIN iptb00002 f on c.cod_n=f.cod_n and c.cod_grupo = f.cod_grupo and c.cod_tipo=f.cod_tipo and ", " c.cod_sec = f.cod_sec ", " INNER JOIN iptb00022 g ON f.cod_cia = g.cod_cia ", "left join adtb00001 e on e.departamento = c.departamento ", "WHERE ",criterio clipped," and c.fecha between '",datos_cons.fech_in USING 'mm/dd/yyyy',"' and '", datos_cons.fech_fi USING 'mm/dd/yyyy',"' ", " AND c.status_t is NULL ", "GROUP BY g.descripcion,e.nom_dpto, c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,f.descrip_esp, ", " g.cod_cia,f.unidad_med ", "HAVING SUM(c.cantidad_2) <> 0 ", "ORDER BY g.cod_cia, e.nom_dpto, c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec " ELSE LET select_ac = "SELECT isnull(e.nom_dpto, 'NO DEPARTAMENTO'), c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, ", "SUM(c.cantidad_2),f.descrip_esp,f.unidad_med,g.descripcion,g.cod_cia ", "FROM iptb00006 c JOIN iptb00002 f on c.cod_n=f.cod_n and c.cod_grupo = f.cod_grupo and c.cod_tipo=f.cod_tipo and ", " c.cod_sec = f.cod_sec ", " INNER JOIN iptb00022 g ON f.cod_cia = g.cod_cia ", "left join adtb00001 e on e.departamento = c.departamento ", "WHERE ",criterio clipped," and c.fecha between '",datos_cons.fech_in USING 'mm/dd/yyyy',"' and '", datos_cons.fech_fi USING 'mm/dd/yyyy',"' ", " AND f.control_existencia = 'SI' AND c.status_t is NULL ", "GROUP BY g.descripcion,e.nom_dpto, c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,f.descrip_esp, ", " g.cod_cia,f.unidad_med ", "HAVING SUM(c.cantidad_2) <> 0 ", "ORDER BY g.cod_cia, e.nom_dpto, c.cod_mov,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec " END IF DISPLAY "<< Estoy Buscando Acumulado Del Periodo Dado >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF DISPLAY " " AT 19,14 LET ano_act = year(datos_cons.fech_fi) DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) PREPARE busca_ant FROM select_ac DECLARE actual SCROLL CURSOR FOR busca_ant LET r_filename ="ipprrp047.4rp" LET idx = 1 FOREACH actual INTO acumulado_ac.*, acumulado.descrip_esp,acumulado.unidad_med,acumulado.descripcion_origen, acumulado.cod_cia IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL selectOutputSimple() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET idx = 2 START REPORT opera TO XML HANDLER HANDLER 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 Los Costos de Los Materiales LET acumulado.material = 0 LET acumulado.labor = 0 LET acumulado.gastos = 0 SELECT c.material,c.labor,c.gastos INTO acumulado.material,acumulado.labor,acumulado.gastos FROM iptb00004 c WHERE c.ventas = ventas and c.ano = ano_act and c.mes_ini = "01" and c.mes_fin = "12" and c.cod_n = acumulado_ac.cod_n AND c.cod_grupo = acumulado_ac.cod_grupo AND c.cod_tipo = acumulado_ac.cod_tipo AND c.cod_Sec = acumulado_ac.cod_sec AND c.status_t is NULL # Busqueda del Material Con su descripcion y unidad de medida {LET acumulado.descrip_esp = null LET acumulado.unidad_med = null LET acumulado.cod_cia = NULL SELECT a.cod_cia,a.descrip_esp,a.unidad_med,b.descripcion INTO acumulado.cod_cia,acumulado.descrip_esp,acumulado.unidad_med,acumulado.descripcion_origen FROM iptb00002 a,iptb00022 b WHERE a.cod_n = acumulado_ac.cod_n AND a.cod_grupo = acumulado_ac.cod_grupo AND a.cod_tipo = acumulado_ac.cod_tipo AND a.cod_Sec = acumulado_ac.cod_sec AND a.cod_cia = b.cod_cia } IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET acumulado.cod_n = acumulado_ac.cod_n LET acumulado.cod_grupo = acumulado_ac.cod_grupo LET acumulado.cod_tipo = acumulado_ac.cod_tipo LET acumulado.cod_sec = acumulado_ac.cod_sec LET acumulado.departamento = acumulado_ac.departamento IF acumulado.labor IS NULL THEN LET acumulado.labor = 0 END IF IF acumulado.gastos IS NULL THEN LET acumulado.gastos = 0 END IF IF acumulado.material IS NULL THEN LET acumulado.material = 0 END IF IF acumulado.consumo IS NOT NULL THEN LET total_costo_st = 0 LET total_costo_st = (acumulado.material+acumulado.labor+acumulado.gastos) * acumulado.consumo END IF --LET t_total_costo_st = t_total_costo_st + total_costo_st IF costos = "TODOS" THEN LET idx = 3 OUTPUT TO REPORT opera(acumulado.*, total_costo_st) ELSE IF costos = 'COSTOS' THEN IF acumulado.material+acumulado.labor+acumulado.gastos = 0 THEN LET idx = 3 OUTPUT TO REPORT opera(acumulado.*, total_costo_st) END IF END IF { IF costos = 'NEGATIVOS' THEN IF acumulado.consumo < 0 THEN OUTPUT TO REPORT opera(acumulado.*, total_costo_st) END IF END IF} END IF END FOREACH IF idx =3 THEN FINISH REPORT opera ELSE CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO") --NEXT FIELD fecha_final END IF END FUNCTION REPORT opera(x, total_costo_st) DEFINE x RECORD cod_cia LIKE iptb00002.cod_cia, cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp CHAR(50), descrip_ing LIKE iptb00002.descrip_ing, unidad_med LIKE iptb00002.unidad_med, cod_mov LIKE iptb00006.cod_mov, descrip_mov LIKE iptb00005.descrip_mov, consumo DECIMAL(12,5), material DECIMAL(12,3), labor DECIMAL(12,3), gastos DECIMAL(12,3), descripcion_origen VARCHAR(30), departamento VARCHAR(40) END RECORD, titulo_mov,titulo_cia VARCHAR(50), rango_fecha CHAR(50), fecha_reporte CHAR(15), producto VARCHAR(150), --TOTALES POR CIA t_material_cia, t_labor_cia, t_gasto_cia, t_consumo_cia, t_general_cia, --TOTALES POR DEPARTAMENTOS t_material, t_labor, t_gasto, t_consumo, --TOTALES POR MOVIMIENTOS t_m_consumo, t_m_material, t_m_labor, t_m_gasto, --VALORES POR CADA REGISTRO(ON EVERY ROW) v_material, v_labor, v_gasto, --TOTALES VALORES POR DEPARTAMENTOS total_material, total_labor, total_gastos, total_consumo, total_valor_departamento, --TOTALES VALORES POR MOVIMIENTOS total_material_movimiento, total_consumo_movimiento, total_labor_movimiento, total_gastos_movimiento, total_valor_movimiento FLOAT, --TOTALES GENERALES total_cantidad, total_material_gral, total_consumo_gral, total_labor_gral, total_gastos_gral, total_valor_gral FLOAT DEFINE total_costo_st, t_total_costo_st, t_cantidad DECIMAL (12,2) FORMAT FIRST PAGE HEADER LET total_material_gral = 0 LET total_consumo_gral = 0 LET total_labor_gral = 0 LET total_gastos_gral = 0 LET total_valor_gral = 0 BEFORE GROUP OF x.cod_cia LET t_material_cia =0 LET t_labor_cia =0 LET t_gasto_cia =0 LET t_consumo_cia =0 LET titulo_cia = "(",x.cod_cia USING "&&",")", x.descripcion_origen PRINTX titulo_cia BEFORE GROUP OF x.cod_mov SELECT descrip_mov INTO x.descrip_mov FROM iptb00005 WHERE cod_mov = x.cod_mov LET titulo_mov = "Movimiento: ",x.cod_mov," ",x.descrip_mov CLIPPED LET t_cantidad = 0 --LET total_costo_st = 0 LET total_valor_movimiento = 0 PRINTX titulo_mov BEFORE GROUP OF x.departamento LET total_valor_departamento = 0 PRINTX x.departamento ON EVERY ROW LET rango_fecha ="Desde ",datos_cons.fech_in using "dd/mm/yyyy", "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy" LET fecha_reporte = TODAY LET producto = x.cod_n USING "&&&&&","-",x.cod_grupo USING "&&&&&","-", x.cod_tipo USING "&&&&&","-",x.cod_sec USING "&&&&&"," ", x.descrip_esp IF x.consumo IS NOT NULL THEN IF x.material IS NULL THEN LET x.material = 0 END IF IF x.labor IS NULL THEN LET x.labor = 0 END IF IF x.gastos IS NULL THEN LET x.gastos = 0 END IF LET v_material = x.consumo*x.material LET v_labor = x.consumo*x.labor LET v_gasto = x.consumo * x.gastos LET t_cantidad = t_cantidad + x.consumo { LET total_costo_st = 0 LET total_costo_st = (x.material+x.labor+x.gastos) * x.consumo LET t_total_costo_st = t_total_costo_st + total_costo_st} END IF PRINTX producto, x.consumo, x.material, v_material, x.labor, v_labor, x.gastos, v_gasto, total_costo_st, p_companias.nombre, rango_fecha, fecha_reporte AFTER GROUP OF x.departamento LET t_consumo = GROUP SUM(x.consumo) LET t_material = GROUP SUM(x.material) LET t_labor = GROUP SUM(x.labor) LET t_gasto = GROUP SUM(x.gastos) LET total_consumo = GROUP SUM(x.consumo * x.consumo) LET total_material = GROUP SUM(x.consumo * x.material) LET total_labor = GROUP SUM(x.consumo * x.labor) LET total_gastos = GROUP SUM(x.consumo * x.gastos) LET total_valor_departamento = GROUP SUM(total_costo_st) PRINTX t_consumo,t_labor, t_gasto,t_material, total_material, total_gastos, total_labor, total_valor_departamento AFTER GROUP OF x.cod_mov LET t_m_consumo = GROUP SUM(x.consumo) LET t_m_material = GROUP SUM(x.material) LET t_m_labor = GROUP SUM(x.labor) LET t_m_gasto = GROUP SUM(x.gastos) LET total_consumo_movimiento = GROUP SUM(x.consumo) LET total_material_movimiento = GROUP SUM(x.consumo * x.material) LET total_labor_movimiento = GROUP SUM(x.consumo * x.labor) LET total_gastos_movimiento = GROUP SUM(x.consumo * x.gastos) LET total_valor_movimiento = GROUP SUM(total_costo_st) PRINTX total_consumo_movimiento, total_material_movimiento, total_labor_movimiento, total_gastos_movimiento, t_m_consumo, t_m_material, t_m_labor, t_m_gasto, total_valor_movimiento AFTER GROUP OF x.cod_cia LET t_consumo_cia = GROUP SUM(x.consumo) LET t_material_cia = GROUP SUM(x.material) LET t_labor_cia = GROUP SUM(x.labor) LET t_gasto_cia = GROUP SUM(x.gastos) LET t_general_cia = t_material_cia + t_labor_cia + t_gasto_cia PRINTX t_consumo_cia,t_material_cia,t_labor_cia,t_gasto_cia,t_general_cia ON LAST ROW --LET total_cantidad = SUM(t_cantidad) LET total_material_gral = SUM(x.material) LET total_consumo_gral = SUM(x.consumo) LET total_labor_gral = SUM(x.labor) LET total_gastos_gral = SUM(x.gastos) LET total_valor_gral = SUM(total_costo_st) PRINTX total_material_gral,total_consumo_gral,total_labor_gral,total_gastos_gral,total_valor_gral END REPORT FUNCTION busca_departamento() DEFINE pdepartamento ui.combobox, kdepartamento SMALLINT, kdescripcion CHAR(30) LET pdepartamento = ui.combobox.forname("formonly.departamento") CALL pdepartamento.clear() DECLARE pagar CURSOR FOR SELECT departamento, nom_dpto FROM adtb00001 WHERE status_t IS NULL ORDER BY nom_dpto FOREACH pagar INTO kdepartamento, kdescripcion CALL pdepartamento.additem(kdepartamento, kdescripcion) END FOREACH END FUNCTION