SA870 RPG36
The provided document, SA870.rpg36.txt, is an RPG (Report Program Generator) program for the IBM System/36, designed for a "Sales Analysis by Customer Inquiry" process. This RPG program, named SA870, is called by the OCL procedure provided earlier (SA870.ocl36.txt). Below, I will explain the process steps, business rules, tables (files) used, and any external programs called, based on the RPG source code and its integration with the OCL.
Process Steps of the RPG Program¶
The RPG program SA870 is an interactive customer inquiry program that allows users to retrieve and display sales analysis data for a specific customer, with the ability to scroll forward and backward through records. It uses a workstation (screen) for user interaction and processes data from two files: a customer master file (ARCUST) and a sales summary file (SASMC1). The program is structured around screen handling, file access, and subroutines for navigation and data retrieval. Here’s a detailed breakdown of the process steps:
- Program Initialization:
- File Definitions (Lines 0004–0009):
SCREEN: Defined as a workstation file (WORKSTN) for interactive display, with attributes for scroll line (KSLN LIN), roll key handling (KINFSR ROLLKY), and information data structure (KINFDS INFDS).SASMC1: An input file (IF) with a record length of 128 bytes, indexed (L21AI), externally described (EXTK), and stored on disk.ARCUST: An input file (IC) with a record length of 384 bytes, indexed (R 8AI), externally described, and stored on disk.
- Data Structures and Arrays (Lines 0010–0056):
- Arrays
COM(30 bytes) andMOR(28 bytes, 3 entries) store constant messages (e.g., "NO MASTER RECORD WAS FOUND" and "MORE RECORDS EXIST"). - Data structures define composite fields like
COCUST(company and customer number),ROLLKY(roll key fields), andINFDS(for workstation status).
- Arrays
-
Indicator Initialization (Lines 0059–0063):
- Clears message field (
MSG) and turns off indicator 81. - If the
KGfunction key (likely F3 or exit) is pressed, sets the Last Record (LR) indicator, clears indicators 81 and 82, and branches to theENDtag to terminate the program.
- Clears message field (
-
Function Key Handling:
- F3 (KG) (Lines 0062–0064): Exits the program by setting
LRand branching toEND. - F4 (KA) (Lines 0066–0069): Resets customer number (
CUST) to 0, sets indicator 81, and branches toEND, likely to clear the screen or reset the inquiry. -
F9 (Indicator 09) (Lines 0071–0073): Sets indicator 81, captures the current time into
RDATE, and branches toEND, possibly for refreshing the screen or logging. -
Screen 1 Processing (Indicator 01) (Lines 0075–0076, 0098–0115):
-
Subroutine
SUBSC1:- Called when indicator 01 is set (likely triggered by a user action, e.g., Enter key on the first screen).
- Chains to
ARCUSTusingCOCUST(company and customer number) to retrieve customer details (Line 0103). - If no record is found (indicator 95 on), displays "NO MASTER RECORD WAS FOUND" in
MSG, sets indicator 81, and exits the subroutine (Lines 0105–0107). - If a record is found, sets the lower limit (
SETLL) onSASMC1usingBEGKEY(constructed fromCOCUST) to position the file for reading (Lines 0109–0111). - Calls
READFWto read and display the first set of sales records (Line 0113).
-
Screen 2 Navigation (Indicator 02) (Lines 0078–0087):
- Clears indicator 19, sets indicator 18, and if indicator 88 is on (end of file or no matching records), resets
CUSTto 0, sets indicator 81, and clears indicators 02 and 18. -
Handles scrolling:
- If indicator 18 is on and 78 is off (forward scroll), calls
ROLLFWto position the file andREADFWto read forward. - If indicator 18 and 78 are on (forward scroll with more records), calls
ROLLBWto adjust positioning. - Branches to
ENDafter processing.
- If indicator 18 is on and 78 is off (forward scroll), calls
-
Backward Navigation (Indicator 19) (Lines 0089–0092):
-
Similar to forward navigation but for backward scrolling:
- If indicator 19 is on and 79 is off, calls
ROLLBWandREADBW. - If indicator 19 and 79 are on, calls
ROLLFW. - Calls
READBWto read backward and branches toEND.
- If indicator 19 is on and 79 is off, calls
-
Forward Reading (
READFWSubroutine) (Lines 0117–0157): - Reads
SASMC1records sequentially forward. - Sets indicator 82 and outputs a screen (via
EXCPT). - Initializes line number (
LIN) to 10 and counter (X) to 1. - Reads
SASMC1records, comparingSYCOCU(company/customer key) toCOCUST(Lines 0129–0130). - If no match or end of file (indicator 88 on), sets indicator 78 and sets
MOREto "END OF RECORDS" (Lines 0132–0134). - If a record is read, updates scroll keys (
SVTOP,SVBOT), outputs the record to the screen (viaEXCPT), and incrementsLINandX(Lines 0136–0145). - Loops until 12 records are displayed (
X= 12, indicator 90 on), then callsTESTFWto check for more records (Lines 0146–0150). -
Outputs a footer screen (indicator 84) and exits.
-
Backward Reading (
READBWSubroutine) (Lines 0159–0201): - Similar to
READFWbut readsSASMC1records backward (READP). - Starts at line 21 (
LIN= 21) and decrementsLINfor each record. - Sets indicator 79 and updates
MOREto "START OF RECORDS" if no more records are found. -
Outputs up to 12 records, then calls
TESTBWto check for more records. -
Scroll Key Handling:
- ROLLKY Subroutine (Lines 0235–0240): Checks workstation status (
INFDS) to detect scroll keys (e.g., Page Up = 01122, Page Down = 01123), setting indicators 18 or 19. - ROLLFW Subroutine (Lines 0242–0248): Positions
SASMC1atSVBOT(bottom of current page) and reads forward. -
ROLLBW Subroutine (Lines 0250–0254): Positions
SASMC1atSVTOP(top of current page) for backward reading. -
Test Subroutines:
- TESTFW (Lines 0203–0217): Checks for more records by reading forward in
SASMC1. Sets indicator 78 and updatesMOREif no more matching records exist. -
TESTBW (Lines 0219–0233): Checks for previous records by reading backward. Sets indicator 79 and updates
MOREaccordingly. -
Screen Output (Lines 0258–0285):
- Screen SA870S1 (Indicator 81): Displays date (
RDATE), company (CO), customer number (CUST), and error message (MSG). - Screen SA870S2 (Indicator 82): Displays customer details (
ARNAME,ARADR1,ARADR2,ARADR3). - Screen SA870S3 (Indicator 83): Displays sales record details (
SYPROD,SYLOC,SYMO,SYYR,SYINTY,SYBQTY,SYUNMS,SYBDOL). - Screen SA870S4 (Indicator 84): Displays the
MOREmessage (e.g., "MORE RECORDS EXIST", "END OF RECORDS").
- Screen SA870S1 (Indicator 81): Displays date (
-
Program Termination:
- The
ENDtag (Line 0094) is the exit point for most operations, looping back to display the screen or terminate ifLRis set.
- The
Business Rules¶
The RPG program enforces the following business rules for the customer inquiry process:
1. Customer Validation:
- The user enters a company and customer number (COCUST) on the first screen.
- The program validates the input by chaining to ARCUST. If no record is found, it displays "NO MASTER RECORD WAS FOUND" and prevents further processing.
2. Data Retrieval:
- Sales records from SASMC1 must match the company and customer number (SYCOCU = COCUST) to be displayed.
- Records are displayed in batches of up to 12 per screen, with fields like product, location, month, year, invoice type, billed quantity, unit of measure, and billed dollars.
3. Navigation:
- Users can scroll forward (Page Down) or backward (Page Up) through matching SASMC1 records.
- The program tracks the top and bottom keys (SVTOP, SVBOT) to maintain scroll position.
- Indicators (MORE) inform the user if more records exist or if they’ve reached the start/end of records.
4. Screen Management:
- Displays customer details (name, address) from ARCUST and sales details from SASMC1.
- Uses multiple screens (SA870S1 to SA870S4) for different purposes (input, customer info, sales records, navigation status).
5. Error Handling:
- Displays error messages for invalid customer numbers.
- Manages end-of-file conditions by updating the MORE field appropriately.
6. Function Keys:
- F3 (KG): Exits the program.
- F4 (KA): Resets the customer number and clears the screen.
- F9: Captures the current time and refreshes the screen.
Tables (Files) Used¶
The RPG program uses the following files (tables):
1. SCREEN:
- Type: Workstation file (WORKSTN).
- Purpose: Handles interactive screen input/output for user interaction (e.g., displaying customer data, sales records, and navigation messages).
- Fields: Input fields (CO, CUST), output fields (RDATE, MSG, ARNAME, ARADR1, ARADR2, ARADR3, SYPROD, etc.).
2. SASMC1:
- Type: Input file (IF), 128 bytes, indexed.
- Purpose: Stores sales summary data for customers.
- Key Fields: SYCOCU (company/customer key), SYCONO (company), SYCUST (customer), SYPROD (product), SYLOC (location), SYMO (month), SYYR (year), SYINTY (invoice type), SYBQTY (billed quantity), SYUNMS (unit of measure), SYBDOL (billed dollars).
3. ARCUST:
- Type: Input file (IC), 384 bytes, indexed.
- Purpose: Stores customer master data.
- Key Fields: Customer number (part of COCUST).
- Fields: ARNAME (customer name), ARADR1, ARADR2, ARADR3 (address lines).
These files match the ones defined in the OCL (SASMC1 and ARCUST), confirming they are the data sources for the inquiry.
External Programs Called¶
The RPG program does not explicitly call any external programs. All logic is handled within SA870 through its subroutines (SUBSC1, READFW, READBW, TESTFW, TESTBW, ROLLKY, ROLLFW, ROLLBW). The program relies on the system’s file access and workstation handling capabilities, with no evidence of CALL operations to other programs.
Integration with OCL¶
The OCL procedure (SA870.ocl36.txt):
- Loads and runs SA870 (// LOAD SA870, // RUN).
- Assigns SASMC1 and ARCUST with shared access (DISP-SHR) and dynamic labels (?9?SASMC1, ?9?ARCUST), allowing flexibility in file naming.
- Likely passes parameters (e.g., via ?9?) to initialize the inquiry, though the RPG program doesn’t directly reference these placeholders, suggesting they are resolved at the OCL level.
Summary¶
The SA870 RPG program is a robust interactive application for querying customer sales data. It validates customer input, retrieves matching sales records, and supports scrolling through results, with clear screen management and navigation feedback. The business rules ensure accurate data retrieval and user-friendly interaction, while the OCL provides the necessary file setup and program invocation.
If you need further clarification, a deeper dive into specific subroutines, or assistance with related tasks (e.g., generating a flowchart or analyzing performance), let me know!