MainframeMaster

COBOL Tutorial

COBOL LIMIT and LIMITS

The LIMIT and LIMITS keywords represent fundamental boundary control and constraint management capabilities within COBOL Report Writer environments, providing sophisticated page limitation mechanisms, line boundary specifications, and comprehensive report formatting constraints that enable precise document control, automated pagination management, and reliable report structure maintenance. These keywords embody advanced report formatting principles by supporting automated boundary enforcement, enabling sophisticated constraint validation, and facilitating comprehensive report layout requirements while maintaining document integrity, ensuring consistent formatting standards, and supporting complex reporting scenarios across enterprise applications requiring detailed page control, automated boundary management, and reliable constraint handling with optimized performance characteristics and consistent formatting standards throughout diverse business reporting environments.

LIMIT in Report Writer

Report Boundary Control
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
*> Report Writer LIMIT usage REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES LINE LIMIT IS 132 CHARACTERS HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. *> Alternative LIMITS syntax RD FINANCIAL-REPORT PAGE LIMITS ARE 55 LINES LINE LIMITS ARE 120 CHARACTERS HEADING 1 2 FIRST DETAIL 4 LAST DETAIL 50 FOOTING 52 53. *> Multiple report with different limits RD SUMMARY-REPORT PAGE LIMIT IS 40 LINES LINE LIMIT IS 80 CHARACTERS HEADING 1 FIRST DETAIL 3 LAST DETAIL 35 FOOTING 37. *> Procedural limit checking concept 01 WS-PAGE-LIMIT PIC 9(3) VALUE 60. 01 WS-LINE-LIMIT PIC 9(3) VALUE 132. 01 WS-CURRENT-LINE PIC 9(3) VALUE 1. 01 WS-CURRENT-COLUMN PIC 9(3) VALUE 1. PROCEDURE DIVISION. CHECK-PAGE-LIMITS. IF WS-CURRENT-LINE > WS-PAGE-LIMIT PERFORM NEW-PAGE-PROCESSING END-IF IF WS-CURRENT-COLUMN > WS-LINE-LIMIT PERFORM NEW-LINE-PROCESSING END-IF.
Report Writer
Page Control
Boundary Management

Comprehensive LIMIT and LIMITS Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
IDENTIFICATION DIVISION. PROGRAM-ID. LIMIT-PROCESSING-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-EMP-STATUS. SELECT REPORT-FILE ASSIGN TO "REPORT.RPT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-RPT-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(8)V99. 05 EMP-HIRE-DATE PIC 9(8). FD REPORT-FILE. 01 REPORT-LINE PIC X(132). REPORT SECTION. *> Main employee report with page limits RD EMPLOYEE-REPORT PAGE LIMIT IS 60 LINES LINE LIMIT IS 132 CHARACTERS HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. 01 REPORT-HEADING TYPE IS PAGE HEADING. 05 LINE 1. 10 COLUMN 40 PIC X(52) VALUE "EMPLOYEE REPORT - PAGE LIMIT DEMONSTRATION". 05 LINE 3. 10 COLUMN 1 PIC X(6) VALUE "EMP ID". 10 COLUMN 8 PIC X(30) VALUE "EMPLOYEE NAME". 10 COLUMN 39 PIC X(15) VALUE "DEPARTMENT". 10 COLUMN 55 PIC X(12) VALUE "SALARY". 10 COLUMN 68 PIC X(10) VALUE "HIRE DATE". 01 DETAIL-LINE TYPE IS DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC 9(6) SOURCE EMP-ID. 10 COLUMN 8 PIC X(30) SOURCE EMP-NAME. 10 COLUMN 39 PIC X(15) SOURCE EMP-DEPARTMENT. 10 COLUMN 55 PIC $,$$$,$$9.99 SOURCE EMP-SALARY. 10 COLUMN 68 PIC 9(2)/9(2)/9(4) SOURCE EMP-HIRE-DATE. 01 PAGE-FOOTER TYPE IS PAGE FOOTING. 05 LINE 58. 10 COLUMN 60 PIC X(6) VALUE "PAGE: ". 10 COLUMN 66 PIC Z9 SOURCE PAGE-COUNTER. *> Summary report with different limits RD SUMMARY-REPORT PAGE LIMITS ARE 40 LINES LINE LIMITS ARE 80 CHARACTERS HEADING 1 FIRST DETAIL 3 LAST DETAIL 35 FOOTING 37. 01 SUMMARY-HEADING TYPE IS PAGE HEADING. 05 LINE 1. 10 COLUMN 20 PIC X(40) VALUE "DEPARTMENT SUMMARY - COMPACT FORMAT". 01 SUMMARY-DETAIL TYPE IS DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(15) SOURCE EMP-DEPARTMENT. 10 COLUMN 17 PIC Z,ZZ9 SOURCE DEPT-COUNT. 10 COLUMN 25 PIC $,$$$,$$9.99 SOURCE DEPT-TOTAL. WORKING-STORAGE SECTION. *> File control variables 01 WS-FILE-STATUS. 05 WS-EMP-STATUS PIC X(2). 05 WS-RPT-STATUS PIC X(2). *> Page and line control variables 01 WS-PAGE-CONTROL. 05 WS-MAX-LINES PIC 9(3) VALUE 60. 05 WS-MAX-COLUMNS PIC 9(3) VALUE 132. 05 WS-CURRENT-LINE PIC 9(3) VALUE 1. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-LINES-PRINTED PIC 9(3) VALUE 0. *> Limit checking variables 01 WS-LIMIT-CONTROLS. 05 WS-PAGE-LIMIT-FLAG PIC X VALUE 'N'. 05 WS-LINE-LIMIT-FLAG PIC X VALUE 'N'. 05 WS-RECORD-LIMIT PIC 9(4) VALUE 1000. 05 WS-RECORDS-PROCESSED PIC 9(4) VALUE 0. *> Report formatting variables 01 WS-REPORT-VARS. 05 WS-HEADER-PRINTED PIC X VALUE 'N'. 05 WS-DETAIL-COUNT PIC 9(4) VALUE 0. 05 WS-PAGE-COUNT PIC 9(3) VALUE 0. *> Department summary variables 01 WS-DEPT-SUMMARY. 05 WS-CURRENT-DEPT PIC X(15). 05 WS-DEPT-COUNT PIC 9(4) VALUE 0. 05 WS-DEPT-TOTAL PIC 9(10)V99 VALUE 0. *> Business validation limits 01 WS-BUSINESS-LIMITS. 05 WS-MIN-SALARY PIC 9(8)V99 VALUE 20000.00. 05 WS-MAX-SALARY PIC 9(8)V99 VALUE 200000.00. 05 WS-MIN-NAME-LENGTH PIC 9(2) VALUE 2. 05 WS-MAX-NAME-LENGTH PIC 9(2) VALUE 30. 05 WS-VALID-DEPT-COUNT PIC 9(2) VALUE 10. *> Error tracking 01 WS-ERROR-COUNTERS. 05 WS-SALARY-ERRORS PIC 9(4) VALUE 0. 05 WS-NAME-ERRORS PIC 9(4) VALUE 0. 05 WS-DEPT-ERRORS PIC 9(4) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== COBOL LIMIT AND LIMITS DEMONSTRATION ===" DISPLAY SPACES PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-WITH-LIMITS PERFORM DEMONSTRATE-BOUNDARY-CHECKING PERFORM DEMONSTRATE-BUSINESS-LIMITS PERFORM FINALIZE-PROCESSING DISPLAY "=== LIMIT PROCESSING COMPLETE ===" STOP RUN. INITIALIZE-PROCESSING. DISPLAY "Initializing limit-controlled processing..." OPEN INPUT EMPLOYEE-FILE IF WS-EMP-STATUS NOT = "00" DISPLAY "Error opening employee file: " WS-EMP-STATUS STOP RUN END-IF OPEN OUTPUT REPORT-FILE IF WS-RPT-STATUS NOT = "00" DISPLAY "Error opening report file: " WS-RPT-STATUS STOP RUN END-IF INITIATE EMPLOYEE-REPORT DISPLAY "Report initialized with PAGE LIMIT: " WS-MAX-LINES DISPLAY " LINE LIMIT: " WS-MAX-COLUMNS DISPLAY SPACES. PROCESS-WITH-LIMITS. DISPLAY "=== PROCESSING WITH PAGE AND LINE LIMITS ===" DISPLAY SPACES PERFORM READ-EMPLOYEE-RECORD PERFORM UNTIL WS-EMP-STATUS = "10" OR WS-RECORDS-PROCESSED >= WS-RECORD-LIMIT PERFORM CHECK-PAGE-LIMITS PERFORM VALIDATE-RECORD-LIMITS IF WS-PAGE-LIMIT-FLAG = 'N' AND WS-LINE-LIMIT-FLAG = 'N' GENERATE DETAIL-LINE ADD 1 TO WS-DETAIL-COUNT ADD 1 TO WS-LINES-PRINTED DISPLAY "Processed record " WS-RECORDS-PROCESSED " - Line " WS-LINES-PRINTED ELSE DISPLAY "Limit reached - processing paused" PERFORM HANDLE-LIMIT-EXCEEDED END-IF PERFORM READ-EMPLOYEE-RECORD END-PERFORM DISPLAY SPACES DISPLAY "Records processed: " WS-RECORDS-PROCESSED DISPLAY "Detail lines generated: " WS-DETAIL-COUNT DISPLAY "Total pages: " WS-PAGE-COUNT. READ-EMPLOYEE-RECORD. READ EMPLOYEE-FILE AT END DISPLAY "End of file reached" NOT AT END ADD 1 TO WS-RECORDS-PROCESSED END-READ. CHECK-PAGE-LIMITS. MOVE 'N' TO WS-PAGE-LIMIT-FLAG MOVE 'N' TO WS-LINE-LIMIT-FLAG *> Check if approaching page limit IF WS-LINES-PRINTED >= (WS-MAX-LINES - 5) MOVE 'Y' TO WS-PAGE-LIMIT-FLAG DISPLAY "Approaching page limit - current line: " WS-LINES-PRINTED END-IF *> Check record processing limit IF WS-RECORDS-PROCESSED >= WS-RECORD-LIMIT DISPLAY "Record limit reached: " WS-RECORD-LIMIT END-IF. VALIDATE-RECORD-LIMITS. *> Validate employee name length IF FUNCTION LENGTH(FUNCTION TRIM(EMP-NAME)) < WS-MIN-NAME-LENGTH OR FUNCTION LENGTH(FUNCTION TRIM(EMP-NAME)) > WS-MAX-NAME-LENGTH ADD 1 TO WS-NAME-ERRORS DISPLAY "Name length error for employee: " EMP-ID END-IF *> Validate salary limits IF EMP-SALARY < WS-MIN-SALARY OR EMP-SALARY > WS-MAX-SALARY ADD 1 TO WS-SALARY-ERRORS DISPLAY "Salary limit error for employee: " EMP-ID " Salary: $" EMP-SALARY END-IF. HANDLE-LIMIT-EXCEEDED. IF WS-PAGE-LIMIT-FLAG = 'Y' ADD 1 TO WS-PAGE-COUNT MOVE 1 TO WS-LINES-PRINTED DISPLAY "New page started - Page " WS-PAGE-COUNT END-IF. DEMONSTRATE-BOUNDARY-CHECKING. DISPLAY "=== BOUNDARY CHECKING WITH LIMITS ===" DISPLAY SPACES PERFORM ARRAY-BOUNDARY-CHECKING PERFORM STRING-LENGTH-LIMITS PERFORM NUMERIC-RANGE-LIMITS. ARRAY-BOUNDARY-CHECKING. 01 WS-EMPLOYEE-ARRAY. 05 WS-EMP-ENTRY OCCURS 100 TIMES. 10 WS-EMP-ARRAY-ID PIC 9(6). 10 WS-EMP-ARRAY-NAME PIC X(25). 01 WS-ARRAY-INDEX PIC 9(3). 01 WS-ARRAY-LIMIT PIC 9(3) VALUE 100. 01 WS-ENTRY-COUNT PIC 9(3) VALUE 0. DISPLAY "Array boundary checking with limits:" *> Simulate loading array with limit checking PERFORM VARYING WS-ARRAY-INDEX FROM 1 BY 1 UNTIL WS-ARRAY-INDEX > WS-ARRAY-LIMIT OR WS-ENTRY-COUNT >= 50 COMPUTE WS-EMP-ARRAY-ID(WS-ARRAY-INDEX) = 100000 + WS-ARRAY-INDEX MOVE "EMPLOYEE NAME" TO WS-EMP-ARRAY-NAME(WS-ARRAY-INDEX) ADD 1 TO WS-ENTRY-COUNT *> Check if approaching array limit IF WS-ARRAY-INDEX >= (WS-ARRAY-LIMIT - 10) DISPLAY "Warning: Approaching array limit" DISPLAY "Current index: " WS-ARRAY-INDEX DISPLAY "Array limit: " WS-ARRAY-LIMIT END-IF END-PERFORM DISPLAY "Array entries loaded: " WS-ENTRY-COUNT DISPLAY "Array utilization: " FUNCTION NUMVAL(WS-ENTRY-COUNT / WS-ARRAY-LIMIT * 100) "%" DISPLAY SPACES. STRING-LENGTH-LIMITS. 01 WS-INPUT-STRINGS. 05 WS-STRING-1 PIC X(50) VALUE "SHORT STRING". 05 WS-STRING-2 PIC X(50) VALUE "THIS IS A MUCH LONGER STRING FOR TESTING LIMITS". 05 WS-STRING-3 PIC X(50) VALUE "MAXIMUM LENGTH STRING THAT FILLS THE ENTIRE FIELD". 01 WS-STRING-INDEX PIC 9(2). 01 WS-STRING-LENGTH PIC 9(3). 01 WS-MIN-STRING-LIMIT PIC 9(2) VALUE 5. 01 WS-MAX-STRING-LIMIT PIC 9(2) VALUE 40. 01 WS-CURRENT-STRING PIC X(50). DISPLAY "String length limit checking:" PERFORM VARYING WS-STRING-INDEX FROM 1 BY 1 UNTIL WS-STRING-INDEX > 3 EVALUATE WS-STRING-INDEX WHEN 1 MOVE WS-STRING-1 TO WS-CURRENT-STRING WHEN 2 MOVE WS-STRING-2 TO WS-CURRENT-STRING WHEN 3 MOVE WS-STRING-3 TO WS-CURRENT-STRING END-EVALUATE COMPUTE WS-STRING-LENGTH = FUNCTION LENGTH( FUNCTION TRIM(WS-CURRENT-STRING)) DISPLAY "String " WS-STRING-INDEX ":" DISPLAY " Content: '" WS-CURRENT-STRING "'" DISPLAY " Length: " WS-STRING-LENGTH DISPLAY " Limits: " WS-MIN-STRING-LIMIT " to " WS-MAX-STRING-LIMIT IF WS-STRING-LENGTH < WS-MIN-STRING-LIMIT DISPLAY " Status: BELOW MINIMUM LIMIT" ELSE IF WS-STRING-LENGTH > WS-MAX-STRING-LIMIT DISPLAY " Status: EXCEEDS MAXIMUM LIMIT" ELSE DISPLAY " Status: WITHIN LIMITS" END-IF END-IF DISPLAY SPACES END-PERFORM. NUMERIC-RANGE-LIMITS. 01 WS-TEST-VALUES. 05 WS-VALUE-1 PIC 9(6) VALUE 500. 05 WS-VALUE-2 PIC 9(6) VALUE 15000. 05 WS-VALUE-3 PIC 9(6) VALUE 75000. 05 WS-VALUE-4 PIC 9(6) VALUE 150000. 01 WS-VALUE-INDEX PIC 9(2). 01 WS-CURRENT-VALUE PIC 9(6). 01 WS-LOWER-LIMIT PIC 9(6) VALUE 1000. 01 WS-UPPER-LIMIT PIC 9(6) VALUE 100000. DISPLAY "Numeric range limit checking:" PERFORM VARYING WS-VALUE-INDEX FROM 1 BY 1 UNTIL WS-VALUE-INDEX > 4 EVALUATE WS-VALUE-INDEX WHEN 1 MOVE WS-VALUE-1 TO WS-CURRENT-VALUE WHEN 2 MOVE WS-VALUE-2 TO WS-CURRENT-VALUE WHEN 3 MOVE WS-VALUE-3 TO WS-CURRENT-VALUE WHEN 4 MOVE WS-VALUE-4 TO WS-CURRENT-VALUE END-EVALUATE DISPLAY "Value " WS-VALUE-INDEX ": " WS-CURRENT-VALUE DISPLAY " Range: " WS-LOWER-LIMIT " to " WS-UPPER-LIMIT IF WS-CURRENT-VALUE < WS-LOWER-LIMIT DISPLAY " Status: BELOW LOWER LIMIT" ELSE IF WS-CURRENT-VALUE > WS-UPPER-LIMIT DISPLAY " Status: EXCEEDS UPPER LIMIT" ELSE DISPLAY " Status: WITHIN RANGE" END-IF END-IF DISPLAY SPACES END-PERFORM. DEMONSTRATE-BUSINESS-LIMITS. DISPLAY "=== BUSINESS RULE LIMITS ===" DISPLAY SPACES PERFORM SALARY-LIMIT-VALIDATION PERFORM DEPARTMENT-LIMIT-VALIDATION PERFORM TRANSACTION-LIMIT-CHECKING. SALARY-LIMIT-VALIDATION. 01 WS-SALARY-BRACKETS. 05 WS-ENTRY-LEVEL PIC 9(8)V99 VALUE 25000.00. 05 WS-EXPERIENCED PIC 9(8)V99 VALUE 65000.00. 05 WS-SENIOR-LEVEL PIC 9(8)V99 VALUE 95000.00. 05 WS-EXECUTIVE PIC 9(8)V99 VALUE 175000.00. 01 WS-SALARY-INDEX PIC 9(2). 01 WS-TEST-SALARY PIC 9(8)V99. DISPLAY "Salary limit validation by level:" PERFORM VARYING WS-SALARY-INDEX FROM 1 BY 1 UNTIL WS-SALARY-INDEX > 4 EVALUATE WS-SALARY-INDEX WHEN 1 MOVE WS-ENTRY-LEVEL TO WS-TEST-SALARY DISPLAY " Entry Level: $" WS-TEST-SALARY WHEN 2 MOVE WS-EXPERIENCED TO WS-TEST-SALARY DISPLAY " Experienced: $" WS-TEST-SALARY WHEN 3 MOVE WS-SENIOR-LEVEL TO WS-TEST-SALARY DISPLAY " Senior Level: $" WS-TEST-SALARY WHEN 4 MOVE WS-EXECUTIVE TO WS-TEST-SALARY DISPLAY " Executive: $" WS-TEST-SALARY END-EVALUATE *> Validate against business limits IF WS-TEST-SALARY >= WS-MIN-SALARY AND WS-TEST-SALARY <= WS-MAX-SALARY DISPLAY " Validation: APPROVED" ELSE DISPLAY " Validation: REQUIRES REVIEW" IF WS-TEST-SALARY < WS-MIN-SALARY DISPLAY " Reason: Below minimum salary" ELSE DISPLAY " Reason: Exceeds maximum salary" END-IF END-IF DISPLAY SPACES END-PERFORM. DEPARTMENT-LIMIT-VALIDATION. 01 WS-DEPT-EMPLOYEES. 05 WS-IT-DEPT PIC 9(3) VALUE 45. 05 WS-SALES-DEPT PIC 9(3) VALUE 32. 05 WS-HR-DEPT PIC 9(3) VALUE 8. 05 WS-FINANCE-DEPT PIC 9(3) VALUE 12. 01 WS-DEPT-INDEX PIC 9(2). 01 WS-DEPT-COUNT PIC 9(3). 01 WS-MAX-DEPT-SIZE PIC 9(3) VALUE 50. 01 WS-MIN-DEPT-SIZE PIC 9(2) VALUE 5. DISPLAY "Department size limit validation:" PERFORM VARYING WS-DEPT-INDEX FROM 1 BY 1 UNTIL WS-DEPT-INDEX > 4 EVALUATE WS-DEPT-INDEX WHEN 1 MOVE WS-IT-DEPT TO WS-DEPT-COUNT DISPLAY " IT Department: " WS-DEPT-COUNT " employees" WHEN 2 MOVE WS-SALES-DEPT TO WS-DEPT-COUNT DISPLAY " Sales Department: " WS-DEPT-COUNT " employees" WHEN 3 MOVE WS-HR-DEPT TO WS-DEPT-COUNT DISPLAY " HR Department: " WS-DEPT-COUNT " employees" WHEN 4 MOVE WS-FINANCE-DEPT TO WS-DEPT-COUNT DISPLAY " Finance Department: " WS-DEPT-COUNT " employees" END-EVALUATE DISPLAY " Limits: " WS-MIN-DEPT-SIZE " to " WS-MAX-DEPT-SIZE IF WS-DEPT-COUNT < WS-MIN-DEPT-SIZE DISPLAY " Status: UNDERSTAFFED" ELSE IF WS-DEPT-COUNT > WS-MAX-DEPT-SIZE DISPLAY " Status: OVERSTAFFED" ELSE DISPLAY " Status: OPTIMAL SIZE" END-IF END-IF DISPLAY SPACES END-PERFORM. TRANSACTION-LIMIT-CHECKING. 01 WS-TRANSACTION-LIMITS. 05 WS-DAILY-LIMIT PIC 9(8)V99 VALUE 10000.00. 05 WS-WEEKLY-LIMIT PIC 9(9)V99 VALUE 50000.00. 05 WS-MONTHLY-LIMIT PIC 9(10)V99 VALUE 200000.00. 01 WS-CURRENT-TOTALS. 05 WS-DAILY-TOTAL PIC 9(8)V99 VALUE 8500.00. 05 WS-WEEKLY-TOTAL PIC 9(9)V99 VALUE 42000.00. 05 WS-MONTHLY-TOTAL PIC 9(10)V99 VALUE 185000.00. 01 WS-NEW-TRANSACTION PIC 9(6)V99 VALUE 2500.00. 01 WS-PROJECTED-TOTAL PIC 9(10)V99. DISPLAY "Transaction limit checking:" DISPLAY "New transaction amount: $" WS-NEW-TRANSACTION DISPLAY SPACES *> Check daily limit COMPUTE WS-PROJECTED-TOTAL = WS-DAILY-TOTAL + WS-NEW-TRANSACTION DISPLAY "Daily Check:" DISPLAY " Current total: $" WS-DAILY-TOTAL DISPLAY " Projected total: $" WS-PROJECTED-TOTAL DISPLAY " Daily limit: $" WS-DAILY-LIMIT IF WS-PROJECTED-TOTAL <= WS-DAILY-LIMIT DISPLAY " Status: APPROVED - Within daily limit" ELSE DISPLAY " Status: REJECTED - Exceeds daily limit" END-IF DISPLAY SPACES *> Check weekly limit COMPUTE WS-PROJECTED-TOTAL = WS-WEEKLY-TOTAL + WS-NEW-TRANSACTION DISPLAY "Weekly Check:" DISPLAY " Current total: $" WS-WEEKLY-TOTAL DISPLAY " Projected total: $" WS-PROJECTED-TOTAL DISPLAY " Weekly limit: $" WS-WEEKLY-LIMIT IF WS-PROJECTED-TOTAL <= WS-WEEKLY-LIMIT DISPLAY " Status: APPROVED - Within weekly limit" ELSE DISPLAY " Status: REJECTED - Exceeds weekly limit" END-IF DISPLAY SPACES *> Check monthly limit COMPUTE WS-PROJECTED-TOTAL = WS-MONTHLY-TOTAL + WS-NEW-TRANSACTION DISPLAY "Monthly Check:" DISPLAY " Current total: $" WS-MONTHLY-TOTAL DISPLAY " Projected total: $" WS-PROJECTED-TOTAL DISPLAY " Monthly limit: $" WS-MONTHLY-LIMIT IF WS-PROJECTED-TOTAL <= WS-MONTHLY-LIMIT DISPLAY " Status: APPROVED - Within monthly limit" ELSE DISPLAY " Status: REJECTED - Exceeds monthly limit" END-IF DISPLAY SPACES. FINALIZE-PROCESSING. DISPLAY "=== FINALIZATION WITH LIMIT SUMMARY ===" DISPLAY SPACES TERMINATE EMPLOYEE-REPORT DISPLAY "Processing Summary:" DISPLAY " Records processed: " WS-RECORDS-PROCESSED DISPLAY " Record limit: " WS-RECORD-LIMIT DISPLAY " Page limit: " WS-MAX-LINES " lines" DISPLAY " Line limit: " WS-MAX-COLUMNS " characters" DISPLAY " Final page count: " WS-PAGE-COUNT DISPLAY SPACES DISPLAY "Validation Error Summary:" DISPLAY " Salary errors: " WS-SALARY-ERRORS DISPLAY " Name errors: " WS-NAME-ERRORS DISPLAY " Department errors: " WS-DEPT-ERRORS DISPLAY SPACES CLOSE EMPLOYEE-FILE REPORT-FILE DISPLAY "Files closed successfully".

LIMIT Applications

Report Control
  • • Page line limits
  • • Character per line limits
  • • Report pagination control
  • • Print boundary management
  • • Format constraint enforcement
Business Constraints
  • • Value range validation
  • • Transaction amount limits
  • • Array boundary checking
  • • Record count constraints
  • • Processing volume controls

Interactive Tutorial

Hands-On Exercise: Implementing Business Limits
Practice using limit concepts for validation and boundary control

Exercise 1: Sales Transaction Limits

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
01 WS-TRANSACTION-LIMITS. 05 WS-SINGLE-TRANS-LIMIT PIC 9(6)V99 VALUE 5000.00. 05 WS-DAILY-TRANS-LIMIT PIC 9(8)V99 VALUE 25000.00. 01 WS-CURRENT-TOTALS. 05 WS-DAILY-TOTAL PIC 9(8)V99 VALUE 0. 05 WS-TRANSACTION-COUNT PIC 9(4) VALUE 0. 01 WS-NEW-SALE PIC 9(6)V99. 01 WS-APPROVAL-FLAG PIC X VALUE 'N'. PROCEDURE DIVISION. VALIDATE-SALE-LIMITS. MOVE 3500.00 TO WS-NEW-SALE DISPLAY "Validating sale: $" WS-NEW-SALE DISPLAY "Current daily total: $" WS-DAILY-TOTAL *> Check single transaction limit IF WS-NEW-SALE <= WS-SINGLE-TRANS-LIMIT DISPLAY "Single transaction: APPROVED" *> Check daily limit IF (WS-DAILY-TOTAL + WS-NEW-SALE) <= WS-DAILY-TRANS-LIMIT MOVE 'Y' TO WS-APPROVAL-FLAG ADD WS-NEW-SALE TO WS-DAILY-TOTAL ADD 1 TO WS-TRANSACTION-COUNT DISPLAY "Daily limit: APPROVED" ELSE DISPLAY "Daily limit: EXCEEDED" END-IF ELSE DISPLAY "Single transaction: EXCEEDS LIMIT" END-IF.

Exercise 2: Report Page Management

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
01 WS-PAGE-LIMITS. 05 WS-LINES-PER-PAGE PIC 9(2) VALUE 55. 05 WS-CHARS-PER-LINE PIC 9(3) VALUE 120. 01 WS-PAGE-CONTROL. 05 WS-CURRENT-LINE PIC 9(2) VALUE 1. 05 WS-CURRENT-PAGE PIC 9(3) VALUE 1. 05 WS-LINES-USED PIC 9(2) VALUE 0. 01 WS-REPORT-LINE PIC X(120). PROCEDURE DIVISION. WRITE-REPORT-LINE. *> Check if we need a new page IF WS-LINES-USED >= WS-LINES-PER-PAGE PERFORM START-NEW-PAGE END-IF *> Check line length limit IF FUNCTION LENGTH(FUNCTION TRIM(WS-REPORT-LINE)) <= WS-CHARS-PER-LINE WRITE REPORT-LINE ADD 1 TO WS-LINES-USED DISPLAY "Line written: " WS-LINES-USED " of " WS-LINES-PER-PAGE ELSE DISPLAY "Line exceeds character limit" END-IF. START-NEW-PAGE. ADD 1 TO WS-CURRENT-PAGE MOVE 1 TO WS-LINES-USED DISPLAY "Starting page " WS-CURRENT-PAGE.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Report Writer Usage

How are PAGE LIMIT and LINE LIMIT used in Report Writer?

Answer: PAGE LIMIT specifies the maximum number of lines per page, while LINE LIMIT sets the maximum number of characters per line. These limits control report formatting, pagination, and ensure proper layout within physical page boundaries.

Question 2: Business Applications

What are common business uses for limit concepts in COBOL?

Answer: Common uses include transaction amount limits, array boundary checking, salary range validation, inventory level constraints, page formatting controls, and data validation rules that ensure business rule compliance.

Question 3: Implementation Strategy

What's the best approach for implementing limit checking?

Answer: Implement limit checking early in processing, use clear validation routines, provide meaningful error messages, log violations for analysis, and design graceful handling of limit exceeded conditions with appropriate escalation procedures.

Related Pages