{ ------------------------------------------------------------------------------- PROGRAMA : PRPRRP007 OBJETIVO : Poduccion Acumulada en un rango de anos PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Junio 22, 1994 ------------------------------------------------------------------------------- } GLOBALS "prprgb000.4gl" DEFINE jb ARRAY[10000] OF RECORD cantidad1 DECIMAL(12,2), cantidad2 DECIMAL(12,2), cantidad3 DECIMAL(12,2) END RECORD DEFINE mes_d CHAR(10) DEFINE a,ano_i,ano_f,ano,mes INTEGER DEFINE mes_b,ano1,ano2,ano3 CHAR(4) DEFINE fecha3,fecha4 DATE DEFINE cant_p1,cant_p2,cant_p3,cant_pres1,cant_pres2,cant_pres3,total, cantidad1_1,cantidad1_2,cantidad1_3 DECIMAL(12,2) DEFINE fecha_inicial,fecha_final DATE FUNCTION prprrp007() #WHENEVER ERROR CONTINUE DEFINE prt_datos7 RECORD ano CHAR(4), mes SMALLINT, fecha1 DATE, fecha2 DATE, cantidad1 INTEGER, cantidad2 INTEGER, cantidad3 INTEGER, clave CHAR(1) END RECORD OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM prfmrp007 FROM "prfmrp007" DISPLAY FORM prfmrp007 CALL pantalla() DISPLAY "prprrp007" AT 4,3 DISPLAY "Produccion Acumulada en Rango de Anos" AT 6,21 LET tipo_papel = 2 CALL msgrp000(tipo_papel) ########### Captura de valores para el criterio de busqueda ############ INPUT BY NAME ano,ano_f,mes AFTER FIELD ano IF ano IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano END IF SELECT MIN(b.ano) INTO ano1 FROM prdtable b LET ano_i = ano1 LET ano1 = NULL IF ano_i > ano THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD ano END IF LET ano_i = NULL AFTER FIELD ano_f IF ano_f IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano_f END IF IF (ano_f - ano) > 5 THEN LET numero_msg = 5 CALL msg(numero_msg) NEXT FIELD ano END IF SELECT MAX(b.ano) INTO ano_i FROM prdtable b IF ano_f > ano_i THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD ano_f END IF IF (ano - ano_f) > 5 THEN LET numero_msg = 64 CALL msg(numero_msg) NEXT FIELD ano END IF LET ano1 = ano USING "&&&&" LET ano2 = ano_f USING "&&&&" AFTER FIELD mes IF mes IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes END IF SELECT UNIQUE b.mes FROM prdtable b WHERE b.mes = mes AND b.ano = ano IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD mes END IF 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 FOR a = ano TO ano_f LET jb[a].cantidad1 = 0 LET jb[a].cantidad2 = 0 LET jb[a].cantidad3 = 0 END FOR DECLARE busca CURSOR FOR SELECT b.ano,b.mes,b.fecha_inicio,b.fecha_corte FROM prdtable b WHERE (b.ano BETWEEN ano1 AND ano2) AND b.mes <= mes ORDER BY 1,2 DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14 START REPORT reporte_7 TO "C:\\archivo" DISPLAY "Impresion En Proceso... Espere Por Favor" AT 19,14 FOREACH busca INTO prt_datos7.* LET prt_datos7.cantidad1 = 0 LET prt_datos7.cantidad2 = 0 LET prt_datos7.cantidad3 = 0 LET prt_datos7.clave = "a" SELECT SUM(cantidad_2) INTO prt_datos7.cantidad1 FROM iptb00006 WHERE fecha BETWEEN prt_datos7.fecha1 AND prt_datos7.fecha2 AND status_t IS NULL AND cod_n = 3 AND cod_grupo = 1 AND cod_mov = 20 SELECT SUM(cantidad_2) INTO prt_datos7.cantidad2 FROM iptb00006 WHERE fecha BETWEEN prt_datos7.fecha1 AND prt_datos7.fecha2 AND status_t IS NULL AND cod_n = 3 AND cod_grupo = 2 AND cod_mov = 20 SELECT SUM(cantidad_2) INTO prt_datos7.cantidad3 FROM iptb00006 WHERE fecha BETWEEN prt_datos7.fecha1 AND prt_datos7.fecha2 AND status_t IS NULL AND cod_n = 3 AND cod_grupo = 3 AND cod_mov = 20 IF prt_datos7.cantidad1 IS NULL THEN LET prt_datos7.cantidad1 = 0 END IF IF prt_datos7.cantidad2 IS NULL THEN LET prt_datos7.cantidad2 = 0 END IF IF prt_datos7.cantidad3 IS NULL THEN LET prt_datos7.cantidad3 = 0 END IF OUTPUT TO REPORT reporte_7(prt_datos7.*) END FOREACH FINISH REPORT reporte_7 RUN "type C:\\archivo > %USPRINT%" END FUNCTION # Rutina de Impresion de las informaciones REPORT reporte_7(x) # Variable para tomar las informaciones DEFINE x RECORD ano CHAR(4), mes SMALLINT, fecha1 DATE, fecha2 DATE, cantidad1 INTEGER, cantidad2 INTEGER, cantidad3 INTEGER, clave CHAR(1) END RECORD DEFINE doble_on CHAR(3) DEFINE doble_off CHAR(3) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(3) DEFINE hora CHAR(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.clave,x.mes,x.ano DESC FORMAT PAGE HEADER # Validacion de los caracteres ascii LET doble_on = ASCII 001 LET doble_off = ASCII 002 LET negrillas_on = ASCII 27, ASCII 098 LET negrillas_off = ASCII 27, ASCII 099 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 029 LET hora = time LET l = 15 FOR a = ano TO ano_f LET l = l + 36 IF a = ano THEN LET l = l + 36 END IF END FOR # Impresion de los encabezados PRINT comp_on PRINT COLUMN 1, "prprrp007", COLUMN ((l-45)/2)+1, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN l-7, "Pag. ", pageno using "###" PRINT COLUMN ((l-45)/2)+1, " Sistema de Produccion", COLUMN l-7, today using "dd/mm/yy" PRINT COLUMN ((l-45)/2)+1, " Produccion Acumulada Del Ano ",ano1," AL ",ano2, COLUMN l-5, hora SKIP 1 LINE PRINT COLUMN 1, "--------------"; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, "------------------------------------"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "------------------------------------"; LET l = l + 36 END IF END FOR PRINT COLUMN l,"-" LET l = 32 LET j = ano_f - ano FOR a = ano TO ano_f LET k = ano + j LET j = j - 1 PRINT COLUMN l, "-- ",k USING "&&&&"," --"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "PRES. ",k USING "&&&&"; LET l = l + 36 END IF END FOR PRINT COLUMN l, " " PRINT COLUMN 1, "--------------"; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, "------------------------------------"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "------------------------------------"; LET l = l + 36 END IF END FOR PRINT COLUMN l,"-" { PRINT COLUMN 1, "--------------------------------------------------------", "--------------------------------------------------------", "---------------------------------" } PRINT COLUMN 1, "Mes "; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, " D C AA"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, " D C AA"; LET l = l + 36 END IF END FOR PRINT COLUMN l," " PRINT COLUMN 1, "--------------"; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, "------------------------------------"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "------------------------------------"; LET l = l + 36 END IF END FOR PRINT COLUMN l,"-" BEFORE GROUP OF x.mes CASE WHEN x.mes = 1 LET mes_d = "ENERO" EXIT CASE WHEN x.mes = 2 LET mes_d = "FEBRERO" EXIT CASE WHEN x.mes = 3 LET mes_d = "MARZO" EXIT CASE WHEN x.mes = 4 LET mes_d = "ABRIL" EXIT CASE WHEN x.mes = 5 LET mes_d = "MAYO" EXIT CASE WHEN x.mes = 6 LET mes_d = "JUNIO" EXIT CASE WHEN x.mes = 7 LET mes_d = "JULIO" EXIT CASE WHEN x.mes = 8 LET mes_d = "AGOSTO" EXIT CASE WHEN x.mes = 9 LET mes_d = "SEPTIEMBRE" EXIT CASE WHEN x.mes = 10 LET mes_d = "OCTUBRE" EXIT CASE WHEN x.mes = 11 LET mes_d = "NOVIEMBRE" EXIT CASE WHEN x.mes = 12 LET mes_d = "DICIEMBRE" EXIT CASE END CASE LET l = 15 PRINT COLUMN 1, mes_d; ON EVERY ROW PRINT COLUMN l, x.cantidad1 USING "###,###,###", COLUMN l+12, x.cantidad2 USING "###,###,###", COLUMN l+24, x.cantidad3 USING "###,###,###"; LET l= l + 36 IF x.ano = ano_f THEN LET mes_b = ano2[3,4],x.mes USING "&&" LET cant_p1 = 0 LET cant_p2 = 0 LET cant_p3 = 0 SELECT SUM(b.cantidad) INTO cant_p1 FROM vetb00017 b WHERE b.ano = ano_f AND b.mes = mes_b AND b.cod_grupo = 1 SELECT SUM(b.cantidad) INTO cant_p2 FROM vetb00017 b WHERE b.ano = ano_f AND b.mes = mes_b AND b.cod_grupo = 2 SELECT SUM(b.cantidad) INTO cant_p3 FROM vetb00017 b WHERE b.ano = ano_f AND b.mes = mes_b AND b.cod_grupo = 3 IF cant_p1 IS NULL THEN LET cant_p1 = 0 END IF IF cant_p2 IS NULL THEN LET cant_p2 = 0 END IF IF cant_p3 IS NULL THEN LET cant_p3 = 0 END IF IF cant_pres1 IS NULL THEN LET cant_pres1 = 0 END IF IF cant_pres2 IS NULL THEN LET cant_pres2 = 0 END IF IF cant_pres3 IS NULL THEN LET cant_pres3 = 0 END IF LET cant_pres1 = cant_pres1 + cant_p1 LET cant_pres2 = cant_pres2 + cant_p3 LET cant_pres3 = cant_pres2 + cant_p3 PRINT COLUMN l, cant_p1 USING "###,###,###", COLUMN l+12, cant_p2 USING "###,###,###", COLUMN l+24, cant_p3 USING "###,###,###"; LET l = l + 36 END IF LET a = x.ano LET jb[a].cantidad1 = jb[a].cantidad1 + x.cantidad1 LET jb[a].cantidad2 = jb[a].cantidad2 + x.cantidad2 LET jb[a].cantidad3 = jb[a].cantidad3 + x.cantidad3 AFTER GROUP OF x.mes PRINT COLUMN l," " ON LAST ROW PRINT COLUMN 1, "--------------"; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, "------------------------------------"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "------------------------------------"; LET l = l + 36 END IF END FOR PRINT COLUMN l,"-" PRINT COLUMN 1, "TOTALES ---> "; LET l = 15 LET j = 0 FOR a = ano TO ano_f LET k = ano_f - j PRINT COLUMN l,jb[k].cantidad1 USING "###,###,###", COLUMN l+12,jb[k].cantidad2 USING "###,###,###", COLUMN l+24,jb[k].cantidad3 USING "###,###,###"; LET l = l + 36 IF ano_f = ano_f-j THEN PRINT COLUMN l, cant_pres1 USING "###,###,###", COLUMN l+12, cant_pres2 USING "###,###,###", COLUMN l+24, cant_pres3 USING "###,###,###"; LET l = l + 36 END IF LET j = j + 1 END FOR PRINT COLUMN l," " PRINT COLUMN 1, "--------------"; LET l = 15 FOR a = ano TO ano_f PRINT COLUMN l, "------------------------------------"; LET l = l + 36 IF a = ano THEN PRINT COLUMN l, "------------------------------------"; LET l = l + 36 END IF END FOR PRINT COLUMN l,"-" PRINT comp_off LET cant_pres1 = 0 LET cant_pres2 = 0 LET cant_pres3 = 0 END REPORT