Aprender Cobol400 con practica / Learning Cobol400 with practice

Hola amigos para esta nueva entrega y buscando la linea de las maquinas de alta disponibilidad como lo es el AS/400, e decidido hacer un texto para un lenguaje de programacion como lo es cobol y mas el cobol de esta maquina. Pro ser este lenguaje orientado a las finanzas, es para lado que sera enfocado el articulo. En este articulo hare los programas en seudocodigo, cobol400, mensajes de compilacion, ejecucion y salida por impresora.

Autor: GrisUNO

Tipo: Programacion Estructurada.

Introduccion.

U
n problema de Gestion de datos comercial se caracteriza por que su entrada, salida, o ambas, son de gran volumen de datos, es decir, los archivos deinput se componen de muchos registros, los archivos de salida, por impresora estan formados por varias paginas, las pantallas tienen gran cantidad de informacion que se visualiza en ellas, pertenecen al tipo comercial toda la gama de problemas de la empresa publica, reparticiones publicas, instituciones previsionales, financieras, grandes tiendas comerciales, etc.

Un problema comercial de tipo batch es aquel en que se procesa en forma consecutiva la informacion de entrada proveniente de un archivo de input, pudiendose accesar la informacion que se encuentra en otros archivos, pero siempre existe uno solo que se proceso consecutivamente, por lo cual, tambien se le denomina como archivo primario (archivo principal). el procesamiento finalizara cuando se detecta en la lectura deregistros, la marca de Fin de fichero que se conoce como EOF (END OF FILE).

Pseudocodigo N° 1 ::::...:::...:::..::::...

Descarga el ejemplo!
este esta mejor tabulado :P

Partir.

Hacer hasta SWL = 1

Fin hacer hasta

Fin.
*RUTINAS*

[inicio]
Abrir archivos ventas-mens(e), informe(s).
Var-trab = 0
Imprimir LINTIT
CL = 6
Leer archivo ventas-mens por EOF SWL = 1
AUX-V = NVEN

[fin inicio]
*
[proceso]
Si NVEN <> AUX-V entonces

Fin si



Leer archivo ventas-mens por EOF SWL = 1

[fin proceso]
*
[rufina]


Cerrar ventas-mens, informe.

[fin rufina]
*
[calular]
NETOV = MONV / 1,19
IVA = NETO * 0,19

[fin calcular]
*
[acum-vend]
ACV-UNIV = ACV-UNIV + UNIV
ACV-NETOV = ACV-NETOV + NETOV
ACV-IVA = ACV-IVA + IVA
ACV-MONV = ACV-MONV + MONV

[fin acum-vend]
*
[imp-ldet]
LDNVEN = NVEN
LDCODPRO = CODPRO
LDFECHV = FECHV
LDUNIV = UNIV
LDNETO = NETOV
LDIVA = IVA
LDMONV = MONV
Imprimir LINDET
CL = CL + 1


[fin imp-ldet]
*
[imp-tg]
LTGUNIV = ACG-UNIV
LTGNETO = ACG-NETO
LTGIVA = ACG-IVA
LTGBRUTO = ACG-BRUTO
Imprimir LINTG

[fin imp-tg]
*
[corte-vend]
LTVNVEN = AUX-V
LTVUNIV = ACV-UNIV
LTVNETO = ACV-NETOV
LTVIVA = ACV-IVA
LTVBRUTO = ACV-BRUTO
Imprimir LINTV
CL = CL + 2


ACG-UNIV = ACG-UNIV + ACV-UNIV
ACG-NETOV = ACG-NETOV + ACV-NETOV
ACG-IVA = ACG-IVA + ACV-IVA
ACG-BRUTO = ACG-BRUTO + ACV-BRUTO

ACV-UNIV = 0
ACV-NETOV = 0
ACV-BRUTO = 0
ACV-IVA = 0

AUX-V = NVEN

[fin corte-vend]
*
[control-lin]
CL = CL + 1
Si CL >= 60 entonces
Imprimir LINTIT
CL = 6
Fin si

[fin control-lin]


Pseudocodigo N° 2 ::::...:::...:::..::::...
Descarga el ejemplo 1!

Partir.

Hacer hasta SWL = 1

Fin hacer hasta

Fin.
*RUTINAS*

[inicio]
Abrir archivos ventas-mens(e), informe(s).
Var-trab = 0
Imprimir LINTIT
CL = 6
Leer archivo ventas-mens por EOF SWL = 1
AUX-L = CODL

[fin inicio]
*
[proceso]
Si CODL <> AUX-L entonces

Fin si



Leer archivo ventas-mens por EOF SWL = 1

[fin proceso]
*
[rufina]


Cerrar ventas-mens, informe.

[fin rufina]
*
[calular]
NETOV = UNIV * PREUNI
IVA = NETOV * 0,19
BRUTOV = NETOV + IVA

[fin calcular]
*
[acum-loc]
ACL-UNIV = ACL-UNIV + UNIV
ACL-NETOV = ACL-NETOV + NETOV
ACL-IVA = ACL-IVA + IVA
ACL-BRUTOV = ACL-BRUTOV + BRUTOV

[fin acum-vend]
*
[imp-ldet]
LDCODL = CODL
LDCODPRO = CODPRO
LDFECHV = FECHV
LDUNIV = UNIV
LDNETO = NETOV
LDIVA = IVA
LDBRUTO = BRUTOV
LDPREUNI = PREUNI
Imprimir LINDET


[fin imp-ldet]
*
[imp-tg]
LTGUNIV = ACG-UNIV
LTGNETO = ACG-NETO
LTGIVA = ACG-IVA
LTGBRUTO = ACG-BRUTO
Imprimir LINTG

[fin imp-tg]
*
[corte-local]
LTUNIV = ACL-UNIV
LTNETO = ACL-NETOV
LTIVA = ACL-IVA
LTBRUTO = ACL-BRUTO

Imprimir LINTL
CL = CL + 2


ACG-UNIV = ACG-UNIV + ACL-UNIV
ACG-NETOV = ACG-NETOV + ACL-NETOV
ACG-IVA = ACG-IVA + ACL-IVA
ACG-BRUTO = ACG-BRUTO + ACL-BRUTO

ACL-UNIV = 0
ACL-NETOV = 0
ACL-BRUTO = 0
ACL-IVA = 0

AUX-L = CODL

[fin corte-vend]
*
[nomlocal]
I = AUX-L / 10
LTLOCAL = VECNOML(I)

[Fin nomlocal]
*
[control-lin]
CL = CL + 1
Si CL >= 60 entonces
Imprimir LINTIT
CL = 0
Fin si

[fin control-lin]

Trate de ser lo mas legible en el codigo, para no necesitar comentarlo, igual si a alguien no le quedo claro alguna parte del mismo, puede comentarlo y le dire que hace tal linea de seudocodigo, para mejor analisis descarga los seudocodigos ;)

Ahora veamos los codigos en Cobol 400, lo mismo que a los anteriores codigos

___________BOF____________________
100 IDENTIFICATION DIVISION.
200 PROGRAM-ID. VEN025.
300 AUTHOR. GrisUNO Under Complot.
400 INSTALLATION. COMERCIAL UNDER LTDA.
500 DATE-WRITTEN. 08 DE OCTUBRE DEL 2008
600 DATE-COMPILED.
700 SECURITY. *** EMITE UN INFORME DE VENTAS***.
800 *
900 ENVIRONMENT DIVISION.
1000 CONFIGURATION SECTION.
1100 SOURCE-COMPUTER. IBM-AS400.
1200 OBJECT-COMPUTER. IBM-AS400.
1300 SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
1400 INPUT-OUTPUT SECTION.
1500 FILE-CONTROL.
1600 SELECT VENTAS-MENS ASSIGN TO DATABASE-VENMES.
1700 SELECT INFORME ASSIGN TO FORMATFILE-INFVEN.
1800 *
1900 DATA DIVISION.
2000 FILE SECTION.
2100 FD VENTAS-MENS LABEL RECORD STANDARD.
2200 01 REG-V.
2300 COPY DDS-ALL-FORMATS OF VENMES.
2400 FD INFORME LABEL RECORD OMITTED.
2500 01 LINEA PIC X(132).
2600 WORKING-STORAGE SECTION.
2700 *-----DEFINICION DE VARIABLES
2800 01 VAR-TRAB VALUE ZEROS.
2900 02 CL PIC 99.
3000 02 SWL PIC 9.
3100 02 AUX-V PIC 99.
3200 02 NETO PIC 9(6).
3300 02 IVA PIC 9(5).
3400 02 ACV-UNIV PIC 999.
3500 02 ACV-NETO PIC 9(7).
3600 02 ACV-BRUTO PIC 9(9).
3700 02 ACV-IVA PIC 9(6).
3800 02 ACV-MONV PIC 9(7).
3900 02 ACG-UNIV PIC 9(5).
4000 02 ACG-NETO PIC 9(9).
4100 02 ACG-IVA PIC 9(8).
4200 02 ACG-MONV PIC 9(9).
4300 02 ACG-BRUTO PIC 9(9).
4400 *
4500 *-------- DEFINICION DE LINEAS DE SALIDA
4600 *
4700 01 LIN-DET.
4800 COPY DD-LINDET-O OF INFVEN.
4900 01 LIN-TV.
5000 COPY DD-LINTV-O OF INFVEN.
5100 01 LIN-TG.
5200 COPY DD-LINTG-O OF INFVEN.
5300 *
5400 PROCEDURE DIVISION.
5500 COMENZAR.
5600 PERFORM INICIO.
5700 PERFORM PROCESO UNTIL SWL = 1.
5800 PERFORM RUFINA.
5900 STOP RUN.
6000 *
6100 INICIO.
6200 *======
6300 OPEN INPUT VENTAS-MENS,
6400 OUTPUT INFORME.
6500 WRITE LINEA FORMAT "LINTIT".
6600 READ VENTAS-MENS AT END MOVE 1 TO SWL.
6700 MOVE NVEN TO AUX-V.
6800 *
6900 PROCESO.
7000 *=======
7100 IF NVEN NOT = AUX-V THEN
7200 PERFORM CORTE-VEND.
7300 PERFORM CALCULAR.
7400 PERFORM ACUM-VEND.
7500 PERFORM IMP-LDET.
7600 READ VENTAS-MENS AT END MOVE 1 TO SWL.
7700
7800 *
7900 RUFINA.
8000 *======
8100 PERFORM CORTE-VEND.
8200 PERFORM IMP-TG.
8300 CLOSE VENTAS-MENS, INFORME.
8400
8500 *
8600 CALCULAR.
8700 COMPUTE NETO ROUNDED = MONV / 1,19.
8800 COMPUTE IVA ROUNDED = NETO * 0,19.
8900
9000 *
9100 ACUM-VEND.
9200 ADD UNIV TO ACV-UNIV.
9300 ADD NETO TO ACV-NETO.
9400 ADD IVA TO ACV-IVA.
9500 ADD MONV TO ACV-BRUTO.
9600 *
9700 IMP-LDET.
9800 MOVE NVEN TO LDNVEN.
9900 MOVE CODPROD TO LDCODPRO.
10000 MOVE FECHV TO LDFECHV.
10100 MOVE UNIV TO LDUNIV.
10200 MOVE NETO TO LDNETO.
10300 MOVE IVA TO LDIVA.
10400 MOVE MONV TO LDBRUTO.
10500 WRITE LINEA FROM LIN-DET FORMAT "LINDET".
10600 PERFORM CONTROL-LIN.
10700 *
10800 IMP-TG.
10900 MOVE ACG-UNIV TO LTGUNIV.
11000 MOVE ACG-NETO TO LTGNETO.
11100 MOVE ACG-IVA TO LTGIVA.
11200 MOVE ACG-BRUTO TO LTGBRUTO.
11300 WRITE LINEA FROM LIN-TG FORMAT "LINTG".
11400
11500 *
11600 CORTE-VEND.
11700 MOVE AUX-V TO LTVNVEN.
11800 MOVE ACV-UNIV TO LTVUNIV.
11900 MOVE ACV-NETO TO LTVNETO.
12000 MOVE ACV-IVA TO LTVIVA.
12100 MOVE ACV-BRUTO TO LTVBRUTO.
12200 WRITE LINEA FROM LIN-TV FORMAT "LINTV"
12300 ADD 2 TO CL.
12400 PERFORM CONTROL-LIN.
12500 ADD ACV-UNIV TO ACG-UNIV.
12600 ADD ACV-NETO TO ACG-NETO.
12700 ADD ACV-IVA TO ACG-IVA.
12800 ADD ACV-BRUTO TO ACG-BRUTO.
12900 MOVE ZEROS TO ACV-UNIV, ACV-NETO,
13000 ACV-IVA, ACV-BRUTO.
13100 MOVE NVEN TO AUX-V.
13200 *
13300 CONTROL-LIN.
13400 ADD 1 TO CL.
13500 IF CL > 60 THEN
13600 MOVE ZEROS TO CL
13700 WRITE LINEA FORMAT "LINTIT".
13800 *
13900 * ---- FIN TORTURA DE COBOL ----
14000 *

________________EOF___________________________________
Descarga el fichero cobol400!

Ahora el siguiente fichero cobol400:

________________BOF___________________________________
100 IDENTIFICATION DIVISION.
200 PROGRAM-ID. VEN026.
300 AUTHOR. GrisUNO UNDER c0d3.
400 INSTALLATION. COMERCIAL N0RT3 LTDA.
500 DATE-WRITTEN. 29 DE OCTUBRE DEL 2008
600 DATE-COMPILED.
700 SECURITY. *** EMITE UN INFORME DE VENTAS***.
800 *
900 ENVIRONMENT DIVISION.
1000 CONFIGURATION SECTION.
1100 SOURCE-COMPUTER. IBM-AS400.
1200 OBJECT-COMPUTER. IBM-AS400.
1300 SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
1400 INPUT-OUTPUT SECTION.
1500 FILE-CONTROL.
1600 SELECT VENTAS-MENS1 ASSIGN TO DATABASE-VENMES1.
1700 SELECT INFORME ASSIGN TO FORMATFILE-INFVEN1.
1800 *
1900 DATA DIVISION.
2000 FILE SECTION.
2100 FD VENTAS-MENS1 LABEL RECORD STANDARD.
2200 01 REG-V.
2300 COPY DDS-ALL-FORMATS OF VENMES1.
2400 FD INFORME LABEL RECORD OMITTED.
2500 01 LINEA PIC X(132).
2600 WORKING-STORAGE SECTION.
2700 *-----DEFINICION DE VARIABLES
2800 01 VAR-TRAB VALUE ZEROS.
2900 02 CL PIC 99.
3000 02 SWL PIC 9.
3100 02 CODL PIC 99.
3200 02 NETO PIC 9(6).
3300 02 IVA PIC 9(5).
3400 02 ACL-UNIV PIC 999.
3500 02 ACL-NETO PIC 9(7).
3600 02 ACL-BRUTO PIC 9(9).
3700 02 ACL-IVA PIC 9(6).
3800 02 ACL-MONV PIC 9(7).
3900 02 ACG-UNIV PIC 9(5).
4000 02 ACG-NETO PIC 9(9).
4100 02 ACG-IVA PIC 9(8).
4200 02 ACG-MONV PIC 9(9).
4300 02 ACG-BRUTO PIC 9(9).
4400 02 AUX-L PIC 99.
5300 01 TNOMBL.
5400 02 FL PIC X(18) VALUE "AHUMADA 311".
5500 02 FL PIC X(18) VALUE "PROVIDENCIA 889".
5600 02 FL PIC X(18) VALUE "PQE.ARAUCO LOC.112".
5700 02 FL PIC X(18) VALUE "SAN DIEGO 415".
5800 01 TABNOMBL REDEFINES TNOMBL.
5900 02 T-NOMBL PIC X(18) OCCURS 4 TIMES.
6000 *
6100 *-------- DEFINICION DE LINEAS DE SALIDA
6200 *
6300 01 LIN-DET.
6400 COPY DD-LINDET-O OF INFVEN1.
6500 01 LIN-TL.
6600 COPY DD-LINTV-O OF INFVEN1.
6700 01 LIN-TG.
6800 COPY DD-LINTG-O OF INFVEN1.
6900 *
7000 PROCEDURE DIVISION.
7100 COMENZAR.
7200 PERFORM INICIO.
7300 PERFORM PROCESO UNTIL SWL = 1.
7400 PERFORM RUFINA.
7500 STOP RUN.
7600 *
7700 INICIO.
7800 *======
7900 OPEN INPUT VENTAS-MENS1,
8000 OUTPUT INFORME.
8100 WRITE LINEA FORMAT "LINTIT".
8110 ADD 6 TO CL.
8200 READ VENTAS-MENS1 AT END MOVE 1 TO SWL.
8300 MOVE CODL TO AUX-L.
8400 *
8500 PROCESO.
8600 *=======
8700 IF CODL NOT = AUX-L THEN
8800 PERFORM CORTE-LOCAL.
8900 PERFORM CALCULAR.
9000 PERFORM ACUM-LOCAL.
9100 PERFORM IMP-LDET.
9200 READ VENTAS-MENS1 AT END MOVE 1 TO SWL.
9300
9400 *
9500 RUFINA.
9600 *======
9700 PERFORM CORTE-LOCAL.
9800 PERFORM IMP-TG.
9900 CLOSE VENTAS-MENS1, INFORME.
10000
10100 *
10200 CALCULAR.
10300 COMPUTE NETO ROUNDED = MONV / 1,19.
10400 COMPUTE IVA ROUNDED = NETO * 0,19.
10500
10600 *
10700 ACUM-LOCAL.
10800 ADD UNIV TO ACL-UNIV.
10900 ADD NETO TO ACL-NETO.
11000 ADD IVA TO ACL-IVA.
11100 ADD MONV TO ACL-BRUTO.
11200 *
11300 IMP-LDET.
11400 MOVE CODL TO LDCODL.
11500 MOVE CODPROD TO LDCODPRO.
11600 MOVE FECHV TO LDFECHV.
11700 MOVE UNIV TO LDUNIV.
11800 MOVE NETO TO LDNETO.
11900 MOVE IVA TO LDIVA.
12000 MOVE MONV TO LDBRUTO.
12100 WRITE LINEA FROM LIN-DET FORMAT "LINDET".
12200 PERFORM CONTROL-LIN.
12300 *
12400 IMP-TG.
12500 MOVE ACG-UNIV TO LTGUNIV.
12600 MOVE ACG-NETO TO LTGNETO.
12700 MOVE ACG-IVA TO LTGIVA.
12800 MOVE ACG-BRUTO TO LTGBRUTO.
12900 WRITE LINEA FROM LIN-TG FORMAT "LINTG".
13000
13100 *
13200 CORTE-LOCAL.
13300 MOVE AUX-L TO LTCODL.
13400 MOVE ACL-UNIV TO LTVUNIV.
13500 MOVE ACL-NETO TO LTVNETO.
13600 MOVE ACL-IVA TO LTVIVA.
13700 MOVE ACL-BRUTO TO LTVBRUTO.
13800 WRITE LINEA FROM LIN-TV FORMAT "LINTL"
13900 ADD 2 TO CL.
14000 PERFORM CONTROL-LIN.
14100 ADD ACL-UNIV TO ACG-UNIV.
14200 ADD ACL-NETO TO ACG-NETO.
14300 ADD ACL-IVA TO ACG-IVA.
14400 ADD ACL-BRUTO TO ACG-BRUTO.
14500 MOVE ZEROS TO ACL-UNIV, ACL-NETO,
14600 ACL-IVA, ACL-BRUTO.
14700 MOVE CODL TO AUX-L.
14800 *
14900 CONTROL-LIN.
15000 ADD 1 TO CL.
15100 IF CL > 60 THEN
15200 MOVE ZEROS TO CL
15300 WRITE LINEA FORMAT "LINTIT".
15400 *
15500 * ---- FIN TORTURA DE COBOL ----
15600 *
_________________EOF___________________________________________
Descarga el ejmplo n° 2!

Informe de salinas por impresora de nuestro primer programa en cobol 400:

COMERCIAL UNDER LTDA. INFROME DE VENTAS PAG. : 1
PROG.: GrisUNO:::..::: AL: 29/10/08 HORA: 10:20:11

NUM. COD. FECHA UNID. NETO I.V.A BRUTO
VEND. PRODUCTO VENTA VEND. VENTA VENTA VENTA
==========================================================
10 11111 51-02-0077 2 30.992 5.888 36.880
10 12222 81-02-0078 3 37.815 7.185 45.000
10 13333 15-10-2008 1 10.916 2.074 12.990
10 14444 20-10-2008 2 130.252 24.748 155.000
10 15555 21-10-2008 4 210.084 39.916 250.000

TOTAL VENDEDOR 10 : 12 420.059 79.811 499.870

20 23155 10-10-2008 1 105.042 19.958 125.000
20 25444 20-10-2008 2 260.504 49.496 310.000
20 5222 25-10-2008 1 46.218 8.781 55.000

TOTAL VENDEDOR 20 : 4 411.764 78.235 490.000

30 45874 3-10-2008 3 33.613 6.386 40.000
30 36541 11-10-2008 1 30.252 5.748 36.000
30 11111 15-10-2008 4 47.059 8.941 56.000
30 22222 16-10-2008 3 156.303 29.698 186.000
30 33333 18-10-2008 2 20.168 3.832 24.000

TOTAL VENDEDOR 30 : 13 287.395 54.605 342.000

TOTAL GENERAL : 29 1.119.218 212.651 1.331.870


La salida por impresora hecha con rlu del segundo ejemplo a continuacion:

COMERCIAL NORTE LTDA. INFORME DE VENTAS PAG: 1
PROG.: GrisUNO::::.:::..::.:.:: AL:12/11/08 HORA: 10:07:05

COD.: COD. FECHA PRECIO NETO I.V.A BRUTO
LOCAL PRODUCTO. VENTA VEND. UNITARIO VENTA VENTA
============================================================
10 11111 5-10-2008 02 1.690 3.380 642 4.022
10 12222 8-10-2008 03 2.500 7.500 1.425 8.925
10 13333 15-10-2008 01 3.690 3.690 701 4.391
10 14444 20-10-2008 02 2.890 5.780 1.098 6.878
10 15555 21-10-2008 04 1.500 6.000 1.140 7.140

TOTAL LOCAL AHUMADA 311 : 012 26.350 5.006 31.356

20 23155 10-10-2007 01 5.000 5.000 950 5.950
20 25444 20-10-2008 02 3.600 7.200 1.368 8.568
20 5222 25-10-2008 01 4.500 4.500 855 5.355

TOTAL LOCAL PROVIDENCIA 889 : 004 16.700 3.173 19.873

40 45874 3-10-2007 03 2.300 6.900 1.311 8.211
40 36541 11-10-2008 01 3.600 3.600 684 4.284
40 1111 15-10-2008 04 5.600 22.400 4.256 26.656
40 22222 16-10-2008 03 1.860 5.580 1.060 6.640
40 33333 18-10-200802 2.400 4.800 912 5.712

TOTAL LOCAL SAN DIEGO 415 : 013 43.280 8.223 51.503

TOTAL GENERAL : 29 86.330 16.402 102.732



Comentarios

Entradas populares