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

535 lines
17 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : IPPRRP410
OBJETIVO : COSTO DE VENTAS
PROGRAMADOR : Ing. Juan Fco. Soto
FECHA REALIZACION : MAYO 19, 2008
}
GLOBALS "ipprgb000.4gl"
DEFINE nombre_v CHAR(20)
DEFINE ventas,salir CHAR(1),
l SMALLINT
MAIN
DEFER INTERRUPT
CALL pantalla()
CALL ipprrp410()
END MAIN
FUNCTION ipprrp410()
DEFINE select_ac,select_ant,select_p CHAR(1000)
DEFINE idx_ac,ano,idx_a,idx_c SMALLINT
DEFINE ano_act,c_ano CHAR(4)
DEFINE fecha_2 CHAR(8)
DEFINE fecha_ini_per CHAR(8)
DEFINE acumulado_a RECORD
cod_mov LIKE iptb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
consumo LIKE iptb00006.cantidad_2
END RECORD
DEFINE acumulado_ac RECORD
cod_mov LIKE iptb00005.cod_mov,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
consumo DECIMAL(12,5),
cantidad DECIMAL(12,5)
END RECORD
DEFINE costos RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_Tipo SMALLINT,
cod_Sec SMALLINT,
mes CHAR(2),
material DECIMAL(12,3),
labor DECIMAL(12,3),
gastos DECIMAL(12,3)
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 LIKE iptb00002.descrip_esp,
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)
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ipfmrp004 FROM "ipfmrp004"
DISPLAY FORM ipfmrp004
CALL pantalla()
DISPLAY "ipprrp004" 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
ON KEY (F2)
RUN "copy pantalla.bat impresion.bat"
DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED)
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 c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec
FROM cod_n,cod_grupo,cod_tipo,cod_sec
ON KEY (F2)
RUN "copy pantalla.bat impresion.bat"
DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED)
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET select_ac =
"SELECT d.ventas,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, ",
" SUM(c.cantidad) ",
"FROM vetb00002 d,vetb00003 c ",
"WHERE ",criterio clipped," and d.fecha_factura between ? and ? and ",
" c.factura = d.factura AND ",
" c.cod_cia = d.cod_cia AND ",
" d.ventas = '",ventas,"' AND ",
" c.status_t is NULL ",
"GROUP BY 1,2,3,4,5 ORDER BY 1,2,3,4,5 "
DISPLAY "<< Estoy Buscando Ventas Del Periodo Dado >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_ant FROM select_ac
DECLARE actual SCROLL CURSOR FOR busca_ant
OPEN actual USING datos_cons.fech_in,datos_cons.fech_fi
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)
LET select_p =
"SELECT c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, ",
"MAX(c.mes_fin),c.material,c.labor,c.gastos,MAX(c.mes_ini) ",
"FROM iptb00004 c ",
"WHERE c.ventas = '1' and c.ano = ? and c.status_t is NULL ",
"GROUP BY 1,2,3,4,6,7,8 ORDER BY 1,2,3,5 "
DISPLAY "<< Estoy Buscando Los Costos de Los Productos >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca_p FROM select_p
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
DECLARE periodo SCROLL CURSOR FOR busca_p
OPEN periodo USING ano_act
DISPLAY " "
AT 19,14
LET SELEC = "SELECT a.cod_cia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, ",
" a.descrip_esp,a.descrip_ing,a.unidad_med ",
"FROM iptb00002 a WHERE a.status_t is null ORDER BY 2,3,4,5"
DISPLAY "<< Estoy Buscando Productos >>"
AT 19,14 ATTRIBUTE (REVERSE,BOLD)
PREPARE busca FROM selec
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
DECLARE accion SCROLL CURSOR FOR busca
OPEN accion
DISPLAY " "
AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT opera TO "C:\\archivo"
LET idx_c = 1
LET idx_a = 1
LET idx_ac = 1
WHILE status != notfound
FETCH actual INTO acumulado_ac.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
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 salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_a periodo INTO costos.*
IF status = notfound THEN
LET idx_a = 1
LET salir = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET idx_a = idx_a + 1
IF costos.cod_n = acumulado_ac.cod_n and
costos.cod_grupo = acumulado_ac.cod_grupo and
costos.cod_tipo = acumulado_ac.cod_tipo and
costos.cod_Sec = acumulado_ac.cod_Sec THEN
LET salir = "S"
LET acumulado.material = costos.material
LET acumulado.labor = costos.labor
LET acumulado.gastos = costos.gastos
ELSE
LET acumulado.material = 0
LET acumulado.labor = 0
LET acumulado.gastos = 0
END IF
IF salir = "S" THEN
LET idx_a = 1
EXIT WHILE
END IF
END WHILE
# Busqueda del Material Con su descripcion y unidad de medida
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_c accion INTO acumulado.*
IF status = notfound THEN
LET idx_c = 1
LET salir = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET idx_c = idx_c + 1
IF acumulado_ac.cod_n = acumulado.cod_n and
acumulado_ac.cod_grupo = acumulado.cod_grupo and
acumulado_ac.cod_tipo = acumulado.cod_tipo and
acumulado_ac.cod_Sec = acumulado.cod_Sec AND
acumulado_ac.cod_mov = acumulado.cod_mov THEN
LET salir = "S"
END IF
IF salir = "S" THEN
LET idx_c = 1
EXIT WHILE
END IF
END WHILE
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
OUTPUT TO REPORT opera(acumulado.*)
END WHILE
FINISH REPORT opera
CLEAR SCREEN
RUN "impresion C:\\archivo"
RUN "copy printer2.bat impresion.bat"
END FUNCTION
REPORT opera(x)
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 LIKE iptb00002.descrip_esp,
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)
END RECORD
DEFINE l SMALLINT
DEFINE c_ano1 char(4)
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(6)
DEFINE negrillas_off CHAR(6)
DEFINE comp_on CHAR(3)
DEFINE comp_off CHAR(2)
DEFINE doce CHAR(3)
DEFINE normal CHAR(2)
DEFINE hora CHAR(5)
DEFINE total_p,total_m DECIMAL(12,2)
DEFINE total_costo_st,t_t_total,t_t_t_total,
tt_total_costo_st,t_total_costo_st,t_cantidad
DECIMAL (12,2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
ORDER BY x.cod_mov,x.cod_cia,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 27,ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = time
PRINT comp_on
LET l = (141 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, "ipprrp004",
COLUMN l, p_companias.nombre CLIPPED,
COLUMN 134, "Pag. ",pageno using "###"
PRINT COLUMN 54, "Sistema de Inventario de Productos",
COLUMN 134, today using "dd/mm/yyyy"
PRINT COLUMN 47, "Operacion por Movimiento Detallado y Valorizado",
COLUMN 137, hora
LET l = (141 - LENGTH(nombre_v)) / 2
IF ventas = "1" THEN
PRINT COLUMN l, nombre_v
ELSE
PRINT COLUMN l, nombre_v
END IF
SKIP 1 LINES
PRINT COLUMN 2, "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
COLUMN 21, "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-------------------------------------------"
PRINT COLUMN 70, "Valor",
COLUMN 99, "Valor",
COLUMN 121, "Valor",
COLUMN 137, "Valor"
PRINT COLUMN 1, "Producto",
COLUMN 45, "Cantidad",
COLUMN 59, "Material",
COLUMN 70, "Material",
COLUMN 84, "Labor",
COLUMN 99, "Labor",
COLUMN 109, "Gasto",
COLUMN 121, "Gasto",
COLUMN 137, "Total"
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"-------------------------------------------"
BEFORE GROUP OF x.cod_n
LET t_total_costo_st = 0
BEFORE GROUP OF x.cod_mov
LET t_cantidad = 0
LET t_t_t_total = 0
LET total_costo_st = 0
LET tt_total_costo_st = 0
LET t_t_total = 0
SELECT a.descripcion INTO x.descrip_mov FROM vetb00061 a
WHERE a.ventas = x.cod_mov
PRINT COLUMN 1, negrillas_on,"Movimiento: ",x.cod_mov using "&&",
" ",x.descrip_mov CLIPPED,negrillas_off
SKIP 1 LINE
LET total_m = 0
BEFORE GROUP OF x.cod_cia
IF x.cod_cia = "1" THEN
PRINT "PRODUCTO LOCAL"
ELSE
PRINT "PRODUCTO IMPORTADO"
END IF
ON EVERY ROW
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 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
PRINT COLUMN 1, x.cod_n USING "&&","-",x.cod_grupo USING "&&","-",
x.cod_tipo USING "&&&","-",x.cod_sec USING "&&&"," ",
x.descrip_esp[1,30],
COLUMN 42, x.consumo USING "###,###.###",
COLUMN 54, x.material using "##,###.###",
COLUMN 65, x.consumo*x.material USING "#,###,###.###",
COLUMN 79, x.labor using "##,###.###",
COLUMN 90, x.consumo*x.labor USING "#,###,###.###",
COLUMN 104, x.gastos using "##,###.###",
COLUMN 115, x.consumo * x.gastos using "#,###,###.###",
COLUMN 129, total_costo_st using "##,###,###.##"
END IF
AFTER GROUP OF x.cod_n
PRINT negrillas_on
PRINT COLUMN 40, "-------------",
COLUMN 65, "-------------",
COLUMN 90, "-------------",
COLUMN 115, "-------------",
COLUMN 129, "-------------"
PRINT COLUMN 3, "Total Tipo --->",
COLUMN 40, GROUP SUM(x.consumo) USING "#,###,###.###",
COLUMN 65, GROUP SUM(x.consumo*x.material) USING "#,###,###.###",
COLUMN 90, GROUP SUM(x.consumo*x.labor) USING "#,###,###.###",
COLUMN 115, GROUP SUM(x.consumo * x.gastos) using "#,###,###.###",
COLUMN 129, t_total_costo_st USING "##,###,###.##"
SKIP 1 LINE
LET tt_total_costo_st = t_total_costo_st + tt_total_costo_st
PRINT negrillas_off
AFTER GROUP OF x.cod_mov
PRINT negrillas_on
PRINT COLUMN 40, "-------------",
COLUMN 65, "-------------",
COLUMN 90, "-------------",
COLUMN 115, "-------------",
COLUMN 129, "-------------"
PRINT COLUMN 3, "Total ---->",
COLUMN 40, GROUP SUM(x.consumo) USING "#,###,###.###",
COLUMN 65, GROUP SUM(x.consumo*x.material) USING "##,###,###.###",
COLUMN 90, GROUP SUM(x.consumo*x.labor) USING "#,###,###.###",
COLUMN 115, GROUP SUM(x.consumo * x.gastos) using "#,###,###.###",
COLUMN 129, tt_total_costo_st USING "##,###,###.##"
PRINT COLUMN 129, "============="
PRINT negrillas_off
SKIP TO TOP OF PAGE
END REPORT
FUNCTION pantalla()
DEFINE fecha CHAR(10),
hora char(5)
SELECT a.* INTO p_companias.* FROM companias a
LET fecha = today USING "dd/mm/yyyy"
LET hora = time
LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2
DISPLAY p_companias.nombre CLIPPED AT 4,l ATTRIBUTE (REVERSE,BLUE)
DISPLAY fecha AT 4,68 ATTRIBUTE (BLUE)
DISPLAY "Sistema Inventario de Productos" AT 5,25
DISPLAY hora AT 6,73 ATTRIBUTE(BLUE)
CALL fgl_drawbox(5,79,3,1)
# CALL fgl_drawbox(1,79,22,1)
END FUNCTION