Showing posts with label COBOL run unit. Show all posts
Showing posts with label COBOL run unit. Show all posts

Sunday, 22 September 2013

COBOL Application Structure: Main Program, Subprograms, and Run Unit

A payroll batch job rarely has only one COBOL program. One program reads the employee file, another validates pay codes, another calculates deductions, and a final report step prints totals for payroll control. Together, those programs form the COBOL application that the batch job runs.

COBOL application structure diagram with main program subprograms files DB2 and reports
Keep the modules clear.

What is a COBOL application?

A COBOL application is a group of programs, files, screens, database calls, reports, and job steps that work together to complete one business task. The task can be payroll, policy renewal, account posting, claim processing, statement printing, or a month-end batch process.

The old version of this page used an employee management example. That is still a useful way to picture the idea: employee registration, salary calculation, daily requests, and reporting can be separate modules in one application. Each module has a smaller job, but the application owns the full business result.

COBOL application versus COBOL program

A COBOL program is one compiled source member with divisions such as IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION, and PROCEDURE DIVISION. A COBOL application is bigger than one program. It can include many COBOL programs and can also call programs written in other Language Environment member languages.

Item Meaning Example
Program One COBOL source member that is compiled. PAYMAIN, PAYCALC, PAYRPT
Application A set of programs and resources that complete a business process. Payroll processing for one pay cycle
Run unit One or more object programs that work together at run time. PAYMAIN calling PAYCALC and TAXCALC

Main program and subprograms

IBM describes the first COBOL program in a run unit as the main program. Other COBOL programs in that run unit are subprograms. There is no special source statement that marks a program as main or subprogram; the role depends on how the program enters the run unit.

This matters when the code ends or returns control. A main program normally finishes the run unit with STOP RUN or by returning to the caller outside that run unit. A subprogram usually returns control to the calling program with GOBACK or EXIT PROGRAM, depending on the coding standard used by the site.

Simple payroll application design

Here is a small payroll-style layout that a support developer might see in a batch application.

Program Role Main input or output
PAYMAIN Controls the run, reads employee records, and calls other modules. Employee master file
PAYVALD Checks employee status, department, and pay code. Validation return code
PAYCALC Calculates gross pay, tax, deduction, and net pay. Calculated payroll fields
PAYRPT Writes accepted, rejected, and control-total report lines. SYSOUT report

How the main program controls the flow

The main program should make the application flow easy to read. It opens files, loops through records, calls smaller modules, handles return codes, writes output, and closes files.

IDENTIFICATION DIVISION.
PROGRAM-ID. PAYMAIN.

PROCEDURE DIVISION.
    PERFORM OPEN-FILES
    PERFORM UNTIL WS-END-OF-FILE = 'Y'
        PERFORM READ-EMPLOYEE
        IF WS-END-OF-FILE NOT = 'Y'
            CALL 'PAYVALD' USING EMP-REC WS-VALID-RC
            IF WS-VALID-RC = ZERO
                CALL 'PAYCALC' USING EMP-REC PAY-RESULT
                CALL 'PAYRPT'  USING PAY-RESULT
            ELSE
                PERFORM WRITE-REJECT-REPORT
            END-IF
        END-IF
    END-PERFORM
    PERFORM CLOSE-FILES
    GOBACK.

This is only a sketch, but the shape is common. The main program reads the records and makes the top-level decisions. The called programs handle smaller pieces of the rule.

What belongs in a subprogram?

A subprogram is useful when the same rule is called from more than one place or when the rule is large enough to make the main program hard to read. Examples include tax calculation, interest calculation, address formatting, date validation, and report line building.

Good subprogram candidates

  • A calculation used by more than one batch job.
  • A validation rule shared by online and batch paths.
  • A report formatting routine that keeps the main flow short.
  • A database access routine with a clear input and output area.

Weak subprogram candidates

  • A two-line paragraph that is used only once.
  • A routine that changes global state without clear comments or return codes.
  • A module that needs too many unrelated fields in the USING list.

Data passed between programs

COBOL programs usually pass data through the CALL ... USING phrase. The calling program and called program must agree on the layout of the fields. If one side changes a copybook and the other side is not recompiled, the application can produce wrong values without an obvious compile error.

CALL 'PAYCALC' USING EMPLOYEE-RECORD
                     PAYROLL-RESULT
                     RETURN-AREA.

Keep the interface boring. Use clear copybook names, put return codes in a known place, and avoid sending every field in the application when the module only needs three values.

Files, DB2, and reports

Most COBOL applications are built around records. A batch program may read a sequential input file, update a VSAM file, call Db2 through embedded SQL, and write a report to SYSOUT. The application design should show which program owns each file or table update.

For file-heavy programs, review COBOL file operation and COBOL file I/O mode. Those topics explain why INPUT, OUTPUT, I-O, and EXTEND modes should match the way the application uses the data set.

Batch application checklist

  • Name the main program and each called module in the design note.
  • List input files, output files, VSAM clusters, Db2 tables, and reports.
  • Document every CALL ... USING interface with copybook names.
  • Define return codes for validation, calculation, and file errors.
  • Make restart points clear when the job updates files or tables.
  • Check whether called programs retain WORKING-STORAGE between calls.

Common mistakes

Putting every rule in the main program

A 5,000-line main program is hard to test and harder to support at 2 AM. Move repeated calculations and shared validation into called modules when the interface is stable.

Creating too many tiny modules

The opposite problem is also real. If a program calls twenty tiny modules to process one record, the support path becomes noisy. Keep module boundaries tied to business rules, files, or reports.

Ignoring retained storage

A called program can keep values in WORKING-STORAGE across calls, depending on how it ends and how it is compiled. That can be useful for counters, but it can also create a defect when a field from the previous employee is reused by accident. See COBOL Working Storage vs Local Storage and COBOL ending and reentering for the related behavior.

How to explain a COBOL application in an interview

A clear interview answer is short and practical: a COBOL application is a group of programs and resources that complete one business process. The first program in the run unit is the main program. Other programs are subprograms called for validation, calculation, database access, or reporting. Data is commonly passed with CALL ... USING, and the application is usually scheduled through JCL.

You can then give one example: a payroll application reads employee input, validates the record, calculates net pay, writes an output file, and prints a control report. That answer is much stronger than saying only that an application is a collection of programs.

Related COBOL tutorials

FAQ

Is a COBOL application the same as a COBOL program?

No. A COBOL program is one compiled source member. A COBOL application usually contains several programs, files, reports, JCL steps, and sometimes Db2 or CICS resources.

What is the main program in COBOL?

The main program is the first COBOL program in a run unit. It is not marked by a special COBOL statement; the way the run starts decides the role.

Why do COBOL applications use subprograms?

Subprograms keep repeated validation, calculation, file access, or report logic in smaller modules. That makes the application easier to test and support when the interface is clear.

What should I check before changing a COBOL application?

Check the JCL, called programs, copybooks, files, Db2 tables, return codes, and restart rules. A small copybook or file-layout change can affect several programs in the same application.

References

New In-feed ads