Instruccion de Johnny: todos los directorios de fuentes de inventario deben migrarse de la carpeta temporal PROYECTOS a la carpeta real PROYECTO, ya que PROYECTOS sera eliminada. Se elimino tambien un archivo suelto sin relacion llamado "ipdir" que existia en PROYECTO (del commit inicial) y bloqueaba el nombre de la carpeta. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
535 lines
17 KiB
Plaintext
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
|