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