MainframeMaster

COBOL Tutorial

COBOL AFTER Clause

The AFTER clause represents one of COBOL's most sophisticated and essential timing control mechanisms, serving as the fundamental framework for sequence management, conditional processing, and advanced program flow control in business applications. Far more than a simple timing directive, the AFTER clause embodies COBOL's comprehensive approach to temporal logic by providing precise control over execution timing, event sequencing, conditional operations, and complex workflow coordination that enable applications to handle time-sensitive business processes while maintaining the accuracy and reliability characteristics that make COBOL ideal for enterprise computing environments requiring precise timing control.

In enterprise computing environments, the AFTER clause serves as a critical component for advanced workflow management, enabling developers to create sophisticated business applications that handle complex timing requirements, sequential processing patterns, conditional execution flows, and time-dependent business logic. Its capabilities extend far beyond simple sequence control to encompass sophisticated timing patterns, event-driven processing, conditional workflow management, and integration with modern business process automation systems that are essential for applications requiring precise timing control and sophisticated workflow coordination capabilities.

Understanding AFTER Clause Architecture

The AFTER clause implements a comprehensive timing control and sequence management architecture that abstracts the complex relationship between logical program flow and temporal execution requirements. This architecture encompasses multiple timing modes, sequence control strategies, conditional processing algorithms, and workflow coordination mechanisms that work together to provide flexible, efficient, and reliable timing control capabilities suitable for production business applications that must handle diverse temporal requirements and timing constraints.

At its core, the AFTER clause manages the intricate interaction between program execution sequences and business timing requirements by providing standardized mechanisms for controlling execution order, managing conditional flows, and coordinating complex timing patterns. This includes sophisticated timing algorithms that handle different execution contexts and requirements, automatic sequence optimization, and timing validation mechanisms that ensure accurate execution flow while maintaining optimal performance characteristics.

The architectural design of the AFTER clause reflects COBOL's emphasis on precision and maintainability while providing the flexibility necessary for advanced timing control. Unlike simple sequence control mechanisms in other languages, the AFTER clause provides comprehensive timing management, conditional processing support, and workflow optimization features that enable developers to create sophisticated time-sensitive applications while maintaining the reliability and predictability characteristics that are essential for business-critical systems.

Comprehensive AFTER Clause Capabilities:

  • Timing Control: Sophisticated mechanisms for controlling execution timing including sequential processing, conditional timing, and event-driven execution with precise timing validation.
  • Sequence Management: Advanced sequence control including ordered execution, conditional sequencing, and complex workflow coordination with automatic optimization.
  • Conditional Processing: Comprehensive conditional execution capabilities including context-aware timing, data-driven sequencing, and dynamic flow control adjustments.
  • Event Coordination: Sophisticated event management that handles different timing patterns including synchronous processing, asynchronous coordination, and event-driven workflows.
  • Workflow Optimization: Advanced workflow optimization including timing analysis, sequence optimization, and performance improvements for complex business processes.
  • Integration Support: Comprehensive integration with COBOL control structures, file processing systems, and modern workflow management frameworks with standardized timing interfaces.
  • Error Handling: Seamless integration with error handling systems including timing-related error detection, sequence validation, and recovery mechanisms.
  • Performance Monitoring: Advanced timing performance monitoring and optimization tools that provide detailed insights into execution patterns and timing efficiency metrics.

Enterprise Timing Management Patterns

In enterprise environments, the AFTER clause enables sophisticated timing management patterns that handle the complex requirements of business applications including time-sensitive processing, sequential workflow coordination, conditional execution flows, and integration with modern business process management systems. These patterns must balance timing precision with processing efficiency while supporting the scalability and reliability requirements of modern business systems.

Modern enterprise applications implement layered timing management architectures where AFTER clauses work in conjunction with workflow engines, scheduling systems, and distributed processing frameworks. This layered approach enables applications to optimize timing control across different system components while maintaining consistent execution characteristics and providing comprehensive timing management capabilities that adapt to varying business requirements and processing patterns.

The integration of AFTER clauses with contemporary business systems enables sophisticated timing patterns including event-driven processing, workflow orchestration mechanisms, and real-time coordination strategies. These patterns support the operational and efficiency requirements of modern business systems while leveraging COBOL's proven timing control capabilities and reliability features.

Performance and Reliability Considerations

The AFTER clause's performance characteristics are crucial for applications that must handle time-sensitive operations, support high-frequency processing, and maintain optimal timing accuracy across diverse computing environments. Performance optimization involves careful design of timing patterns, efficient sequence management strategies, and coordination with system-level timing optimization features including scheduling management and execution prioritization.

Advanced reliability management includes comprehensive timing validation that ensures execution sequences remain accurate under varying system conditions, automatic timing adjustment that maintains processing integrity during system fluctuations, and sequence verification mechanisms that ensure correct execution flow throughout complex timing operations. These reliability features enable COBOL applications to maintain high accuracy even when performing complex timing-sensitive operations and workflow coordination tasks.

Timing optimization planning for AFTER clause usage requires understanding both current and projected timing requirements, execution pattern analysis, and system performance constraints. Modern implementations support intelligent timing that adapts to system load characteristics, automatic optimization that adjusts timing strategies based on execution patterns, and comprehensive monitoring that provides visibility into timing performance and execution efficiency metrics.

AFTER Clause Syntax and Applications

Complete AFTER Clause Syntax Forms

The AFTER clause provides multiple syntax forms designed to handle different timing control scenarios and sequence management requirements. Understanding these variations and their appropriate applications is crucial for creating efficient, reliable timing control systems that can handle the diverse temporal requirements of enterprise applications.

Basic Timing Control

cobol
1
2
3
4
5
6
7
8
9
10
11
*> Basic AFTER clause with ADVANCING WRITE REPORT-LINE AFTER ADVANCING 1 LINE. *> Multiple line advancement WRITE REPORT-LINE AFTER ADVANCING 2 LINES. *> Page advancement WRITE REPORT-LINE AFTER ADVANCING PAGE. *> Variable advancement WRITE REPORT-LINE AFTER ADVANCING LINE-COUNT LINES.

Basic timing control provides standard sequence management with line positioning and page control capabilities.

Conditional Timing

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*> Conditional AFTER processing IF RECORD-COUNT > 50 WRITE REPORT-LINE AFTER ADVANCING PAGE ELSE WRITE REPORT-LINE AFTER ADVANCING 1 LINE END-IF. *> Complex conditional timing EVALUATE REPORT-TYPE WHEN 'HEADER' WRITE REPORT-LINE AFTER ADVANCING PAGE WHEN 'DETAIL' WRITE REPORT-LINE AFTER ADVANCING 1 LINE WHEN 'SUMMARY' WRITE REPORT-LINE AFTER ADVANCING 3 LINES END-EVALUATE.

Conditional timing enables dynamic sequence control based on data conditions and business logic requirements.

Advanced Sequence Management

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*> Sequential processing with timing PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 10 WRITE DETAIL-LINE AFTER ADVANCING 1 LINE IF COUNTER = 5 WRITE SECTION-BREAK AFTER ADVANCING 2 LINES END-IF END-PERFORM. *> Event-driven timing control PERFORM PROCESS-RECORDS AFTER INITIAL-SETUP UNTIL END-OF-FILE. *> Complex workflow timing PERFORM HEADER-PROCESSING PERFORM DETAIL-PROCESSING AFTER HEADER-COMPLETE PERFORM FOOTER-PROCESSING AFTER DETAIL-COMPLETE.

Advanced sequence management provides sophisticated workflow control with event coordination and complex timing patterns.

Comprehensive AFTER Clause 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
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
IDENTIFICATION DIVISION. PROGRAM-ID. COMPREHENSIVE-AFTER-DEMO. *> Comprehensive demonstration of AFTER clause applications *> Covering timing control, sequence management, and workflow coordination ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO "TIMING-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL. SELECT TRANSACTION-FILE ASSIGN TO "TRANSACTIONS.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE. 01 REPORT-RECORD PIC X(132). FD TRANSACTION-FILE. 01 TRANSACTION-RECORD. 05 TRANS-ID PIC X(10). 05 TRANS-TYPE PIC X(5). 05 TRANS-AMOUNT PIC S9(8)V99. 05 TRANS-DATE PIC X(8). 05 TRANS-STATUS PIC X(10). WORKING-STORAGE SECTION. *> Timing control variables 01 TIMING-CONTROLS. 05 CURRENT-PHASE PIC X(20) VALUE "INITIALIZATION". 88 INIT-PHASE VALUE "INITIALIZATION". 88 PROCESSING-PHASE VALUE "PROCESSING". 88 SUMMARY-PHASE VALUE "SUMMARY". 88 CLEANUP-PHASE VALUE "CLEANUP". 05 SEQUENCE-COUNTER PIC 9(6) VALUE 0. 05 PHASE-START-TIME PIC X(8). 05 PHASE-END-TIME PIC X(8). 05 TOTAL-PROCESSING-TIME PIC 9(8) VALUE 0. *> Report formatting variables 01 REPORT-FORMATTING. 05 CURRENT-PAGE PIC 9(4) VALUE 1. 05 LINES-ON-PAGE PIC 9(3) VALUE 0. 05 MAX-LINES-PER-PAGE PIC 9(3) VALUE 60. 05 LINES-REMAINING PIC 9(3) VALUE 60. 05 LAST-SECTION-TYPE PIC X(10) VALUE SPACES. 05 SECTION-CHANGE-FLAG PIC X(1) VALUE 'N'. 88 SECTION-CHANGED VALUE 'Y'. 88 SECTION-UNCHANGED VALUE 'N'. *> Workflow coordination variables 01 WORKFLOW-COORDINATION. 05 HEADER-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 HEADER-COMPLETE VALUE 'Y'. 88 HEADER-PENDING VALUE 'N'. 05 DETAIL-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 DETAIL-COMPLETE VALUE 'Y'. 88 DETAIL-PENDING VALUE 'N'. 05 SUMMARY-COMPLETE-FLAG PIC X(1) VALUE 'N'. 88 SUMMARY-COMPLETE VALUE 'Y'. 88 SUMMARY-PENDING VALUE 'N'. 05 PROCESSING-STAGE PIC 9(2) VALUE 1. *> Report line definitions 01 PHASE-HEADER. 05 FILLER PIC X(20) VALUE "=== PHASE: ". 05 PHASE-NAME PIC X(20). 05 FILLER PIC X(10) VALUE " ===". 05 FILLER PIC X(82) VALUE SPACES. 01 TIMING-REPORT-LINE. 05 FILLER PIC X(5) VALUE "TIME: ". 05 TIMING-TIMESTAMP PIC X(8). 05 FILLER PIC X(10) VALUE " - STEP: ". 05 TIMING-STEP PIC X(30). 05 FILLER PIC X(10) VALUE " - SEQ: ". 05 TIMING-SEQUENCE PIC Z,ZZ9. 05 FILLER PIC X(65) VALUE SPACES. 01 SECTION-BREAK-LINE. 05 FILLER PIC X(132) VALUE ALL "-". 01 WORKFLOW-STATUS-LINE. 05 FILLER PIC X(15) VALUE "WORKFLOW STATUS: ". 05 WORKFLOW-DESCRIPTION PIC X(50). 05 FILLER PIC X(10) VALUE " STAGE: ". 05 WORKFLOW-STAGE PIC Z9. 05 FILLER PIC X(55) VALUE SPACES. 01 TRANSACTION-DETAIL-LINE. 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-ID PIC X(10). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-TYPE PIC X(5). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-AMOUNT PIC $$$,$$$,$$9.99-. 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-DATE PIC X(8). 05 FILLER PIC X(5) VALUE SPACES. 05 DTL-TRANS-STATUS PIC X(10). 05 FILLER PIC X(69) VALUE SPACES. *> Statistics and counters 01 PROCESSING-STATISTICS. 05 TOTAL-TRANSACTIONS PIC 9(8) VALUE 0. 05 PROCESSED-TRANSACTIONS PIC 9(8) VALUE 0. 05 ERROR-TRANSACTIONS PIC 9(6) VALUE 0. 05 PHASES-COMPLETED PIC 9(2) VALUE 0. 05 WORKFLOW-STEPS PIC 9(4) VALUE 0. 05 TIMING-EVENTS PIC 9(6) VALUE 0. *> Advanced timing variables 01 ADVANCED-TIMING. 05 CONDITIONAL-SPACING PIC 9(1) VALUE 1. 05 SECTION-SPACING PIC 9(1) VALUE 2. 05 PHASE-SPACING PIC 9(1) VALUE 3. 05 WORKFLOW-SPACING PIC 9(1) VALUE 2. 05 LAST-TRANSACTION-TYPE PIC X(5) VALUE SPACES. 05 TYPE-CHANGE-FLAG PIC X(1) VALUE 'N'. 88 TYPE-CHANGED VALUE 'Y'. 88 TYPE-UNCHANGED VALUE 'N'. *> Working variables 01 WORK-VARIABLES. 05 WS-CURRENT-TIME PIC X(8). 05 WS-COUNTER PIC 9(6). 05 WS-TEMP-AMOUNT PIC S9(10)V99. 05 WS-LINE-COUNT PIC 9(3). 05 WS-PHASE-DURATION PIC 9(6). PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== Comprehensive AFTER Clause Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-TIMING-SYSTEM PERFORM DEMONSTRATE-BASIC-AFTER-TIMING PERFORM DEMONSTRATE-CONDITIONAL-TIMING PERFORM DEMONSTRATE-WORKFLOW-COORDINATION PERFORM DEMONSTRATE-ADVANCED-SEQUENCING PERFORM DEMONSTRATE-COMPLEX-TIMING-PATTERNS PERFORM FINALIZE-TIMING-SYSTEM DISPLAY " ". DISPLAY "AFTER clause demonstration completed successfully". STOP RUN. INITIALIZE-TIMING-SYSTEM. DISPLAY "1. Initializing Timing System:". DISPLAY " ============================". *> Set initial phase SET INIT-PHASE TO TRUE. MOVE "INITIALIZATION" TO PHASE-NAME. ACCEPT PHASE-START-TIME FROM TIME. MOVE 0 TO SEQUENCE-COUNTER. *> Initialize workflow flags SET HEADER-PENDING TO TRUE. SET DETAIL-PENDING TO TRUE. SET SUMMARY-PENDING TO TRUE. MOVE 1 TO PROCESSING-STAGE. *> Initialize statistics MOVE 0 TO TOTAL-TRANSACTIONS PROCESSED-TRANSACTIONS ERROR-TRANSACTIONS PHASES-COMPLETED WORKFLOW-STEPS TIMING-EVENTS. *> Open report file OPEN OUTPUT REPORT-FILE. *> Write initialization phase header WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING PAGE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. *> Record timing event PERFORM RECORD-TIMING-EVENT USING "System Initialization Started". DISPLAY " Timing system initialized". DISPLAY " Initial phase: " CURRENT-PHASE. DISPLAY " Processing stage: " PROCESSING-STAGE. DISPLAY " ". RECORD-TIMING-EVENT USING EVENT-DESCRIPTION. 01 EVENT-DESCRIPTION PIC X(30). ADD 1 TO SEQUENCE-COUNTER TIMING-EVENTS. ACCEPT WS-CURRENT-TIME FROM TIME. MOVE WS-CURRENT-TIME TO TIMING-TIMESTAMP. MOVE EVENT-DESCRIPTION TO TIMING-STEP. MOVE SEQUENCE-COUNTER TO TIMING-SEQUENCE. WRITE REPORT-RECORD FROM TIMING-REPORT-LINE AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. DEMONSTRATE-BASIC-AFTER-TIMING. DISPLAY "2. Basic AFTER Timing Operations:". DISPLAY " ===============================". *> Transition to processing phase PERFORM TRANSITION-TO-PROCESSING-PHASE. *> Demonstrate basic timing with AFTER PERFORM DEMONSTRATE-BASIC-LINE-TIMING. *> Demonstrate page timing PERFORM DEMONSTRATE-PAGE-TIMING. *> Demonstrate variable timing PERFORM DEMONSTRATE-VARIABLE-TIMING. DISPLAY " Basic AFTER timing operations completed". DISPLAY " ". TRANSITION-TO-PROCESSING-PHASE. ACCEPT PHASE-END-TIME FROM TIME. COMPUTE WS-PHASE-DURATION = PHASE-END-TIME - PHASE-START-TIME. ADD WS-PHASE-DURATION TO TOTAL-PROCESSING-TIME. SET PROCESSING-PHASE TO TRUE. MOVE "PROCESSING" TO PHASE-NAME. ACCEPT PHASE-START-TIME FROM TIME. ADD 1 TO PHASES-COMPLETED. *> Write phase transition with spacing WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Transitioned to Processing Phase". DEMONSTRATE-BASIC-LINE-TIMING. DISPLAY " Basic Line Timing with AFTER:". *> Single line timing MOVE "Single line timing demonstration" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Single Line Timing". *> Multiple line timing MOVE "Multiple line timing (2 lines)" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Multiple Line Timing". *> Zero line timing (overprint) MOVE "Zero line timing (overprint)" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 0 LINES. PERFORM RECORD-TIMING-EVENT USING "Zero Line Timing". DISPLAY " Basic line timing: COMPLETED". DEMONSTRATE-PAGE-TIMING. DISPLAY " Page Timing with AFTER:". *> Force page break with timing MOVE "Page break timing demonstration" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING PAGE. ADD 1 TO CURRENT-PAGE. MOVE 1 TO LINES-ON-PAGE. COMPUTE LINES-REMAINING = MAX-LINES-PER-PAGE - LINES-ON-PAGE. PERFORM RECORD-TIMING-EVENT USING "Page Break Timing". *> Write new page header MOVE "NEW PAGE AFTER TIMING CONTROL" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. DISPLAY " Page timing: COMPLETED". DISPLAY " New page number: " CURRENT-PAGE. DEMONSTRATE-VARIABLE-TIMING. DISPLAY " Variable Timing with AFTER:". *> Variable line spacing based on conditions PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 5 COMPUTE WS-LINE-COUNT = WS-COUNTER STRING "Variable timing line " WS-COUNTER " with " WS-LINE-COUNT " line spacing" DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WS-LINE-COUNT LINES ADD WS-LINE-COUNT TO LINES-ON-PAGE SUBTRACT WS-LINE-COUNT FROM LINES-REMAINING STRING "Variable Timing " WS-COUNTER DELIMITED BY SIZE INTO TIMING-STEP PERFORM RECORD-TIMING-EVENT USING TIMING-STEP END-PERFORM. DISPLAY " Variable timing: COMPLETED". DEMONSTRATE-CONDITIONAL-TIMING. DISPLAY "3. Conditional AFTER Timing:". DISPLAY " ==========================". PERFORM DEMONSTRATE-DATA-DRIVEN-TIMING PERFORM DEMONSTRATE-CONTEXT-SENSITIVE-TIMING PERFORM DEMONSTRATE-COMPLEX-CONDITIONAL-TIMING. DEMONSTRATE-DATA-DRIVEN-TIMING. DISPLAY " Data-Driven Timing Control:". *> Simulate different data conditions PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 8 *> Determine transaction type COMPUTE WS-TEMP-AMOUNT = WS-COUNTER * 1000 IF WS-COUNTER < 3 MOVE "DEBIT" TO DTL-TRANS-TYPE ELSE IF WS-COUNTER < 6 MOVE "CREDIT" TO DTL-TRANS-TYPE ELSE MOVE "TRANSFER" TO DTL-TRANS-TYPE END-IF *> Check for type change IF DTL-TRANS-TYPE NOT = LAST-TRANSACTION-TYPE SET TYPE-CHANGED TO TRUE MOVE DTL-TRANS-TYPE TO LAST-TRANSACTION-TYPE ELSE SET TYPE-UNCHANGED TO TRUE END-IF *> Apply conditional timing based on data IF TYPE-CHANGED WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING SECTION-SPACING LINES ADD SECTION-SPACING TO LINES-ON-PAGE SUBTRACT SECTION-SPACING FROM LINES-REMAINING STRING "Type change to " DTL-TRANS-TYPE DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Data-Driven Type Change" ELSE STRING "Continuing " DTL-TRANS-TYPE " processing" DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES ADD CONDITIONAL-SPACING TO LINES-ON-PAGE SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Data-Driven Normal Flow" END-IF END-PERFORM. DISPLAY " Data-driven timing: COMPLETED". DEMONSTRATE-CONTEXT-SENSITIVE-TIMING. DISPLAY " Context-Sensitive Timing:". *> Different timing based on processing context EVALUATE PROCESSING-STAGE WHEN 1 MOVE "Stage 1: Initial Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING WHEN 2 MOVE "Stage 2: Intermediate Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING WHEN OTHER MOVE "Advanced Processing Context" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-EVALUATE. ADD 1 TO PROCESSING-STAGE. PERFORM RECORD-TIMING-EVENT USING "Context-Sensitive Timing". DISPLAY " Context-sensitive timing: COMPLETED". DEMONSTRATE-COMPLEX-CONDITIONAL-TIMING. DISPLAY " Complex Conditional Timing:". *> Multi-level conditional timing IF LINES-REMAINING < 10 MOVE "Page space critical - forcing new page" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING PAGE ADD 1 TO CURRENT-PAGE MOVE 1 TO LINES-ON-PAGE COMPUTE LINES-REMAINING = MAX-LINES-PER-PAGE - LINES-ON-PAGE PERFORM RECORD-TIMING-EVENT USING "Critical Space Page Break" ELSE IF PROCESSED-TRANSACTIONS > 50 MOVE "High volume processing - extra spacing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "High Volume Spacing" ELSE MOVE "Normal processing - standard spacing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Standard Spacing" END-IF END-IF. DISPLAY " Complex conditional timing: COMPLETED". DEMONSTRATE-WORKFLOW-COORDINATION. DISPLAY "4. Workflow Coordination with AFTER:". DISPLAY " ==================================". PERFORM DEMONSTRATE-SEQUENTIAL-WORKFLOW PERFORM DEMONSTRATE-CONDITIONAL-WORKFLOW PERFORM DEMONSTRATE-PARALLEL-COORDINATION. DEMONSTRATE-SEQUENTIAL-WORKFLOW. DISPLAY " Sequential Workflow Timing:". *> Header processing phase PERFORM PROCESS-HEADER-PHASE. *> Detail processing after header complete IF HEADER-COMPLETE PERFORM PROCESS-DETAIL-PHASE END-IF. *> Summary processing after detail complete IF DETAIL-COMPLETE PERFORM PROCESS-SUMMARY-PHASE END-IF. DISPLAY " Sequential workflow: COMPLETED". PROCESS-HEADER-PHASE. MOVE "HEADER PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 1 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate header processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 3 STRING "Header step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS END-PERFORM. SET HEADER-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Header Phase Complete". PROCESS-DETAIL-PHASE. MOVE "DETAIL PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 2 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate detail processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 5 STRING "Detail step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS ADD 1 TO PROCESSED-TRANSACTIONS END-PERFORM. SET DETAIL-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Detail Phase Complete". PROCESS-SUMMARY-PHASE. MOVE "SUMMARY PROCESSING PHASE" TO WORKFLOW-DESCRIPTION. MOVE 3 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Simulate summary processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 2 STRING "Summary step " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ADD 1 TO WORKFLOW-STEPS END-PERFORM. SET SUMMARY-COMPLETE TO TRUE. PERFORM RECORD-TIMING-EVENT USING "Summary Phase Complete". DEMONSTRATE-CONDITIONAL-WORKFLOW. DISPLAY " Conditional Workflow Timing:". *> Conditional workflow based on processing results IF PROCESSED-TRANSACTIONS > 0 MOVE "Conditional workflow - transactions processed" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WORKFLOW-SPACING LINES ADD WORKFLOW-SPACING TO LINES-ON-PAGE SUBTRACT WORKFLOW-SPACING FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Conditional Workflow Triggered" *> Additional processing based on volume IF PROCESSED-TRANSACTIONS > 3 MOVE "High volume detected - extended processing" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Extended Processing" END-IF ELSE MOVE "No transactions to process - skipping workflow" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING PERFORM RECORD-TIMING-EVENT USING "Workflow Skipped" END-IF. DISPLAY " Conditional workflow: COMPLETED". DEMONSTRATE-PARALLEL-COORDINATION. DISPLAY " Parallel Coordination Timing:". *> Simulate parallel processing coordination MOVE "PARALLEL COORDINATION PHASE" TO WORKFLOW-DESCRIPTION. MOVE 4 TO WORKFLOW-STAGE. WRITE REPORT-RECORD FROM WORKFLOW-STATUS-LINE AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. *> Coordinate multiple parallel streams PERFORM COORDINATE-STREAM-A. PERFORM COORDINATE-STREAM-B. PERFORM SYNCHRONIZE-STREAMS. DISPLAY " Parallel coordination: COMPLETED". COORDINATE-STREAM-A. MOVE "Stream A: Processing initiated" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Stream A Started". COORDINATE-STREAM-B. MOVE "Stream B: Processing initiated" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Stream B Started". SYNCHRONIZE-STREAMS. MOVE "Streams synchronized - coordination complete" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Streams Synchronized". DEMONSTRATE-ADVANCED-SEQUENCING. DISPLAY "5. Advanced Sequencing Patterns:". DISPLAY " ==============================". PERFORM DEMONSTRATE-NESTED-TIMING PERFORM DEMONSTRATE-RECURSIVE-TIMING PERFORM DEMONSTRATE-DYNAMIC-SEQUENCING. DEMONSTRATE-NESTED-TIMING. DISPLAY " Nested Timing Control:". *> Outer timing loop PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 3 STRING "Outer sequence " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING *> Inner timing loop with different spacing PERFORM VARYING WS-LINE-COUNT FROM 1 BY 1 UNTIL WS-LINE-COUNT > 2 STRING " Inner sequence " WS-COUNTER "-" WS-LINE-COUNT DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING END-PERFORM PERFORM RECORD-TIMING-EVENT USING "Nested Timing Sequence" END-PERFORM. DISPLAY " Nested timing: COMPLETED". DEMONSTRATE-RECURSIVE-TIMING. DISPLAY " Recursive Timing Patterns:". MOVE 3 TO WS-COUNTER. PERFORM RECURSIVE-TIMING-PROCESS. DISPLAY " Recursive timing: COMPLETED". RECURSIVE-TIMING-PROCESS. IF WS-COUNTER > 0 STRING "Recursive level " WS-COUNTER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING WS-COUNTER LINES ADD WS-COUNTER TO LINES-ON-PAGE SUBTRACT WS-COUNTER FROM LINES-REMAINING SUBTRACT 1 FROM WS-COUNTER PERFORM RECURSIVE-TIMING-PROCESS PERFORM RECORD-TIMING-EVENT USING "Recursive Timing Level" END-IF. DEMONSTRATE-DYNAMIC-SEQUENCING. DISPLAY " Dynamic Sequencing Control:". *> Dynamic timing based on system state COMPUTE CONDITIONAL-SPACING = PROCESSED-TRANSACTIONS / 10 + 1. IF CONDITIONAL-SPACING > 5 MOVE 5 TO CONDITIONAL-SPACING END-IF. STRING "Dynamic spacing: " CONDITIONAL-SPACING " lines" DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES. ADD CONDITIONAL-SPACING TO LINES-ON-PAGE. SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Dynamic Sequencing". DISPLAY " Dynamic sequencing: COMPLETED". DEMONSTRATE-COMPLEX-TIMING-PATTERNS. DISPLAY "6. Complex Timing Patterns:". DISPLAY " =========================". PERFORM DEMONSTRATE-EVENT-DRIVEN-TIMING PERFORM DEMONSTRATE-ADAPTIVE-TIMING PERFORM DEMONSTRATE-OPTIMIZATION-PATTERNS. DEMONSTRATE-EVENT-DRIVEN-TIMING. DISPLAY " Event-Driven Timing:". *> Simulate event-driven processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 6 *> Determine event type COMPUTE WS-LINE-COUNT = FUNCTION MOD(WS-COUNTER, 3) + 1 EVALUATE WS-LINE-COUNT WHEN 1 MOVE "Event Type A detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING WHEN 2 MOVE "Event Type B detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 2 LINES ADD 2 TO LINES-ON-PAGE SUBTRACT 2 FROM LINES-REMAINING WHEN 3 MOVE "Event Type C detected" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-EVALUATE PERFORM RECORD-TIMING-EVENT USING "Event-Driven Processing" END-PERFORM. DISPLAY " Event-driven timing: COMPLETED". DEMONSTRATE-ADAPTIVE-TIMING. DISPLAY " Adaptive Timing Control:". *> Adaptive timing based on system performance IF TIMING-EVENTS > 20 MOVE 1 TO CONDITIONAL-SPACING *> Compact spacing for high activity ELSE MOVE 2 TO CONDITIONAL-SPACING *> Normal spacing for low activity END-IF. STRING "Adaptive timing - activity level: " TIMING-EVENTS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING CONDITIONAL-SPACING LINES. ADD CONDITIONAL-SPACING TO LINES-ON-PAGE. SUBTRACT CONDITIONAL-SPACING FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Adaptive Timing". DISPLAY " Adaptive timing: COMPLETED". DEMONSTRATE-OPTIMIZATION-PATTERNS. DISPLAY " Timing Optimization Patterns:". *> Optimized timing for performance IF LINES-REMAINING < 15 *> Optimize for page utilization MOVE "Optimized for page utilization" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 1 LINE ADD 1 TO LINES-ON-PAGE SUBTRACT 1 FROM LINES-REMAINING ELSE *> Optimize for readability MOVE "Optimized for readability" TO REPORT-RECORD WRITE REPORT-RECORD AFTER ADVANCING 3 LINES ADD 3 TO LINES-ON-PAGE SUBTRACT 3 FROM LINES-REMAINING END-IF. PERFORM RECORD-TIMING-EVENT USING "Timing Optimization". DISPLAY " Timing optimization: COMPLETED". FINALIZE-TIMING-SYSTEM. DISPLAY "7. Finalizing Timing System:". DISPLAY " ==========================". *> Transition to cleanup phase ACCEPT PHASE-END-TIME FROM TIME. COMPUTE WS-PHASE-DURATION = PHASE-END-TIME - PHASE-START-TIME. ADD WS-PHASE-DURATION TO TOTAL-PROCESSING-TIME. SET CLEANUP-PHASE TO TRUE. MOVE "CLEANUP" TO PHASE-NAME. ADD 1 TO PHASES-COMPLETED. *> Write final phase header WRITE REPORT-RECORD FROM SECTION-BREAK-LINE AFTER ADVANCING 3 LINES. ADD 3 TO LINES-ON-PAGE. SUBTRACT 3 FROM LINES-REMAINING. WRITE REPORT-RECORD FROM PHASE-HEADER AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. *> Write final statistics PERFORM WRITE-FINAL-STATISTICS. *> Close report file CLOSE REPORT-FILE. DISPLAY " Final Timing Statistics:". DISPLAY " Total phases completed: " PHASES-COMPLETED. DISPLAY " Total workflow steps: " WORKFLOW-STEPS. DISPLAY " Total timing events: " TIMING-EVENTS. DISPLAY " Total processing time: " TOTAL-PROCESSING-TIME. DISPLAY " Processed transactions: " PROCESSED-TRANSACTIONS. DISPLAY " Timing system finalized successfully". DISPLAY " ". WRITE-FINAL-STATISTICS. MOVE "FINAL PROCESSING STATISTICS" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 2 LINES. ADD 2 TO LINES-ON-PAGE. SUBTRACT 2 FROM LINES-REMAINING. STRING "Phases Completed: " PHASES-COMPLETED DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Workflow Steps: " WORKFLOW-STEPS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Timing Events: " TIMING-EVENTS DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. STRING "Processing Time: " TOTAL-PROCESSING-TIME DELIMITED BY SIZE INTO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING 1 LINE. ADD 1 TO LINES-ON-PAGE. SUBTRACT 1 FROM LINES-REMAINING. PERFORM RECORD-TIMING-EVENT USING "Final Statistics Written".

Best Practices and Guidelines

Recommended Practices

  • Use consistent timing patterns throughout applications for predictable behavior
  • Implement proper sequence validation to ensure correct execution order
  • Design flexible timing systems that adapt to different processing requirements
  • Use meaningful timing variables and clear sequence documentation
  • Test timing logic thoroughly across different execution scenarios
  • Implement proper error handling for timing-related issues
  • Document timing dependencies and sequence requirements
  • Use conditional timing for dynamic workflow management

Common Pitfalls

  • Inconsistent timing patterns creating unpredictable execution flows
  • Missing sequence validation leading to incorrect processing order
  • Hard-coded timing values reducing system flexibility
  • Inadequate testing of timing-dependent logic
  • Poor coordination between timing and business logic
  • Ignoring timing dependencies in complex workflows
  • Not considering performance impact of timing operations
  • Insufficient error handling for timing-related failures

Related COBOL Concepts

  • BEFORE - Complementary timing control for pre-execution positioning
  • ADVANCING - Line and page positioning control
  • WRITE - Output statement that uses AFTER clause
  • PERFORM - Loop and sequence control structures
  • IF/EVALUATE - Conditional logic for timing control
  • UNTIL - Loop termination conditions
  • WHEN - Conditional timing in EVALUATE statements
  • SEQUENCE - Program execution order control