# JIN04PRT 詳細設計書 ## プログラム概要 | 項目 | 内容 | |------|------| | プログラムID | JIN04PRT(人事→JINji, 04, 社員台帳印刷→PRT) | | プログラムタイプ | 04(レイアウト編集のみ。LINAGE印刷制御) | | 機能 | EMP-VALID(チェック済社員データ)を読込み、社員台帳(JIN-LEDGER)形式で印刷出力する | | CALL方式 | メインプログラム(JCLからCALL) | | DBアクセス | なし | | 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) | ### 前提条件 | NO | 対象ファイル | 条件 | |----|-------------|------| | 1 | EMP-VALID | JCL の SORT(STEP010)で社員番号昇順に並替済であること | ### 使用ファイル一覧 | NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 | |----|--------------|--------|------|-----|--------|------|-----------|------|------| | 1 | EMP-VALID | R01 | JIN04R01 | I | JIN01REC | FB | 200 | PS | チェック済社員データ | | 2 | JIN-LEDGER | W01 | JIN04W01 | O | JIN04RPT-REC | | 132 | PS | 社員台帳印刷(LINAGE 66行) | ### キー項目一覧 | NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | |----|-----------|---------------------|-------------------------------------| | 1 | EMP-VALID | JIN04R01: EMP-ID 升順 | なし(順次印刷) | ### 使用モジュール一覧 | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | 運用日付取得SUB | SUB01DAT | JINDATAC | | 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC | | 3 | ABEND処理SUB | SUB03END | JINENDAC | --- ## 処理詳細 ### 段落一覧(実装コードの SOR 規約名に対応) | 段落名 | 機能 | |:-------|:-----| | 0000MAJCOLSOR | メインコントロール(初期→読込→印刷ループ→終了) | | 1000ITTSOR | 初期処理(開始表示・初期化・日付/時刻取得・OPEN・ヘッダー) | | 2000MAINSOR | 主処理(明細行編集→WRITE) | | 2100READSOR | R01読込・EOF判定 | | 3000HEADER | ページヘッダー出力(改ページ+頁番号) | | 4000STPSOR | 終了処理(CLOSE・終了表示・終了メッセージ) | | 9000ERRSOR | エラー処理(STOP literal 予約語カバー。通常フローでは呼ばれない) | ### 処理フロー ``` 1. 0000MAJCOLSOR(メインコントロール) 1-1. PERFORM 1000ITTSOR(初期処理) 1-2. PERFORM 2000MAINSOR UNTIL WRK-R01EOF-Y(読込→印刷ループ) 1-3. PERFORM 4000STPSOR(終了処理) 1-4. GOBACK 2. 1000ITTSOR(初期処理) 2-1. DISPLAY 'JIN04PRT START' UPON CONSOLE 2-2. M00MHOPAR 初期化 → M00MSGCOD=001 → CALL SUB02MSG(開始) 2-3. INITIALIZE WRKARA / CUNARA 2-4. ACCEPT WRK-DATE FROM DATE(システム日付) 2-5. STRING で WRK-DISP-DATE(YYYY/MM/DD)編集 2-6. ACCEPT WRK-TIME FROM TIME(システム時刻) 2-7. STRING で WRK-DISP-TIME(HH:MM:SS)編集 2-8. CALL SUB01DAT(運用日付) 2-9. OPEN INPUT (INNFIL) OUTPUT (W01OUTFIL) 2-10. PERFORM 3000HEADER(ヘッダー出力) 2-11. PERFORM 2100READSOR(初回読込) 3. 2000MAINSOR(主処理) 3-1. INITIALIZE W01OUTREC 3-2. STRING R01EMP-ID/…/…/… INTO W01OUTREC 3-3. WRITE W01OUTREC AFTER ADVANCING 1 LINE AT END-OF-PAGE → PERFORM 3000HEADER 3-4. ADD 1 TO CUN-W01OUT / CUN-R01INN 3-5. PERFORM 2100READSOR(次読込) 4. 2100READSOR(読込) READ R01INNFIL AT END → WRK-R01EOF='1' NOT AT END → CONTINUE 5. 3000HEADER(ページヘッダー) 5-1. ADD 1 TO WRK-PAGE-NO 5-2. MOVE SPACES → WRITE 改ページ(AFTER ADVANCING PAGE) 5-3. タイトル行 STRING → WRITE AFTER ADVANCING 1 LINE 5-4. 日付・時刻・ページ行 STRING → WRITE AFTER ADVANCING 2 LINES 6. 4000STPSOR(終了処理) 6-1. DISPLAY 'JIN04PRT END' UPON CONSOLE 6-2. DISPLAY TOTAL RECORDS(件数)WITH NO ADVANCING 6-3. CLOSE R01INNFIL 6-4. CLOSE W01OUTFIL WITH LOCK 6-5. CALL SUB02MSG(終了 002) 6-6. CALL SUB03END(正常終了) 7. 9000ERRSOR(エラー処理) DISPLAY 'ABEND' → STOP 'JIN04PRT ABNORMAL END' ``` ### I-O-CONTROL / 印刷制御 ``` ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT R01INNFIL ASSIGN TO EXTERNAL JIN04R01. SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN04W01. FD W01OUTFIL LINAGE IS 66 LINES FOOTING AT 60 TOP 2 BOTTOM 4. ``` > LINAGE 句でページ制御(66行・本文60行・論理頁上下餘白)。WRITE AFTER ADVANCING PAGE で改ページ、AT END-OF-PAGE でヘッダー再出力。 ### カバレッジ対象キーワード | 予約語/記号 | 区分 | 使用箇所 | |:-----------|:----:|:---------| | ACCEPT FROM DATE | 予約語 | 1000ITTSOR: ACCEPT WRK-DATE FROM DATE | | ACCEPT FROM TIME | 予約語 | 1000ITTSOR: ACCEPT WRK-TIME FROM TIME | | LINAGE(PAGE) | 予約語 | FD W01OUTFIL LINAGE IS 66 LINES | | AT END-OF-PAGE | 予約語 | 2000MAINSOR: WRITE AT END-OF-PAGE | | STRING ... ON OVERFLOW | 予約語 | 各種STRINGで ON OVERFLOW 使用 | | DISPLAY UPON / WITH NO ADVANCING | 予約語 | 1000/4000: UPON CONSOLE、4000: WITH NO ADVANCING | | CLOSE WITH LOCK | 予約語 | 4000STPSOR: CLOSE W01OUTFIL WITH LOCK | | STOP literal | 予約語 | 9000ERRSOR: STOP '…ABNORMAL END' | --- ## 出力レコード定義 ### 出力ファイル1(W01/JIN-LEDGER)— JIN04RPT-REC 132B | No | 項目名 | 設定元 | PIC | 備考 | |----|--------|--------|:---:|------| | 1 | W01RPT-EMP-ID | R01EMP-ID | X(8) | 社員ID | | 2 | W01RPT-KANA-SEI | R01KANA-SEI | X(20) | 半角カナ姓 | | 3 | W01RPT-KANA-MEI | R01KANA-MEI | X(20) | 半角カナ名 | | 4 | W01RPT-KANJI-NAME | R01KANJI-NAME | X(40) | 漢字氏名 | | 5 | W01RPT-DEPT-CD | SPACES(未設定) | X(4) | 部門コード(STRING対象外) | | 6 | W01RPT-ENTRY-DATE | SPACES(未設定) | X(8) | 入社日(STRING対象外) | | 7 | FILLER | SPACES | X(32) | | > レコード長 132B(実規格)。設計書他行の記載値 133B は誤記 → 132B に統一。 ### COPY 参照書式の確認 - R01: JIN01REC(200B)を REPLACING (A)→R01 で定義 - W01: JIN04RPT-REC(132B)を REPLACING (A)→W01 で定義