{------------------------------------------------------------------------------ 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 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 seleccionarsalida() 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