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

514 lines
16 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : PRPRRP012
OBJETIVO : Produccion Comparada
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Oct. 07, 1994
-------------------------------------------------------------------------------
}
GLOBALS "prprgb000.4gl"
DEFINE nomenclat ARRAY[100] OF CHAR(11)
DEFINE cantidad1 ARRAY[3000,100] OF DECIMAL(12,2)
DEFINE cantidad2 ARRAY[3,3] OF DECIMAL(12,2)
DEFINE nome,nome1 CHAR(1)
DEFINE mes_p CHAR(10)
DEFINE m,i,ano_i,ano,mes INTEGER
DEFINE ano3,ano4,ano1,ano2 CHAR(4)
DEFINE fecha1,fecha2,fecha3,fecha4 DATE
DEFINE total2,total1,cantidad3,cantidad4,total DECIMAL(12,2)
DEFINE fecha_inicial,fecha_final DATE
FUNCTION prprrp012()
#WHENEVER ERROR CONTINUE
DEFINE prt_datos12 RECORD
nomenclatura CHAR(11),
ano CHAR(4),
mes SMALLINT,
cantidad DECIMAL(12,2)
END RECORD
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM prfmrp012 FROM "prfmrp006"
DISPLAY FORM prfmrp012
CALL pantalla()
DISPLAY "prprrp012" AT 4,3
DISPLAY "Produccion Ano Actual vs Ano Anterior" AT 6,21
LET tipo_papel = 2
CALL msgrp000(tipo_papel)
########### Captura de valores para el criterio de busqueda ############
INPUT BY NAME ano,mes
AFTER FIELD ano
IF ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
LET ano_i= ano - 1
LET ano1 = ano USING "&&&&"
LET ano2 = ano - 1 USING "&&&&"
LET ano3 = ano USING "&&&&"
LET ano4 = ano - 1 USING "&&&&"
AFTER FIELD mes
IF ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
SELECT a.fecha_corte INTO fecha1 FROM prdtable a
WHERE a.ano = ano AND a.mes = mes
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
DECLARE busca CURSOR FOR
SELECT UNIQUE c.nomenclatura FROM iptb00002 c
WHERE c.cod_n = 3 ORDER BY 1
DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14
START REPORT reporte_12 TO "C:\\archivo"
DISPLAY "Impresion En Proceso... Espere Por Favor" AT 19,14
LET l = 0
FOREACH busca INTO prt_datos12.*
LET prt_datos12.cantidad = 0
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET l = l + 1
LET nomenclat[l] = prt_datos12.nomenclatura
FOR j = ano_i TO ano
LET ano1 = j USING "&&&&"
LET cantidad1[j,l] = 0
FOR i = 1 TO mes
LET prt_datos12.ano = ano1
LET prt_datos12.mes = i
LET prt_datos12.cantidad = 0
SELECT a.fecha_inicio,a.fecha_corte INTO fecha1,fecha2 FROM prdtable a
WHERE a.ano = ano1 AND a.mes = i
SELECT SUM(b.cantidad_2/1000) INTO prt_datos12.cantidad
FROM iptb00006 b,iptb00002 c
WHERE b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND
b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND
b.fecha BETWEEN fecha1 AND fecha2 AND b.cod_mov = 20 AND
b.status_t IS NULL AND c.nomenclatura = prt_datos12.nomenclatura
IF prt_datos12.cantidad IS NULL THEN
LET prt_datos12.cantidad = 0
END IF
LET cantidad1[j,l] = cantidad1[j,l] + prt_datos12.cantidad
DISPLAY " " AT 20,14
DISPLAY prt_datos12.nomenclatura," ",ano1," ",i USING "&&" AT 20,14
OUTPUT TO REPORT reporte_12(prt_datos12.*)
END FOR
END FOR
END FOREACH
FINISH REPORT reporte_12
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
# Rutina de Impresion de las informaciones
REPORT reporte_12(x)
# Variable para tomar las informaciones
DEFINE x RECORD
nomenclatura CHAR(10),
ano CHAR(4),
mes SMALLINT,
cantidad DECIMAL(12,2)
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.mes,x.ano DESC,x.nomenclatura
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
# Impresion de los encabezados
LET j = 12
FOR i = 1 TO l
LET j = j + 11
END FOR
LET j = j + 13
FOR i = 1 TO l
LET j = j + 11
END FOR
LET j = j + 13
LET k = ((j-45)/2) + 1
PRINT comp_on
PRINT COLUMN 1, "prprrp012",
COLUMN k, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN j-8, "Pag. ",pageno using "###"
PRINT COLUMN k, " Sistema de Produccion",
COLUMN j-8, today using "dd/mm/yy"
PRINT COLUMN k, " PRODUCCION ANO ACTUAL VS ANO ANTERIOR",
COLUMN j-5, hora
SKIP 1 LINE
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
PRINT COLUMN (k+45)/2, ano3,
COLUMN ((k+45)/2) + k, ano4
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
LET j = 12
FOR i = 1 TO l
LET j = j + 11
LET nome = nomenclat[i]
LET nome1= nomenclat[i+1]
IF nome="D" OR nome1 = "D" THEN
LET nome = "C"
LET nome1= "C"
END IF
IF nome != nome1 OR i = (l-1) THEN
IF nome = "A" THEN
PRINT COLUMN j-11," D | "," ";
END IF
IF nome = "B" THEN
PRINT COLUMN j-11," C | "," ";
END IF
IF nome = "C" THEN
PRINT COLUMN j," AA | "," ";
END IF
END IF
END FOR
PRINT COLUMN j," ||";
LET j = j + 13
FOR i = 1 TO l
LET j = j + 11
LET nome = nomenclat[i]
LET nome1= nomenclat[i+1]
IF nome="D" OR nome1 = "D" THEN
LET nome = "C"
LET nome1= "C"
END IF
IF nome != nome1 OR i = (l-1) THEN
IF nome = "A" THEN
PRINT COLUMN j-11," D | "," ";
END IF
IF nome = "B" THEN
PRINT COLUMN j-11," C | "," ";
END IF
IF nome = "C" THEN
PRINT COLUMN j," AA | "," ";
END IF
END IF
END FOR
PRINT COLUMN j," ||"
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
PRINT COLUMN 1,"MES ";
LET j = 15
FOR i = 1 TO l
PRINT COLUMN j,nomenclat[i] CLIPPED;
LET j = j + 11
END FOR
PRINT COLUMN j," TOTAL||";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,nomenclat[i] CLIPPED;
LET j = j + 11
END FOR
PRINT COLUMN j," TOTAL||"
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
BEFORE GROUP OF x.mes
CASE
WHEN x.mes = 1 LET mes_p = "ENERO " EXIT CASE
WHEN x.mes = 2 LET mes_p = "FEBRERO " EXIT CASE
WHEN x.mes = 3 LET mes_p = "MARZO " EXIT CASE
WHEN x.mes = 4 LET mes_p = "ABRIL " EXIT CASE
WHEN x.mes = 5 LET mes_p = "MAYO " EXIT CASE
WHEN x.mes = 6 LET mes_p = "JUNIO " EXIT CASE
WHEN x.mes = 7 LET mes_p = "JULIO " EXIT CASE
WHEN x.mes = 8 LET mes_p = "AGOSTO " EXIT CASE
WHEN x.mes = 9 LET mes_p = "SEPTIEMBRE" EXIT CASE
WHEN x.mes = 10 LET mes_p = "OCTUBRE " EXIT CASE
WHEN x.mes = 11 LET mes_p = "NOVIEMBRE " EXIT CASE
WHEN x.mes = 12 LET mes_p = "DICIEMBRE " EXIT CASE
END CASE
PRINT COLUMN 1, mes_p;
LET j = 12
BEFORE GROUP OF x.ano
LET total = 0
AFTER GROUP OF x.nomenclatura
PRINT COLUMN j, x.cantidad USING "###,###.##"," ";
LET j = j + 11
LET total = total + x.cantidad
AFTER GROUP OF x.ano
PRINT COLUMN j, total USING "###,###.##","|| ";
LET j = j + 13
AFTER GROUP OF x.mes
PRINT COLUMN j," "
ON LAST ROW
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
PRINT COLUMN 1,"ACUMULADO ";
LET total = 0
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,cantidad1[ano,i] USING "###,###.##"," ";
LET j = j + 11
LET total = total + cantidad1[ano,i]
END FOR
PRINT COLUMN j,total USING "###,###.##","|| ";
LET total1 = total
LET total = 0
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,cantidad1[ano_i,i] USING "###,###.##"," ";
LET j = j + 11
LET total = total + cantidad1[ano_i,i]
END FOR
PRINT COLUMN j,total USING "###,###.##","|| "
LET total2 = total
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
LET cantidad2[1,1] = 0
LET cantidad2[1,2] = 0
LET cantidad2[1,3] = 0
LET cantidad2[2,1] = 0
LET cantidad2[2,2] = 0
LET cantidad2[2,3] = 0
PRINT COLUMN 1,"COMP./TIPO ";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,((cantidad1[ano,i]-cantidad1[ano_i,i])/
cantidad1[ano_i,i])*100
USING "((,(((.##)"," ";
LET j = j + 11
LET nome = nomenclat[i]
IF nome = "A" THEN
LET cantidad2[1,1] = cantidad2[1,1] + cantidad1[ano,i]
END IF
IF nome = "B" THEN
LET cantidad2[1,2] = cantidad2[1,2] + cantidad1[ano,i]
END IF
IF nome = "C" OR nome = "D" THEN
LET cantidad2[1,3] = cantidad2[1,3] + cantidad1[ano,i]
END IF
END FOR
PRINT COLUMN j," ","|| ";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j, " "," ";
LET j = j + 11
LET nome = nomenclat[i]
IF nome = "A" THEN
LET cantidad2[2,1]=cantidad2[2,1]+cantidad1[ano_i,i]
END IF
IF nome = "B" THEN
LET cantidad2[2,2]=cantidad2[2,2]+cantidad1[ano_i,i]
END IF
IF nome = "C" OR nome = "D" THEN
LET cantidad2[2,3]=cantidad2[2,3]+cantidad1[ano_i,i]
END IF
END FOR
PRINT COLUMN j," "," "
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
LET j = 12
PRINT COLUMN 1,"COMP-TAMANO";
FOR i = 1 TO l
LET j = j + 11
LET nome = nomenclat[i]
LET nome1= nomenclat[i+1]
IF nome="D" OR nome1 = "D" THEN
LET nome = "C"
LET nome1= "C"
END IF
IF nome != nome1 OR i = (l-1) THEN
IF nome = "A" THEN
PRINT COLUMN j-11,((cantidad2[1,1]-cantidad2[2,1])/cantidad2[2,1])
*100 USING "((,(((.##)"," ";
END IF
IF nome = "B" THEN
PRINT COLUMN j-11,((cantidad2[1,2]-cantidad2[2,2])/cantidad2[2,2])
*100 USING "((,(((.##)"," ";
END IF
IF nome = "C" THEN
PRINT COLUMN j,((cantidad2[1,3]-cantidad2[2,3])/cantidad2[2,3])
*100 USING "((,(((.##)"," ";
END IF
END IF
END FOR
PRINT COLUMN j," ","|| "
PRINT COLUMN 1,"-----------";
LET j = 12
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------";
LET j = j + 13
FOR i = 1 TO l
PRINT COLUMN j,"-----------";
LET j = j + 11
END FOR
PRINT COLUMN j,"-------------"
PRINT comp_off
END REPORT