Files
MBS/PROYECTOS/ipdir/ipprrp047.4gl
T

509 lines
18 KiB
Plaintext

{------------------------------------------------------------------------------
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