{ ------------------------------------------------------------------------------- PROGRAMA : INPRRP029 OBJETIVO : REPORTE COMPARATIVO DE INVENTARIO PROGRAMADOR : Ing. Juan F. Soto FECHA REALIZACION : Diciembre 08, 1994. ------------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" DEFINE ano_act CHAR(4) FUNCTION inprrp029() DEFINE mes CHAR(2) DEFINE idx_ant,idx_cos,idx_act SMALLINT DEFINE salir,primera CHAR(1) DEFINE balance_in DECIMAL(12,2) DEFINE existe RECORD cod_n LIKE intb00001.cod_n, cod_grupo LIKE intb00001.cod_grupo, cod_tipo LIKE intb00001.cod_tipo, cod_sec LIKE intb00001.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, existe_act DECIMAL(10,2), costo LIKE intb00013.costo_st END RECORD DEFINE costos RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, fecha CHAR(2), costo_st LIKE intb00013.costo_st END RECORD DEFINE actual RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, balance LIKE intb00006.cantidad_2 END RECORD DEFINE anterior RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, balance LIKE intb00006.cantidad_2 END RECORD DEFINE select_cost,select_act,select_ant CHAR(1000) # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmrp29 FROM "infmrp29" DISPLAY FORM infmrp29 CALL pantalla() DISPLAY "inprrp029" AT 4,3 DISPLAY "Comparativo de Inventario" AT 6,27 LET tipo_papel = 1 CALL msgrp000(tipo_papel) LABEL vuelve: INPUT BY NAME datos_cons.fech_fi 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 LET ano_act = year(datos_cons.fech_fi) CONSTRUCT criterio ON d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec LET select_cost = "SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,max(b.mes_fin), ", " b.costo_st,b.mes_ini ", "FROM intb00013 b,intb00002 d ", "WHERE b.ano = ? and d.cod_n = b.cod_n and d.cod_grupo = b.cod_grupo and ", " d.cod_tipo = b.cod_tipo and d.cod_sec = b.cod_sec and ", criterio CLIPPED," AND b.status_t is null ", "GROUP BY 1,2,3,4,6,7 ORDER BY 1,2,3,4 " DISPLAY "<< Estoy Buscando Los Costos Actuales >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_costo FROM select_cost DECLARE material_costo SCROLL CURSOR FOR busca_costo OPEN material_costo USING ano_act DISPLAY " " AT 19,14 LET select_ant = "SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,sum(d.cantidad_2) ", "FROM intb00006 d ", "WHERE d.status_t is null and fecha <= ? AND ",criterio CLIPPED, "GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 " DISPLAY "<< Estoy Buscando Los Balances Acutales >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_ant FROM select_ant DECLARE busca_balan_ant SCROLL CURSOR FOR busca_ant OPEN busca_balan_ant USING datos_cons.fech_fi DISPLAY " " AT 19,14 LET SELEC = "SELECT d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,d.descrip_esp, ", " d.unidad_med ", "FROM intb00001 d, intb00002 b ", "WHERE d.cod_n = b.cod_n AND d.cod_grupo = b.cod_grupo AND ", " d.cod_tipo = b.cod_tipo AND d.cod_sec = b.cod_sec AND ", " d.status_t is null AND ",criterio clipped," ORDER BY 1,2,3,4" DISPLAY "<< Estoy Buscando Las Materias Primas >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca FROM selec IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE accion CURSOR FOR busca OPEN accion DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT compara TO "C:\\archivo" LET idx_ant = 1 LET idx_act = 1 LET idx_cos = 1 WHILE status != notfound FETCH accion INTO existe.* IF status = notfound THEN EXIT WHILE END IF # Busqueda de los costos actuales LET existe.existe_act = 0 LET existe.costo = 0 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_cos material_costo INTO costos.* IF status = notfound THEN LET idx_cos = 1 LET salir = "S" EXIT WHILE END IF LET idx_cos = idx_cos + 1 LET existe.costo = 0 IF costos.cod_n = existe.cod_n AND costos.cod_grupo = existe.cod_grupo AND costos.cod_tipo = existe.cod_tipo AND costos.cod_sec = existe.cod_Sec THEN LET idx_cos = 1 LET salir = "S" LET existe.costo = costos.costo_st EXIT WHILE END IF IF salir = "S" THEN LET idx_cos = 1 EXIT WHILE END IF END WHILE # Busqueda de los balances actuales LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_ant busca_balan_ant INTO anterior.* IF status = notfound THEN LET idx_ant = 1 LET salir = "S" EXIT WHILE END IF LET idx_ant = idx_ant + 1 LET existe.existe_act = 0 IF anterior.cod_n = existe.cod_n AND anterior.cod_grupo = existe.cod_grupo AND anterior.cod_tipo = existe.cod_tipo AND anterior.cod_sec = existe.cod_Sec THEN LET salir = "S" LET idx_ant = 1 IF anterior.balance IS NULL THEN LET anterior.balance = 0 END IF LET existe.existe_act = anterior.balance EXIT WHILE END IF IF salir = "S" THEN LET idx_ant = 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 compara(existe.*) END WHILE FINISH REPORT compara CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT compara(x) DEFINE x RECORD cod_n LIKE intb00001.cod_n, cod_grupo LIKE intb00001.cod_grupo, cod_tipo LIKE intb00001.cod_tipo, cod_sec LIKE intb00001.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, existe_act DECIMAL(10,2), costo LIKE intb00013.costo_st END RECORD, precio DECIMAL(8,2) DEFINE t_valor_p,t_valor_c, diferencia,valor_p,valor_c,total_c,total_p DECIMAL (12,2) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(3) DEFINE comp_off CHAR(3) DEFINE doce CHAR(3) DEFINE hora CHAR(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 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 031 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET hora = time LET lj = (120 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1,comp_on PRINT COLUMN 1, "inprrp029", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 113, "Pag. ",pageno using "###" PRINT COLUMN 37, " Sistema de Inventario de Materia Prima", COLUMN 113, today using "dd/mm/yyyy" PRINT COLUMN 37, " Comparativo de Inventario", COLUMN 116, hora PRINT COLUMN 1, "AL ",datos_cons.fech_fi using "dd/mm/yyyy" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------" PRINT COLUMN 47, "INVENTARIO" PRINT COLUMN 1, "ARTICULOS", COLUMN 47, "AL ",datos_cons.fech_fi using "dd/mm/yyyy", COLUMN 63, "PRECIO", COLUMN 75, "VALOR", COLUMN 89, "STD", COLUMN 99, "VALOR", COLUMN 117, "DIF" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------" IF total_p is null THEN LET total_p = 0 END IF SKIP 1 LINE BEFORE GROUP OF x.cod_n LET precio = 0 LET valor_p = 0 LET valor_c = 0 LET diferencia = 0 ON EVERY ROW IF total_p is null THEN LET total_p = 0 END IF IF t_valor_p is null THEN LET t_valor_p = 0 END IF IF t_valor_c is null THEN LET t_valor_c = 0 END IF SELECT avg(costo_lq) INTO precio FROM cttb00013 WHERE cod_n = x.cod_n and cod_grupo = x.cod_grupo and cod_tipo = x.cod_tipo and cod_sec = x.cod_sec and year(fecha) = ano_act and costo_lq > 0 IF precio is null THEN LET precio = 0 END IF LET valor_p = x.existe_act * precio LET valor_c = x.existe_act * x.costo LET diferencia = valor_c - valor_p PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-", x.cod_tipo USING "&&","-",x.cod_sec USING "&&&", " ",x.descrip_esp," ",x.unidad_med, COLUMN 47, x.existe_act USING "---,---,---.##", COLUMN 62, precio using "#,###.##", COLUMN 71, valor_p using "#,###,###.##", COLUMN 84, x.costo USING "#,###.####", COLUMN 95, valor_c using "#,###,###.##", COLUMN 107, diferencia USING "((,(((,((#.##)" LET t_valor_p = t_valor_p + valor_p LET t_valor_c = t_valor_c + valor_c LET total_p = total_p + diferencia ON LAST ROW PRINT COLUMN 71, "------------", COLUMN 95, "------------", COLUMN 107, "--------------" PRINT COLUMN 71, t_valor_p USING "##,###,###.##", COLUMN 95, t_valor_c using "##,###,###.##", COLUMN 107, total_p USING "(((,(((,((#.##)" LET total_p = 0 SKIP 2 LINES PRINT COLUMN 1, "==================================================", "==================================================" PRINT COLUMN 1, "Total Registros Impresos =", count(*) USING "<<<<" PRINT COLUMN 4, comp_off END REPORT