{ ------------------------------------------------------------------------------- PROGRAMA : IRPRRP030 OBJETIVO : REPUESTOS SIN CONSUMO EN ? DIAS PROGRAMADOR : Juan F. Soto FECHA REALIZACION : Septiembre 20, 1996. ------------------------------------------------------------------------------- } GLOBALS "irprgb000.4gl" DEFINE ano_c,p_mes,dias SMALLINT, fecha1,fecha_hoy DATE MAIN DEFER INTERRUPT SELECT * INTO p_companias.* FROM companias CALL irprrp030() END MAIN FUNCTION irprrp030() ### Variable de los datos del reporte DEFINE materia RECORD cod_n LIKE intb00002.cod_n, cod_grupo LIKE intb00002.cod_grupo, cod_tipo LIKE intb00002.cod_tipo, cod_sec LIKE intb00002.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, fecha LIKE irtb00006.fecha, existencia LIKE irtb00002.existencia, costo LIKE irtb00013.costo_st, compra LIKE irtb00006.cantidad_2, ult_consumo LIKE irtb00006.cantidad_2 END RECORD, dia_ult SMALLINT, fecha_ult DATE #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM irfmrp030 FROM "irfmrp030" DISPLAY FORM irfmrp030 CALL pantalla() DISPLAY "irprrp030" AT 4,3 DISPLAY "Repuestos Sin Consumo En X Dias" AT 6,22 LET tipo_papel = 2 CALL msgrp000(tipo_papel) INPUT BY NAME dias AFTER FIELD dias IF dias IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD dias 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 b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec ### Proceso Para Cancelar Reportes IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET fecha_hoy = TODAY USING "dd/mm/yy" LET fecha1 = fecha_hoy - dias ## Buscando Informacion Dependiendo del tipo deseado LET SELEC = "SELECT UNIQUE b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, ", " b.descrip_esp[1,30],b.unidad_med,MAX(a.fecha) ", "FROM intb00001 b,irtb00006 a, irtb00005 c ", "WHERE (b.cod_n = a.cod_n AND b.cod_grupo = a.cod_grupo AND ", " b.cod_tipo = a.cod_tipo AND b.cod_sec = a.cod_sec) AND ", criterio clipped," and (a.status_t IS NULL) AND (b.status_t IS NULL) ", " AND (a.num_doc = a.num_doc AND a.cod_mov = c.cod_mov) ", " AND c.status_mov = 2 ", "GROUP BY 1,2,3,4,5,6 ", "ORDER BY 1,2,3,4 " DISPLAY "<< Buscando Informacion ... Espere Por Favor >>" AT 17,14 ATTRIBUTE (BOLD) PREPARE busca FROM selec DECLARE accion CURSOR FOR busca OPEN accion LET selec1 = "SELECT COUNT(*) ", "FROM intb00001 b,irtb00006 a, irtb00005 c ", "WHERE (b.cod_n = a.cod_n AND b.cod_grupo = a.cod_grupo AND ", " b.cod_tipo = a.cod_tipo AND b.cod_sec = a.cod_sec) AND ", criterio clipped," and (a.status_t IS NULL) AND (b.status_t IS NULL) ", " AND (a.num_doc = a.num_doc AND a.cod_mov = c.cod_mov) ", " AND c.status_mov = 2 " PREPARE comando1 FROM selec1 DECLARE busca1 CURSOR FOR comando1 OPEN busca1 START REPORT reporte_30 TO "c:\\archivo" DISPLAY "<< Reporte Generandose... Espere Por Favor >>" AT 17,14 ATTRIBUTE (BOLD) FETCH busca1 INTO regi DISPLAY " " AT 17,14 LET p_param = "S" WHILE status != notfound FETCH accion INTO materia.* 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 CALL termometro(regi,p_param) LET p_param = "N" LET materia.existencia = 0 LET materia.compra = 0 LET materia.ult_consumo = 0 LET dia_ult = 0 IF fecha_hoy - materia.fecha >= dias THEN # Busca la existencia del repuesto actual SELECT SUM(a.cantidad_2) INTO materia.existencia FROM irtb00006 a WHERE (a.cod_n = materia.cod_n AND a.cod_grupo = materia.cod_grupo AND a.cod_tipo = materia.cod_tipo AND a.cod_sec = materia.cod_sec) AND (a.status_t IS NULL) IF materia.existencia IS NULL THEN LET materia.existencia = 0 END IF # Busca el compra a partir de los dias que el usuario proporcione # hasta la fecha del reporte SELECT SUM(a.cantidad_2) INTO materia.compra FROM irtb00006 a WHERE (a.cod_n = materia.cod_n AND a.cod_grupo = materia.cod_grupo AND a.cod_tipo = materia.cod_tipo AND a.cod_sec = materia.cod_sec AND a.fecha between fecha1 AND fecha_hoy) AND (a.num_doc=a.num_doc AND a.cod_mov IN (1,2)) AND (a.status_t IS NULL) IF materia.compra IS NULL THEN LET materia.compra = 0 END IF # Busca el ultimo Consumo del Repuesto SELECT MAX(a.fecha),MIN(a.cantidad_2) INTO fecha_ult,materia.ult_consumo FROM irtb00006 a ,irtb00005 b WHERE (a.cod_n = materia.cod_n AND a.cod_grupo = materia.cod_grupo AND a.cod_tipo = materia.cod_tipo AND a.cod_sec = materia.cod_sec AND a.fecha < fecha1 ) AND (a.num_doc=a.num_doc AND a.cod_mov = b.cod_mov) AND b.status_mov = 2 AND (a.status_t IS NULL) IF materia.ult_consumo IS NULL THEN LET materia.ult_consumo = 0 END IF IF fecha_ult IS NULL THEN LET fecha_ult = fecha_hoy END IF LET dia_ult = fecha_hoy - fecha_ult # Busca el costo del repuesto LET ano_c = YEAR(fecha_hoy) SELECT MAX(a.mes_fin) INTO p_mes FROM irtb00013 a WHERE (a.cod_n = materia.cod_n and a.cod_grupo = materia.cod_grupo and a.cod_tipo = materia.cod_tipo and a.cod_sec = materia.cod_sec) and (a.ano = ano_c) and a.status_t is null SELECT a.costo_st INTO materia.costo FROM irtb00013 a WHERE (a.cod_n = materia.cod_n and a.cod_grupo = materia.cod_grupo and a.cod_tipo = materia.cod_tipo and a.cod_sec = materia.cod_sec) and (a.ano = ano_c and a.mes_fin = p_mes) and a.status_t is null IF status = notfound THEN LET status = 0 END IF # IF materia.existencia > 0 THEN OUTPUT TO REPORT reporte_30(materia.*,dia_ult) # END IF END IF END WHILE FINISH REPORT reporte_30 CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT reporte_30(x,dias1) DEFINE x RECORD cod_n LIKE intb00002.cod_n, cod_grupo LIKE intb00002.cod_grupo, cod_tipo LIKE intb00002.cod_tipo, cod_sec LIKE intb00002.cod_sec, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, fecha LIKE irtb00006.fecha, existencia LIKE irtb00002.existencia, costo LIKE irtb00013.costo_st, compra LIKE irtb00006.cantidad_2, ult_consumo LIKE irtb00006.cantidad_2 END RECORD, dias1 SMALLINT, doble_on,doble_off,negrillas_on,negrillas_off,comp_on,comp_off, normal,doce CHAR(3), hora CHAR(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 4 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 15 #LET comp_off = ASCII 18 #LET doce = ASCII 27, ASCII 77 #LET normal = ASCII 27, ASCII 80 LET negrillas_on = ASCII 027, ASCII 098 LET negrillas_off = ASCII 027, ASCII 099 LET comp_on = ASCII 31 LET comp_off = ASCII 029 LET doce = ASCII 030 LET normal = ASCII 029 LET hora = time PRINT COLUMN 1, comp_off,doce ,negrillas_on PRINT COLUMN 1, "irprrp030", COLUMN 65, " M A R M O T E C H S. A.", COLUMN 145, "Pag. ",PAGENO USING "###" PRINT COLUMN 65, " Sistema de Inventario de Repuestos ", COLUMN 145, TODAY USING "dd/mm/yy" PRINT COLUMN 65, " Repuestos Sin Consumo En ",dias USING "<<<", " dias", COLUMN 148, hora PRINT COLUMN 1, "Fecha de Corte: ", TODAY USING "dd/mm/yy" #PRINT comp_on PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------------------------------------------------" PRINT COLUMN 130, "CANTIDAD" PRINT COLUMN 65, "COSTO", COLUMN 85, "EXISTENCIA", COLUMN 100, "VALOR", COLUMN 115, "COMPRA", COLUMN 130, "ULTIMO" PRINT COLUMN 1, "CODIGO", COLUMN 12, "DESCRIPCION ", COLUMN 45, "UNIDAD", COLUMN 65, "UNITARIO", COLUMN 85, "ACTUAL", COLUMN 100, "EXISTENCIA", COLUMN 115, "PERIODO", COLUMN 130, "CONSUMO", COLUMN 145, "NO. DIAS" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------------------------------------------------" PRINT COLUMN 1, negrillas_off ON EVERY ROW PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-", x.cod_tipo USING "&&","-",x.cod_sec USING "&&&", COLUMN 12, x.descrip_esp , COLUMN 45, x.unidad_med , COLUMN 62, x.costo USING "###,###.###", COLUMN 85, x.existencia USING "#,###", COLUMN 96, x.costo * x.existencia USING "#,###,###.##", COLUMN 112, x.compra USING "##,###.##", COLUMN 127, x.ult_consumo USING "#,###.##", COLUMN 145, dias1 USING "#,###" ON LAST ROW SKIP 1 LINE PRINT COLUMN 96, "------------" PRINT COLUMN 3, "Total ===> ", COLUMN 96, SUM(x.costo * x.existencia) USING "#,###,###.##" PRINT COLUMN 1, "====================================================", "=================================================" PRINT comp_off,normal END REPORT