{ ------------------------------------------------------------------------------ PROGRAMA : INPRRP029 OBJETIVO : LISTAR LAS COMPRAS Y LAS EXISTENCIAS DE LA ITEMS QUE SE LIQUIDAN PROGRAMADOR : Juan F. Soto FECHA : Septiembre 29, 1994 ----------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" #DEFINE criterio,selec CHAR(300) #DEFINE idx,numero_msg SMALLINT #DEFINE articulos RECORD LIKE intb00001.* DEFINE compras RECORD LIKE cttb00013.* DEFINE costo,cost_ult,cost_pen,cost_ant LIKE intb00013.costo_st DEFINE ultima,penultima,antepenultima,existencia DECIMAL(12,2) DEFINE fecha DATE #END GLOBALS MAIN DEFER INTERRUPT CALL reporte() END MAIN FUNCTION reporte() OPTIONS ERROR LINE 24, FORM LINE 8 CALL pantalla() DISPLAY "inprrp029" AT 3,2 DISPLAY "INVENTARIO FISICO DE ITEMS VALORADOS AL REAL" AT 6,10 OPEN FORM infmrp029 FROM "infmrp029" DISPLAY FORM infmrp029 # Entrada de fecha de corte Y Cancelacion de la operacion INPUT BY NAME compras.fecha IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT BY NAME criterio ON cod_n LET selec = "SELECT * FROM intb00001 ", "WHERE ", criterio clipped, " ORDER BY 1,2,3,4" PREPARE comando FROM selec DECLARE busca CURSOR FOR comando START REPORT inventario TO "jh" FOREACH busca INTO articulos.* # Busqueda de la Existencia SELECT SUM(cantidad_2) INTO existencia FROM intb00006 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec AND fecha <= compras.fecha AND status_t is not null # Busqueda del costo standard SELECT costo_st INTO costo FROM intb00013 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec AND mes_fin = 12 and ano = year(compras.fecha) and status_t is not null # Busqueda de las 3 ultimas compras # Ultima Compra SELECT cantidad,costo_lq,MAX(fecha) INTO ultima,cost_ult,fecha FROM cttb00013 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec AND ano = year(compras.fecha) AND status_t is null IF ultima is null THEN LET ultima = 0 LET cost_ult = 0 END IF # Penultima Compra SELECT cantidad,costo_lq,MAX(fecha) INTO penultima,cost_pen,fecha FROM cttb00013 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec AND ano = year(compras.fecha) AND fecha < fecha AND status_t is null IF penultima is null THEN LET penultima = 0 LET cost_pen = 0 END IF # Antepenultima Compra SELECT cantidad,costo_lq,MAX(fecha) INTO antepenultima,cost_ant,fecha FROM cttb00013 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec AND ano = year(compras.fecha) AND fecha < fecha AND status_t is null IF antepenultima is null THEN LET antepenultima = 0 LET cost_ant = 0 END IF OUTPUT TO REPORT inventario() END FOREACH FINISH REPORT inventario END FUNCTION REPORT inventario() DEFINE valor_inv,valor_ult,valor_pen,valor_ant,valoracion_real DECIMAL(12,2), costo_promedio,cantidad1,cantidad2,cantidad3,valor1,valor2,valor3, variacion,valoracion_total,variacion_total DECIMAL(12,2) DEFINE comprime_on,comprime_of CHAR(3) OUTPUT LEFT MARGIN 0 FORMAT PAGE HEADER PRINT comprime_on PRINT "Fecha: ", today using "dd-mm-yyyy", 72 spaces, p_companias.nombre CLIPPED, 68 spaces, "Pag. ", pageno using "###&" PRINT "Hora : ", time , 72 spaces, "Sistema Control de Materiales", 64 spaces, "list_vreal" PRINT 68 spaces, "INVENTARIO FISICO DE MATERIALES VALORADOS ", "AL PRECIO REAL, AL ",fecha using "dd-mmm-yyyy" SKIP 1 line PRINT "----------------------------------------------------", "----------------------------------------------------", "----------------------------------------------------", "----------------------------------------------------", "-------------" PRINT 45 spaces, "| INVENTARIO PRECIO STANDARD ", 1 spaces, "| ", 1 spaces, "| ", 1 spaces, "| ", 1 spaces, "|| |" PRINT 45 spaces, "|---------------------------------", 1 spaces, "|---------------------------------", 1 spaces, "|---------------------------------", 1 spaces, "|--------------------------------", 1 spaces, "|| VALORACION | COSTO | |" PRINT " Codigo", 3 spaces, "Descripcion", 20 spaces, "Und", 1 spaces, "| CANTIDAD PRECIO VALOR ", 1 spaces, "| CANTIDAD PRECIO VALOR ", 1 spaces, "| CANTIDAD PRECIO VALOR ", 1 spaces, "| CANTIDAD PRECIO VALOR ", 1 spaces, "||", 1 spaces, " AL REAL | PROM | VARIACION|" PRINT "----------------------------------------------------", "----------------------------------------------------", "----------------------------------------------------", "----------------------------------------------------", "-------------" ON EVERY ROW LET valor_inv = existencia * costo LET valor_ult = ultima * cost_ult LET valor_pen = penultima * cost_pen LET valor_ant = antepenultima * cost_ant IF existencia > ultima THEN LET valoracion_real = valoracion_real + valor_ult LET cantidad1 = existencia - ultima IF cantidad1 < penultima THEN LET valor1 = cantidad1 * cost_pen ELSE LET valoracion_real = valoracion_real + valor_pen LET cantidad2 = cantidad1 - penultima IF cantidad2 < antepenultima THEN LET valor2 = cantidad2 * cost_ant ELSE LET valoracion_real = valoracion_real + valor_ant END IF END IF END IF IF existencia < ultima OR existencia = ultima THEN LET valoracion_real = existencia * cost_ult ELSE LET valoracion_real = valoracion_real + valor1 + valor2 + valor3 END IF LET valoracion_total = valoracion_total + valoracion_real IF valoracion_real != 0 THEN LET costo_promedio = valoracion_real / existencia ELSE LET costo_promedio = 0 END IF LET variacion = valor_inv - valoracion_real LET variacion_total = variacion_total + variacion PRINT 1 spaces, articulos.cod_n using "&", articulos.cod_grupo using "&", articulos.cod_tipo using "&&", articulos.cod_sec using "&&&", 2 spaces, articulos.descrip_esp, 2 spaces, articulos.unidad_med, 1 spaces, "|", existencia using "-------&.&&", 1 spaces, costo using "###&.&&&&", 1 spaces, valor_inv using "-------&.&&", 1 spaces, "|", ultima using "-------&.&&", 1 spaces, cost_ult using "###&.&&&&", 1 spaces, valor_ult using "-------&.&&", 1 spaces, "|", penultima using "-------&.&&", 1 spaces, cost_pen using "###&.&&&&", 1 spaces, valor_pen using "-------&.&&", 1 spaces, "|", antepenultima using "-------&.&&", 1 spaces, cost_ant using "###&.&&&&", 1 spaces, valor_ant using "-------&.&&", "||", valoracion_real using "-------&.&&", 1 spaces, "|", costo_promedio using "###&.&&&&", 1 spaces, "|", variacion using "-------&.&&" END REPORT { FUNCTION pantalla() DEFINE fecha CHAR(8), hora char(5) LET fecha = today USING "dd/mm/yy" LET hora = time DISPLAY p_companias.nombre CLIPPED AT 4,17 ATTRIBUTE (REVERSE,YELLOW) DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW) DISPLAY "Sistema de Compras" AT 5,31 DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW) CALL fgl_drawbox(5,79,3,1) CALL fgl_drawbox(1,79,22,1) END FUNCTION } { Esta funcion se utiliza para desplegar mensajes de errores en todos los sistemas. Esta funcion busca el mensaje deseado en la tabla "msgtable" y lo despliega en la linea de mensajes FUNCTION msg(numero_msg) DEFINE numero_msg SMALLINT DEFINE descripcion CHAR (60) SELECT desc_msg INTO descripcion FROM msgtable WHERE cod_msg = numero_msg IF status = NOTFOUND THEN LET numero_msg = 22 SELECT desc_msg INTO descripcion FROM msgtable WHERE cod_msg = numero_msg ERROR descripcion ATTRIBUTE(BOLD) ELSE ERROR descripcion ATTRIBUTE(BOLD) LET numero_msg = 0 END IF END FUNCTION }