{ ------------------------------------------------------------------------------- PROGRAMA : INPRRP035 OBJETIVO : Valorizacion de Inventario Metodo UEPS PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Septiembre 20/ 1995 ------------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" DEFINE fecha1,fecha2 DATE, p_cantidad,valor1 DECIMAL(12,2), p_mes1,p_ano1 SMALLINT ####### Definicion de variables a usar en el reporte ####### # Costo de la materia prima DEFINE reg_rep35 RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(3), precio DECIMAL(20,4), codigo CHAR(7) END RECORD # Variables para asignarles los selects DEFINE selec8,selec9,selec4 CHAR(1000) # Bandera para utilizarla en los loops de busqueda DEFINE salir,salir1,salir2 CHAR(1) # Indices de busqueda de las informaciones DEFINE idx_1,idx_2,idx1,i,j,k INTEGER FUNCTION inprrp035() #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmrp035 FROM "infmrp034" DISPLAY FORM infmrp035 CALL pantalla() DISPLAY "inprrp035" AT 4,3 DISPLAY "Valorizacion de Inventario Metodo UEPS" AT 6,23 LET tipo_papel = 1 CALL msgrp000(tipo_papel) ########### Captura de valores para el criterio de busqueda ############ INPUT BY NAME p_mes1,p_ano1 AFTER FIELD p_mes1 IF p_mes1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_mes1 END IF AFTER FIELD p_ano1 IF p_ano1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_ano1 END IF SELECT a.fecha_inicio INTO fecha1 FROM prdtable a WHERE a.mes = 1 AND a.ano = p_ano1 LET fecha1 = fecha1 - 1 SELECT a.fecha_corte INTO fecha2 FROM prdtable a WHERE a.mes = p_mes1 AND a.ano = p_ano1 DISPLAY BY NAME fecha1,fecha2 END INPUT ########### Facilidad para cancelar la variacioncon la tecla DELETE #### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF # Busqueda del inventario inicial de cada materia prima LET selec4 = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,", " b.descrip_esp,b.unidad_med ", "FROM intb00002 a, intb00001 b ", "WHERE (a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec) AND ", " a.status_t IS NULL AND ", criterio CLIPPED, " ORDER BY 1,2,3,4" DISPLAY "<>" AT 17,14 ATTRIBUTE(REVERSE,BOLD) PREPARE comando4 FROM selec4 DECLARE stand CURSOR FOR comando4 START REPORT reporte_35 TO "C:\\archivo" DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 17,14 ATTRIBUTE (REVERSE) # Loop inicial de busqueda de las informaciones de la materia prima FOREACH stand INTO reg_rep35.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET reg_rep35.codigo = reg_rep35.cod_n USING "&", reg_rep35.cod_grupo USING "&", reg_rep35.cod_tipo USING "&&", reg_rep35.cod_sec USING "&&&" OUTPUT TO REPORT reporte_35(reg_rep35.*) END FOREACH FINISH REPORT reporte_35 CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION # Rutina de Impresion de las informaciones REPORT reporte_35(x) # Variable para tomar las informaciones DEFINE x RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(3), precio DECIMAL(20,4), codigo CHAR(7) END RECORD # Vaiables para la impresion de caracters ASCII DEFINE fech1,fech2 DATE, doble_on,doble_off,comp_on,comp_off,doce,normal CHAR(3), negrillas_on,negrillas_off CHAR(6), hora CHAR(5), total_costo,total_valor,cant_total,capa_mas, balance_final DECIMAL(12,2), costo_ant DECIMAL(10,4) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 FORMAT PAGE HEADER # Validacion de los caracteres ascii 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 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = time # Impresion de los encabezados LET lj = (117 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT comp_on,negrillas_on PRINT COLUMN 1, "inprrp035", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 110, "Pag. ",pageno using "###" PRINT COLUMN 35, " Sistema de Inventario de Materia Prima", COLUMN 110, today using "dd/mm/yyyy" PRINT COLUMN 35, " Valorizacion de Inventario Metodo UEPS", COLUMN 113, hora PRINT COLUMN 1,"Periodo: DEL ",fecha1 USING "dd/mm/yyyy", " AL ",fecha2 USING "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------------" PRINT COLUMN 1, "Material", COLUMN 70, "Costo", COLUMN 96, "Balance", COLUMN 113, "Valor" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------------" PRINT negrillas_off BEFORE GROUP OF x.cod_sec IF total_valor IS NULL THEN LET total_valor = 0 END IF LET total_costo = 0 LET cant_total = 0 LET costo_ant = 0 # BUSCA EL BALANCE INICIAL DEL MATERIAL SELECT SUM(a.cantidad_2) INTO cant_total FROM intb00006 a WHERE (a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec) AND (a.fecha <= fecha1) AND (a.status_t IS NULL) IF cant_total IS NULL THEN LET cant_total = 0 END IF #BUSCA EL BALANCE FINAL DEL MATERIAL SELECT SUM(a.cantidad_2) INTO balance_final FROM intb00006 a WHERE (a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.fecha <= fecha2) AND a.status_t IS NULL IF balance_final IS NULL THEN LET balance_final = 0 END IF IF cant_total != 0 OR balance_final != 0 THEN # BUSCA EL COSTO PROMEDIO DEL BALANCE INICIAL IF cant_total != 0 THEN SELECT SUM(a.costo*a.balance) / cant_total INTO costo_ant FROM intb00010 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.fecha_ini = fecha1 END IF PRINT COLUMN 1, negrillas_on PRINT COLUMN 1, "MATERIAL: ",x.cod_n USING "&","-", x.cod_grupo USING "&","-",x.cod_tipo USING "&&", "-",x.cod_sec USING "&&&"," ",x.descrip_esp," ", x.unidad_med IF balance_final > cant_total THEN PRINT COLUMN 3, "Inventario Inicial ", COLUMN 64, costo_ant USING "##,###.####", COLUMN 88, cant_total USING "###,###,###.##", COLUMN 105, cant_total * costo_ant USING "##,###,###.##" ,negrillas_off # CUANDO SEA FIN DE ANO GENERA LOS VALORES PARA LAS SIGUIENTES CAPAS IF p_mes1 = 12 THEN DELETE FROM intb00010 WHERE fecha_ini = fecha2 INSERT INTO intb00010 VALUES (fecha2,x.cod_n, x.cod_grupo,x.cod_tipo,x.cod_sec, fecha1,x.precio,cant_total) END IF LET total_valor = total_valor + (cant_total * costo_ant) LET total_costo = total_costo + (cant_total * costo_ant) END IF END IF AFTER GROUP OF x.codigo IF cant_total != 0 OR balance_final != 0 THEN LET x.precio = costo_ant IF balance_final > cant_total THEN SELECT SUM(a.cantidad*a.costo_lq) INTO valor1 FROM cttb00013 a WHERE (a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.fecha BETWEEN fecha1+1 AND fecha2) AND a.status_t IS NULL SELECT SUM(a.cantidad) INTO p_cantidad FROM cttb00013 a WHERE (a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.fecha BETWEEN fecha1+1 AND fecha2) AND a.status_t IS NULL LET x.precio = valor1 / p_cantidad LET capa_mas = balance_final - cant_total LET total_costo = total_costo + (capa_mas * x.precio) PRINT COLUMN 3, "Nueva Capa ", COLUMN 64, x.precio USING "##,###.####", COLUMN 88, capa_mas USING "###,###,###.##", COLUMN 105, capa_mas * x.precio USING "##,###,###.##" PRINT COLUMN 88, "--------------", COLUMN 105, "-------------" PRINT COLUMN 88, balance_final USING "###,###,###.##", COLUMN 105, total_costo USING "##,###,###.##" LET total_valor = total_valor + (capa_mas * x.precio) # CUANDO SEA FINAL DEL ANO GENERA ESTOS VALORES PARA EL ANO SIGUIENTE IF p_mes1 = 12 THEN DELETE FROM intb00010 WHERE fecha_ini = fecha2 INSERT INTO intb00010 VALUES (fecha2,x.cod_n, x.cod_grupo,x.cod_tipo,x.cod_sec, fecha1,x.precio,capa_mas) END IF ELSE LET total_costo = total_costo + (balance_final * x.precio) LET total_valor = total_valor + (balance_final * x.precio) PRINT COLUMN 64, x.precio USING "##,###.####", COLUMN 88, balance_final USING "###,###,###.##", COLUMN 105, balance_final * x.precio USING "##,###,###.##" PRINT COLUMN 105, "-------------" PRINT COLUMN 105, total_costo USING "##,###,###.##" END IF SKIP 1 LINE END IF ON LAST ROW PRINT COLUMN 105, "--------------" PRINT COLUMN 80, "Total General --->", COLUMN 105, total_valor USING "###,###,###.##" PRINT comp_off LET total_valor = 0 END REPORT