diff --git a/bin/KIN08DBU.exe b/bin/KIN08DBU.exe index 4ad1779..72014aa 100644 Binary files a/bin/KIN08DBU.exe and b/bin/KIN08DBU.exe differ diff --git a/bin/KIN09CSV.exe b/bin/KIN09CSV.exe index 36e92b4..0749ba5 100644 Binary files a/bin/KIN09CSV.exe and b/bin/KIN09CSV.exe differ diff --git a/src/KIN09CSV.cbl b/src/KIN09CSV.cbl index fe296a6..3eafeb1 100644 --- a/src/KIN09CSV.cbl +++ b/src/KIN09CSV.cbl @@ -1,4 +1,4 @@ - IDENTIFICATION DIVISION. + IDENTIFICATION DIVISION. PROGRAM-ID. KIN09CSV. ***************************************************************** * システム名 : 勤怠休暇管理システム * @@ -25,7 +25,7 @@ * INPUT-OUTPUT SECTION. FILE-CONTROL. - SELECT CSVOUTFIL ASSIGN TO KIN09W01. + SELECT CSVOUTFIL ASSIGN TO "KIN09W01". * DATA DIVISION. FILE SECTION. @@ -182,11 +182,11 @@ MOVE 'COMPILED' TO M00UMKDATS22-02. PERFORM 4000MSGOUTSOR. * - *** PARM解析(ACCEPT FROM COMMAND-LINE) - PERFORM 1100PARMSOR. - * *** ワークエリア初期化 - INITIALIZE WRKARA. + INITIALIZE WRKARA. + * + *** PARM解析(ACCEPT FROM COMMAND-LINE) + PERFORM 1100PARMSOR. * *** DB接続 EXEC SQL @@ -389,33 +389,31 @@ WS-EDIT-SICK DELIMITED BY SIZE ',' DELIMITED BY SIZE WS-EDIT-ABSENT DELIMITED BY SIZE - INTO WS-CSV-LINE - WITH POINTER WS-PTR - END-STRING. - * - *** 100行ごとにヘッダー再出力 - ADD 1 TO WS-LINE-COUNT. - IF WS-LINE-COUNT > 100 - WRITE CSVOUTREC FROM WS-CSV-LINE - AFTER ADVANCING 2 LINES - MOVE '社員番号,日付,出勤時刻' - TO WS-CSV-LINE(1:28) - MOVE ',退勤時刻,休暇種別,年休時間' - TO WS-CSV-LINE(29:28) - MOVE ',事假時間,因公特批假時間' - TO WS-CSV-LINE(57:24) - MOVE ',病欠時間,未申請欠勤時間' - TO WS-CSV-LINE(81:24) - WRITE CSVOUTREC FROM WS-CSV-LINE - AFTER ADVANCING 1 LINE - ADD 1 TO CUN-W01OUT - MOVE ZERO TO WS-LINE-COUNT - END-IF. + INTO WS-CSV-LINE + WITH POINTER WS-PTR + END-STRING. * *** データ行出力 - WRITE CSVOUTREC FROM WS-CSV-LINE - AFTER ADVANCING 1 LINE. - ADD 1 TO CUN-W01OUT. + WRITE CSVOUTREC FROM WS-CSV-LINE + AFTER ADVANCING 1 LINE. + ADD 1 TO CUN-W01OUT. + * + *** 100行ごとにヘッダー再出力 + ADD 1 TO WS-LINE-COUNT. + IF WS-LINE-COUNT > 100 + MOVE '社員番号,日付,出勤時刻' + TO WS-CSV-LINE(1:28) + MOVE ',退勤時刻,休暇種別,年休時間' + TO WS-CSV-LINE(29:28) + MOVE ',事假時間,因公特批假時間' + TO WS-CSV-LINE(57:24) + MOVE ',病欠時間,未申請欠勤時間' + TO WS-CSV-LINE(81:24) + WRITE CSVOUTREC FROM WS-CSV-LINE + AFTER ADVANCING 2 LINES + ADD 1 TO CUN-W01OUT + MOVE ZERO TO WS-LINE-COUNT + END-IF. * *** 次FETCH EXEC SQL diff --git a/使用資源一覧/KIN08DBU_使用資源一覧.md b/使用資源一覧/KIN08DBU_使用資源一覧.md index fb5c244..6f3c8bc 100644 --- a/使用資源一覧/KIN08DBU_使用資源一覧.md +++ b/使用資源一覧/KIN08DBU_使用資源一覧.md @@ -2,22 +2,23 @@ ## プログラム概要 - **プログラムID**: KIN08DBU -- **プログラム名**: 月次集計更新処理 -- **処理概要**: SYSIN制御カード(T/P/M)で処理対象を指定し、DAILY_RECORDSテーブルをDELETE/INSERT(日別→月次集計)し、MONTHLY_ABSENCEテーブルにUPSERT。ABSENCE_SUMMARYファイル(80B)に出力する。 +- **プログラム名**: 勤怠DB更新処理 +- **処理概要**: SYSIN制御カード(T/P/M)で処理対象を指定し、DAILY_RECORD(200B)を読込み、DAILY_RECORDSテーブルにINSERT。社員別月次集計後MONTHLY_ABSENCEにUPSERT。集計結果をABSENCE_SUMMARYファイル(80B)に出力。 ## 使用ファイル | DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | 定義参照先 | |------|---------------|------|-------------|-----------|--------|-----------| -| KIN08R01 | SYSIN | 順編成 | F (固定長) | 80B | - | JCL DD定義 | -| KIN08W01 | ABSENCE-SUMMARY | 順編成 | F (固定長) | 80B | KIN08REC | COPY句定義書.md | +| KIN08R01 | DAILY-RECORD(日別勤怠) | 順編成 | F (固定長) | 200B | KIN07REC | COPY句定義書.md | +| KIN08S01 | SYSIN(制御カード) | 順編成 | F (固定長) | 80B | - | JCL DD定義 | +| KIN08W01 | ABSENCE-SUMMARY(月次集計) | 順編成 | F (固定長) | 80B | KIN08REC | COPY句定義書.md | ## 使用COPY句 | COPY句 | 用途 | 使用箇所 | |--------|------|---------| -| KIN07REC | DAILY-RECORD(INSERT用ホスト変数参照) | FILE SECTION(SQL宿主) | -| KIN08REC | W01出力レコード定義(ABSENCE-SUMMARY-REC) | FILE SECTION | +| KIN07REC | DAILY-RECORD(R01入力レコード定義) | FILE SECTION(FD R01INNFIL) | +| KIN08REC | ABSENCE-SUMMARY(W01出力レコード定義) | FILE SECTION(FD W01OUTFIL) | | ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | | ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | @@ -26,35 +27,35 @@ | サブPGM | 役割 | CALL箇所 | |---------|------|---------| | SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | -| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB03END | ABEND処理 | 1000ITTSOR(パラメータ不足時)/ 9100DBERRSOR / 9999ABDSOR | ## 使用DB2テーブル | テーブル名 | 操作種別 | 使用箇所 | SQL種別 | |-----------|---------|---------|--------| -| DAILY_RECORDS | DELETE/INSERT | 1000PROCSOR | DELETE / INSERT | -| MONTHLY_ABSENCE | SELECT/INSERT/UPDATE | 2000MAJSOR | SELECT COUNT / INSERT / UPDATE | +| DAILY_RECORDS | INSERT | 2000MAJSOR | INSERT | +| MONTHLY_ABSENCE | DELETE/SELECT/INSERT/UPDATE | 3000STPSOR | DELETE(RESETモード)/ SELECT COUNT / INSERT / UPDATE | ## 処理フロー -1. 初期処理(開始メッセージ→OPEN SYSIN→SYSIN読込ループ) -2. SYSINカード解析: GO TO DEPENDING ON でT/P/M分岐 +1. 初期処理(1000ITTSOR): 開始メッセージ→OPEN SYSIN→SYSIN読込ループ +2. SYSINカード解析(1199-SYSIN-LOOP): GO TO DEPENDING ON でT/P/M分岐 - Tカード(1110-TARGETSOR): UNSTRINGで対象社員一覧を内部表に格納 - - Pカード(1120-PERIODSOR): 年月範囲を設定 - - Mカード(1130-MODESOR): RESET(DELETE)/ UPDATEモード切替 -3. 主処理(2000MAJSOR): DAILY_RECORDSのSELECT→INSERT→集計テーブルに累積 -4. 月次UPDATE処理(3000UPDSOR): MONTHLY_ABSENCEにSELECT COUNT/INSERT/UPDATE -5. 終了処理(4000MSGOUTSOR): 件数出力→CLOSE→終了メッセージ + - Pカード(1120-PERIODSOR): 処理対象年月を設定 + - Mカード(1130-MODESOR): MODE(RESET/NORMAL)を設定 +3. 主処理(2000MAJSOR): DAILY-RECORD読込→DAILY_RECORDS INSERT→集計テーブルに累積 +4. 終了処理(3000STPSOR): RESET時DELETE→MONTHLY_ABSENCE UPSERT→ABSENCE_SUMMARY出力→COMMIT→CLOSE ## 使用構文(特記事項) | 構文 | 使用箇所 | 備考 | |------|---------|------| -| GO TO DEPENDING ON | 1100PARMSOR/1199-SYSIN-LOOP | T/P/Mカードパラグラフ分岐 | -| UNSTRING | 1110-TARGETSOR/1120-PERIODSOR/1130-MODESOR | カンマ/区切り/代入符でカード分割 | -| INSPECT TALLYING | 1110-TARGETSOR | UNSTRING後のtarget句末尾ゼロ数 | +| GO TO DEPENDING ON | 1199-SYSIN-LOOP | T/P/Mカードパラグラフ分岐 | +| UNSTRING | 1110-TARGETSOR / 1120-PERIODSOR | カンマ区切り/代入符で文字列分割 | +| INSPECT TALLYING | 2000MAJSOR | 社員番号先頭ゼロ数チェック | | COMPUTE ROUNDED ON SIZE ERROR | 2000MAJSOR | 丸め+サイズエラー検出 | -| DELETE | 2100-DELETE-SQL | SQL: DAILY_RECORDS DELETE | -| UPSERT(SELECT COUNT→INSERT/UPDATE) | 3000UPDSOR | 月次集計行の存在確認後分岐 | -| OCCURS | WORKING-STORAGE | TARGET-EMP(100), 内部集計表(9999) | -| INITIALIZE REPLACING | 1110-TARGETSOR | TARGET-TABLEの初期化 | -| EXEC SQL INCLUDE | WORKING-STORAGE | SQLCA | +| UPSERT(SELECT COUNT→INSERT/UPDATE) | 3000STPSOR | 月次集計行の存在確認後分岐 | +| OCCURS | WORKING-STORAGE | AGG-ENTRIES(100), TARGET-EMP(100) | +| INITIALIZE | 1000ITTSOR | WRKARA + AGGREGATION-TABLE初期化 | +| EXEC SQL INCLUDE | WORKING-STORAGE | SQLCA(ブリッジ変数) | +| FUNCTION WHEN-COMPILED | 1000ITTSOR | コンパイル日時表示 | +| INSPECT REPLACING | 1130-MODESOR | 'MODE='除去 | diff --git a/使用資源一覧/KIN09CSV_使用資源一覧.md b/使用資源一覧/KIN09CSV_使用資源一覧.md index ecde24a..477d1d1 100644 --- a/使用資源一覧/KIN09CSV_使用資源一覧.md +++ b/使用資源一覧/KIN09CSV_使用資源一覧.md @@ -3,7 +3,7 @@ ## プログラム概要 - **プログラムID**: KIN09CSV - **プログラム名**: CSV出力処理 -- **処理概要**: DAILY_RECORDSテーブルをCURSORで読込み、CSV形式に編集して出力。MODE=FULLで日別明細+月次サマリ、MODE=SHORTで月次サマリのみ。100行ごとにヘッダー再出力。 +- **処理概要**: DAILY_RECORDSテーブルをCURSORで読込み、CSV形式に編集(STRING WITH POINTER)して出力。MODE=FULLで日別明細+月次サマリ、MODE=SHORTで月次サマリのみ。100行ごとにヘッダー再出力。 ## 使用ファイル @@ -24,7 +24,7 @@ | サブPGM | 役割 | CALL箇所 | |---------|------|---------| | SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | -| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB03END | ABEND処理 | 1100PARMSOR(YEARMONTH未設定時)/ 9999ABDSOR | ## 使用DB2テーブル @@ -34,24 +34,25 @@ | MONTHLY_ABSENCE | SELECT | 2500-SHORT-MODE | DECLARE CURSOR / OPEN / FETCH / CLOSE | ## 処理フロー -1. 初期処理(開始メッセージ→COMMAND-LINE解析→OPEN出力) -2. ヘッダー出力(SHIFT JIS CSVヘッダー行) -3. 日別明細ループ:DAILY_RECORDS CURSOR OPEN→FETCH→CSV編集(STRING WITH POINTER)→WRITE AFTER ADVANCING 1 LINE -4. 100行ごとにヘッダー再出力(WRITE AFTER ADVANCING PAGE) -5. MODE=SHORT: MONTHLY_ABSENCE CURSOR OPEN→FETCH→月次サマリCSV出力 -6. 終了処理(CLOSE→件数出力→終了メッセージ) +1. 初期処理(1000ITTSOR): 開始メッセージ→ワーク初期化→COMMAND-LINE解析→OPEN出力 +2. ヘッダー出力: WRITE AFTER ADVANCING PAGE(改ページ+CSVヘッダー) +3. CURSOR OPEN(1200-DAILY-OPEN): DAILY_RECORDS CURSOR OPEN + 初回FETCH +4. 日別明細ループ(2000MAJSOR): CSV編集(STRING WITH POINTER)→WRITE AFTER ADVANCING 1 LINE + - 100行ごとにヘッダー再出力: WRITE AFTER ADVANCING 2 LINES + - CSV危険文字サニタイズ: INSPECT REPLACING +5. MODE=SHORT(2500-SHORT-MODE): MONTHLY_ABSENCE CURSOR→月次サマリCSV出力 +6. 終了処理(3000STPSOR): CLOSE→件数出力→終了メッセージ ## 使用構文(特記事項) | 構文 | 使用箇所 | 備考 | |------|---------|------| -| ACCEPT FROM COMMAND-LINE | 1100PARMSOR | "YEARMONTH=202605 MODE=FULL"解析 | +| ACCEPT FROM COMMAND-LINE | 1100PARMSOR | "YEARMONTH=202605,MODE=FULL"解析 | | STRING DELIMITED BY | 2000MAJSOR/2500-SHORT-MODE | CSV行編集(WITH POINTER) | -| WRITE AFTER ADVANCING PAGE | 2000MAJSOR | 改ページ+ヘッダー再出力 | -| WRITE AFTER ADVANCING 2 LINES | 2500-SHORT-MODE | ヘッダー後改行 | -| WRITE AFTER ADVANCING 1 LINE | 2000MAJSOR/2500-SHORT-MODE | データ行改行 | +| WRITE AFTER ADVANCING PAGE | 1000ITTSOR | 改ページ+CSVヘッダー初回出力 | +| WRITE AFTER ADVANCING 2 LINES | 2000MAJSOR | 100行ごとのヘッダー再出力時 | +| WRITE AFTER ADVANCING 1 LINE | 2000MAJSOR/2500-SHORT-MODE | データ行・ヘッダー行改行 | | INSPECT REPLACING | 2000MAJSOR | CSVカンマ・改行サニタイズ | | DECLARE CURSOR / OPEN / FETCH / CLOSE | 1200-DAILY-OPEN/2500-SHORT-MODE | 2重CURSOR(DAILY→MONTHLY) | -| OCCURS | WORKING-STORAGE | TARGET-EMP(100) | -| INITIALIZE | 1100PARMSOR/1200-DAILY-OPEN | 変数初期化 | -| MOVE CORRESPONDING | 2000MAJSOR | HV → CSV行項目編集 | +| INITIALIZE | 1000ITTSOR | WRKARA初期化 | +| FUNCTION WHEN-COMPILED | 1000ITTSOR | コンパイル日時表示 | diff --git a/品質管理/カバレッジ統計.md b/品質管理/カバレッジ統計.md index 72e0b62..8b8eb4f 100644 --- a/品質管理/カバレッジ統計.md +++ b/品質管理/カバレッジ統計.md @@ -53,12 +53,12 @@ | 指標 | 値 | |------|:----:| | 全タイプ数 | 35 | -| ◎(使用済) | 15 | +| ◎(使用済) | 16 | | ○(一部使用) | 1 | | △(調査中) | 0 | -| ×(未使用) | 19 | -| カバレッジ率(◎/35) | 42.9% | -| カバレッジ率(◎+○/35) | 45.7% | +| ×(未使用) | 18 | +| カバレッジ率(◎/35) | 45.7% | +| カバレッジ率(◎+○/35) | 48.6% | --- @@ -253,13 +253,13 @@ | 指標 | 値 | |------|:----:| | **プログラムタイプカバレッジ(35タイプ)** | | -| ◎(使用済) | 14 / 35 | +| ◎(使用済) | 16 / 35 | | ○(一部使用) | 1 / 35 | -| ×(未使用) | 20 / 35 | +| ×(未使用) | 18 / 35 | | △(調査中) | 0 / 35 | -| カバレッジ率(◎/35) | 40.0% | -| カバレッジ率(◎+○/35) | 42.9% | -| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 16件 = 80.0% | +| カバレッジ率(◎/35) | 45.7% | +| カバレッジ率(◎+○/35) | 48.6% | +| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 17件 = 85.0% | | **カテゴリカバレッジ(9カテゴリ)** | | | 全カテゴリ数 | 9 | | カバー済カテゴリ(使用文あり) | 8 / 9 |