MainframeMaster

COBOL Tutorial

COBOL PRINTING

COBOL PRINTING represents comprehensive report generation and sophisticated document formatting capabilities within enterprise business environments, providing advanced output production mechanisms for professional document creation, enhanced formatting features for business reporting, and intelligent print control capabilities that enable precise document layout, optimal report formatting workflows, and systematic output generation while maintaining formatting accuracy, ensuring predictable print behavior, and enabling flexible document production architectures across business applications requiring exact report formatting, professional document generation, and reliable output production throughout sophisticated financial reporting and business documentation scenarios.

Basic Printing and Output

Fundamental Printing Operations
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
*> Basic printing and output operations ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO "REPORT.PRT" ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. SELECT INVOICE-FILE ASSIGN TO "INVOICE.TXT" ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE RECORDING MODE IS F BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 132 CHARACTERS. 01 REPORT-RECORD PIC X(132). FD INVOICE-FILE RECORDING MODE IS F BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 80 CHARACTERS. 01 INVOICE-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 WS-PRINT-CONTROL. 05 WS-PAGE-NUMBER PIC 9(3) VALUE 1. 05 WS-LINE-NUMBER PIC 9(2) VALUE 1. 05 WS-LINES-PER-PAGE PIC 9(2) VALUE 60. 05 WS-PAGE-OVERFLOW PIC X VALUE 'N'. 01 WS-REPORT-HEADERS. 05 WS-COMPANY-HEADER. 10 FILLER PIC X(45) VALUE SPACES. 10 WS-COMPANY-NAME PIC X(30) VALUE "ACME CORPORATION". 10 FILLER PIC X(57) VALUE SPACES. 05 WS-REPORT-TITLE. 10 FILLER PIC X(50) VALUE SPACES. 10 WS-TITLE-TEXT PIC X(25) VALUE "MONTHLY SALES REPORT". 10 FILLER PIC X(57) VALUE SPACES. 05 WS-DATE-HEADER. 10 FILLER PIC X(55) VALUE SPACES. 10 WS-REPORT-DATE PIC X(10). 10 FILLER PIC X(67) VALUE SPACES. 01 WS-COLUMN-HEADERS. 05 WS-HEADER-LINE-1. 10 FILLER PIC X(5) VALUE "DEPT". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(15) VALUE "DEPARTMENT NAME". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(12) VALUE "SALES AMOUNT". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(10) VALUE "PERCENTAGE". 10 FILLER PIC X(81) VALUE SPACES. 05 WS-HEADER-LINE-2. 10 FILLER PIC X(5) VALUE "----". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(15) VALUE "---------------". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(12) VALUE "------------". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(10) VALUE "----------". 10 FILLER PIC X(81) VALUE SPACES. 01 WS-DETAIL-LINE. 05 WS-DEPT-CODE PIC X(5). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-DEPT-NAME PIC X(15). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-SALES-AMOUNT PIC $ZZZ,ZZ9.99. 05 FILLER PIC X(3) VALUE SPACES. 05 WS-SALES-PERCENT PIC ZZ9.9%. 05 FILLER PIC X(91) VALUE SPACES. 01 WS-SUMMARY-LINES. 05 WS-TOTAL-LINE. 10 FILLER PIC X(26) VALUE SPACES. 10 FILLER PIC X(12) VALUE "TOTAL SALES:". 10 FILLER PIC X(2) VALUE SPACES. 10 WS-TOTAL-AMOUNT PIC $ZZZ,ZZ9.99. 10 FILLER PIC X(82) VALUE SPACES. PROCEDURE DIVISION. MAIN-PRINTING-DEMO. DISPLAY "=== COBOL PRINTING DEMONSTRATION ===" PERFORM OPEN-PRINT-FILES PERFORM GENERATE-SALES-REPORT PERFORM GENERATE-INVOICE-DOCUMENT PERFORM CLOSE-PRINT-FILES DISPLAY "=== PRINTING DEMO COMPLETE ===" STOP RUN. OPEN-PRINT-FILES. DISPLAY "Opening print files..." OPEN OUTPUT REPORT-FILE OPEN OUTPUT INVOICE-FILE DISPLAY "✅ Print files opened successfully" GENERATE-SALES-REPORT. DISPLAY "Generating sales report..." *> Initialize report MOVE FUNCTION CURRENT-DATE(1:8) TO WS-REPORT-DATE MOVE 1 TO WS-PAGE-NUMBER MOVE 1 TO WS-LINE-NUMBER PERFORM PRINT-REPORT-HEADERS PERFORM PRINT-COLUMN-HEADERS PERFORM PRINT-SALES-DATA PERFORM PRINT-REPORT-SUMMARY DISPLAY "✅ Sales report generated" PRINT-REPORT-HEADERS. *> Print company header MOVE WS-COMPANY-HEADER TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print blank line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print report title MOVE WS-REPORT-TITLE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print date MOVE WS-DATE-HEADER TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print page number STRING "PAGE: " WS-PAGE-NUMBER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print separator line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER PRINT-COLUMN-HEADERS. *> Print column headers MOVE WS-HEADER-LINE-1 TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER MOVE WS-HEADER-LINE-2 TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print blank line after headers MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER PRINT-SALES-DATA. *> Sample sales data printing PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT1" "Electronics" 125000.75 25.5 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT2" "Clothing" 98750.50 20.1 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT3" "Home & Garden" 87500.25 17.8 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT4" "Sports" 76250.00 15.5 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT5" "Books" 62500.75 12.7 PRINT-DEPARTMENT-SALES. USING DEPT-CODE-PARM DEPT-NAME-PARM SALES-AMT-PARM PERCENT-PARM. *> Check for page overflow IF WS-LINE-NUMBER >= WS-LINES-PER-PAGE PERFORM NEW-PAGE END-IF *> Format detail line MOVE DEPT-CODE-PARM TO WS-DEPT-CODE MOVE DEPT-NAME-PARM TO WS-DEPT-NAME MOVE SALES-AMT-PARM TO WS-SALES-AMOUNT MOVE PERCENT-PARM TO WS-SALES-PERCENT *> Print detail line MOVE WS-DETAIL-LINE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER NEW-PAGE. *> Start new page ADD 1 TO WS-PAGE-NUMBER MOVE 1 TO WS-LINE-NUMBER *> Print form feed or page break indicator MOVE "--- NEW PAGE ---" TO REPORT-RECORD WRITE REPORT-RECORD *> Reprint headers on new page PERFORM PRINT-REPORT-HEADERS PERFORM PRINT-COLUMN-HEADERS PRINT-REPORT-SUMMARY. *> Print summary section MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Calculate and print total COMPUTE WS-TOTAL-AMOUNT = 125000.75 + 98750.50 + 87500.25 + 76250.00 + 62500.75 MOVE WS-TOTAL-LINE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print report footer MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER STRING "Report generated on " FUNCTION CURRENT-DATE(1:8) " at " FUNCTION CURRENT-DATE(9:6) DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD GENERATE-INVOICE-DOCUMENT. DISPLAY "Generating invoice document..." PERFORM PRINT-INVOICE-HEADER PERFORM PRINT-INVOICE-DETAILS PERFORM PRINT-INVOICE-SUMMARY DISPLAY "✅ Invoice document generated" PRINT-INVOICE-HEADER. *> Print invoice header MOVE "INVOICE #INV-2023-001" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Date: 2023-12-01" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Bill To:" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "ABC Corporation" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "123 Business Street" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "New York, NY 10001" TO INVOICE-RECORD WRITE INVOICE-RECORD PRINT-INVOICE-DETAILS. *> Print invoice line items MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "ITEM DESCRIPTION QTY PRICE TOTAL" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "---- ----------- --- ----- -----" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "001 Widget A 5 $29.99 $149.95" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "002 Widget B 2 $75.00 $150.00" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "003 Service Fee 1 $50.00 $50.00" TO INVOICE-RECORD WRITE INVOICE-RECORD PRINT-INVOICE-SUMMARY. *> Print invoice summary MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " Subtotal: $349.95" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " Tax (8.25%): $28.87" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " TOTAL: $378.82" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Thank you for your business!" TO INVOICE-RECORD WRITE INVOICE-RECORD CLOSE-PRINT-FILES. DISPLAY "Closing print files..." CLOSE REPORT-FILE CLOSE INVOICE-FILE DISPLAY "✅ Print files closed successfully" DISPLAY " " DISPLAY "📄 Generated Documents:" DISPLAY " • Sales Report: REPORT.PRT" DISPLAY " • Invoice Document: INVOICE.TXT" DISPLAY " " DISPLAY "📊 Printing Statistics:" DISPLAY " • Report pages: " WS-PAGE-NUMBER DISPLAY " • Report lines: " WS-LINE-NUMBER
Report Generation
Document Formatting
Print Control

Advanced Report Writing

Professional Report Formatting
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
*> Advanced report writing with sophisticated formatting 01 WS-ADVANCED-REPORT-CONTROL. 05 WS-REPORT-PARAMETERS. 10 WS-REPORT-WIDTH PIC 9(3) VALUE 132. 10 WS-REPORT-HEIGHT PIC 9(2) VALUE 66. 10 WS-HEADER-LINES PIC 9(2) VALUE 8. 10 WS-FOOTER-LINES PIC 9(2) VALUE 5. 10 WS-DETAIL-LINES PIC 9(2) VALUE 53. 05 WS-PAGINATION-CONTROL. 10 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 10 WS-CURRENT-LINE PIC 9(2) VALUE 1. 10 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 10 WS-LINES-PRINTED PIC 9(6) VALUE 0. 01 WS-FORMATTING-TEMPLATES. 05 WS-FINANCIAL-TEMPLATE. 10 WS-CURRENCY-FORMAT PIC $ZZZ,ZZZ,ZZ9.99-. 10 WS-PERCENT-FORMAT PIC ZZ9.99%. 10 WS-NUMBER-FORMAT PIC ZZZ,ZZZ,ZZ9. 05 WS-DATE-FORMATS. 10 WS-SHORT-DATE PIC 99/99/9999. 10 WS-LONG-DATE PIC X(20). 10 WS-TIMESTAMP PIC X(26). 01 WS-REPORT-STYLES. 05 WS-BORDER-CHARACTERS. 10 WS-TOP-LEFT PIC X VALUE "┌". 10 WS-TOP-RIGHT PIC X VALUE "┐". 10 WS-BOTTOM-LEFT PIC X VALUE "└". 10 WS-BOTTOM-RIGHT PIC X VALUE "┘". 10 WS-HORIZONTAL PIC X VALUE "─". 10 WS-VERTICAL PIC X VALUE "│". 10 WS-CROSS PIC X VALUE "┼". 05 WS-ALIGNMENT-CONTROLS. 10 WS-LEFT-ALIGN PIC X VALUE "L". 10 WS-CENTER-ALIGN PIC X VALUE "C". 10 WS-RIGHT-ALIGN PIC X VALUE "R". 01 WS-FINANCIAL-REPORT-DATA. 05 WS-FINANCIAL-RECORDS OCCURS 100 TIMES. 10 WS-ACCOUNT-CODE PIC X(8). 10 WS-ACCOUNT-NAME PIC X(30). 10 WS-BEGINNING-BAL PIC S9(10)V99 COMP-3. 10 WS-DEBITS PIC S9(10)V99 COMP-3. 10 WS-CREDITS PIC S9(10)V99 COMP-3. 10 WS-ENDING-BAL PIC S9(10)V99 COMP-3. 05 WS-RECORD-COUNT PIC 9(3) VALUE 0. 01 WS-REPORT-TOTALS. 05 WS-TOTAL-BEGINNING PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-DEBITS PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-CREDITS PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-ENDING PIC S9(12)V99 COMP-3 VALUE 0. PROCEDURE DIVISION. ADVANCED-REPORT-GENERATION. DISPLAY "=== ADVANCED REPORT GENERATION ===" PERFORM INITIALIZE-REPORT-SYSTEM PERFORM LOAD-FINANCIAL-DATA PERFORM GENERATE-COMPREHENSIVE-REPORT PERFORM GENERATE-EXECUTIVE-SUMMARY PERFORM FINALIZE-REPORT-SYSTEM DISPLAY "=== ADVANCED REPORTING COMPLETE ===" INITIALIZE-REPORT-SYSTEM. DISPLAY "Initializing advanced report system..." *> Open advanced report file OPEN OUTPUT FINANCIAL-REPORT-FILE *> Set up formatting parameters MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP MOVE FUNCTION CURRENT-DATE(1:8) TO WS-SHORT-DATE *> Format long date STRING FUNCTION CURRENT-DATE(5:2) "/" FUNCTION CURRENT-DATE(7:2) "/" FUNCTION CURRENT-DATE(1:4) DELIMITED BY SIZE INTO WS-LONG-DATE END-STRING DISPLAY "✅ Report system initialized" LOAD-FINANCIAL-DATA. DISPLAY "Loading financial data for reporting..." *> Load sample financial data ADD 1 TO WS-RECORD-COUNT MOVE "10001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Cash - Operating Account" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 50000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 125000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 100000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 75000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) ADD 1 TO WS-RECORD-COUNT MOVE "12001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Accounts Receivable" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 85000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 200000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 175000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 110000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) ADD 1 TO WS-RECORD-COUNT MOVE "15001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Inventory - Raw Materials" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 150000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 300000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 275000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 175000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) DISPLAY "✅ Financial data loaded (" WS-RECORD-COUNT " accounts)" GENERATE-COMPREHENSIVE-REPORT. DISPLAY "Generating comprehensive financial report..." PERFORM PRINT-ADVANCED-HEADER PERFORM PRINT-FORMATTED-DETAIL-LINES PERFORM PRINT-SUBTOTALS-AND-SUMMARY DISPLAY "✅ Comprehensive report generated" PRINT-ADVANCED-HEADER. *> Print sophisticated header with borders PERFORM PRINT-HEADER-BORDER-TOP PERFORM PRINT-COMPANY-INFORMATION PERFORM PRINT-REPORT-TITLE-SECTION PERFORM PRINT-DATE-AND-PAGE-INFO PERFORM PRINT-HEADER-BORDER-BOTTOM PERFORM PRINT-COLUMN-HEADER-SECTION PRINT-HEADER-BORDER-TOP. *> Create top border STRING WS-TOP-LEFT FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-TOP-RIGHT DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-COMPANY-INFORMATION. *> Print centered company information PERFORM CENTER-TEXT WITH "FINANCIAL DYNAMICS CORPORATION" PERFORM CENTER-TEXT WITH "GENERAL LEDGER TRIAL BALANCE" PERFORM CENTER-TEXT WITH "FOR THE PERIOD ENDING " WS-LONG-DATE CENTER-TEXT. USING TEXT-TO-CENTER. COMPUTE WS-CENTER-POSITION = (WS-REPORT-WIDTH - FUNCTION LENGTH(TEXT-TO-CENTER)) / 2 STRING WS-VERTICAL FUNCTION UNSTRING(" ", WS-CENTER-POSITION - 1) TEXT-TO-CENTER FUNCTION UNSTRING(" ", WS-CENTER-POSITION - 1) WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-FORMATTED-DETAIL-LINES. DISPLAY "Printing formatted detail lines..." PERFORM VARYING DETAIL-INDEX FROM 1 BY 1 UNTIL DETAIL-INDEX > WS-RECORD-COUNT PERFORM CHECK-PAGE-OVERFLOW PERFORM FORMAT-ACCOUNT-DETAIL-LINE PERFORM CALCULATE-RUNNING-TOTALS END-PERFORM CHECK-PAGE-OVERFLOW. IF WS-CURRENT-LINE >= WS-DETAIL-LINES PERFORM NEW-PAGE-WITH-HEADERS END-IF FORMAT-ACCOUNT-DETAIL-LINE. *> Format sophisticated detail line with proper alignment STRING WS-VERTICAL " " WS-ACCOUNT-CODE(DETAIL-INDEX) " " WS-ACCOUNT-NAME(DETAIL-INDEX) FUNCTION UNSTRING(" ", 32 - FUNCTION LENGTH(WS-ACCOUNT-NAME(DETAIL-INDEX))) WS-BEGINNING-BAL(DETAIL-INDEX) " " WS-DEBITS(DETAIL-INDEX) " " WS-CREDITS(DETAIL-INDEX) " " WS-ENDING-BAL(DETAIL-INDEX) " " WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE CALCULATE-RUNNING-TOTALS. ADD WS-BEGINNING-BAL(DETAIL-INDEX) TO WS-TOTAL-BEGINNING ADD WS-DEBITS(DETAIL-INDEX) TO WS-TOTAL-DEBITS ADD WS-CREDITS(DETAIL-INDEX) TO WS-TOTAL-CREDITS ADD WS-ENDING-BAL(DETAIL-INDEX) TO WS-TOTAL-ENDING PRINT-SUBTOTALS-AND-SUMMARY. DISPLAY "Printing subtotals and summary..." *> Print separator line PERFORM PRINT-SEPARATOR-LINE *> Print total line PERFORM PRINT-TOTALS-LINE *> Print analysis section PERFORM PRINT-FINANCIAL-ANALYSIS *> Print report footer PERFORM PRINT-REPORT-FOOTER PRINT-SEPARATOR-LINE. STRING WS-CROSS FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-CROSS DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-TOTALS-LINE. STRING WS-VERTICAL " " "TOTALS:" FUNCTION UNSTRING(" ", 25) WS-TOTAL-BEGINNING " " WS-TOTAL-DEBITS " " WS-TOTAL-CREDITS " " WS-TOTAL-ENDING " " WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-FINANCIAL-ANALYSIS. *> Print blank line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Calculate and print analysis COMPUTE WS-NET-CHANGE = WS-TOTAL-ENDING - WS-TOTAL-BEGINNING STRING "NET CHANGE IN BALANCES: " WS-NET-CHANGE DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Calculate percentage change IF WS-TOTAL-BEGINNING NOT = 0 COMPUTE WS-PERCENT-CHANGE = (WS-NET-CHANGE / WS-TOTAL-BEGINNING) * 100 STRING "PERCENTAGE CHANGE: " WS-PERCENT-CHANGE "%" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE END-IF PRINT-REPORT-FOOTER. *> Print bottom border STRING WS-BOTTOM-LEFT FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-BOTTOM-RIGHT DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Print report generation info MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "Report generated: " WS-TIMESTAMP " Page " WS-CURRENT-PAGE " of " WS-TOTAL-PAGES DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD GENERATE-EXECUTIVE-SUMMARY. DISPLAY "Generating executive summary..." *> Create separate executive summary PERFORM PRINT-EXECUTIVE-HEADER PERFORM PRINT-KEY-METRICS PERFORM PRINT-EXECUTIVE-ANALYSIS DISPLAY "✅ Executive summary generated" PRINT-EXECUTIVE-HEADER. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD PERFORM CENTER-TEXT WITH "EXECUTIVE SUMMARY" PERFORM CENTER-TEXT WITH "FINANCIAL POSITION OVERVIEW" PRINT-KEY-METRICS. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "KEY FINANCIAL METRICS:" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD STRING " Total Assets: " WS-TOTAL-ENDING DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD STRING " Net Activity: " WS-NET-CHANGE DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD PRINT-EXECUTIVE-ANALYSIS. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "ANALYSIS:" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD IF WS-NET-CHANGE > 0 STRING " • Positive net change indicates growth" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ELSE STRING " • Negative net change requires attention" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD END-IF FINALIZE-REPORT-SYSTEM. DISPLAY "Finalizing report system..." CLOSE FINANCIAL-REPORT-FILE DISPLAY "📊 Report Generation Summary:" DISPLAY " Total pages: " WS-CURRENT-PAGE DISPLAY " Total lines: " WS-LINES-PRINTED DISPLAY " Accounts processed: " WS-RECORD-COUNT DISPLAY " Report file: FINANCIAL-REPORT.PRT" DISPLAY "✅ Report system finalized"

PRINTING Features and Capabilities

Report Formatting
  • • Professional page layout
  • • Header and footer control
  • • Column alignment
  • • Border and line formatting
Business Applications
  • • Financial statements
  • • Invoices and bills
  • • Audit reports
  • • Regulatory documents

Best Practices

Related Pages