Files
MBS/PROYECTO/PRDIR/prprrp007.4gl
T

465 lines
14 KiB
Plaintext

{
-------------------------------------------------------------------------------
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