From cea0a60a07b8ac5f3c2fad49fd611994ac6b1130 Mon Sep 17 00:00:00 2001 From: qiuqiuqiu Date: Sun, 28 Jun 2026 21:35:28 +0800 Subject: [PATCH] KIN08DBU/KIN09CSV: fix comment col, quoted ASSIGN, INITIALIZE order, WRITE logic; fix resource docs & coverage stats --- bin/KIN08DBU.exe | Bin 177039 -> 177039 bytes bin/KIN09CSV.exe | Bin 177176 -> 176646 bytes src/KIN09CSV.cbl | 60 +++++++++++++------------- 使用資源一覧/KIN08DBU_使用資源一覧.md | 49 ++++++++++----------- 使用資源一覧/KIN09CSV_使用資源一覧.md | 31 ++++++------- 品質管理/カバレッジ統計.md | 18 ++++---- 6 files changed, 79 insertions(+), 79 deletions(-) diff --git a/bin/KIN08DBU.exe b/bin/KIN08DBU.exe index 4ad177951f58acb2d4cf4bebeef0abbf83fcdde2..72014aabec633998e2b677fe3c95a029e813b087 100644 GIT binary patch delta 73 zcmV-P0Ji^+=L(PK3Xq5bVj_`>P68QzvDyw=0^&fU>RK-YGcqxg?TNYtGcr0cIFTU~ fv%rc(6#`-+g9f0t2A~1mTLdvUGB~&A`vIu89vvKL delta 73 zcmV-P0Ji^+=L(PK3Xq5bL>-ZeP69t{vDyw=0#rDo>RK-YF)%Wd?TNYtF)%tZIFTU~ fv%rc(6#_&Zg9f0t2A~1mTLd;TGBCI2`vIu8_vssv diff --git a/bin/KIN09CSV.exe b/bin/KIN09CSV.exe index 36e92b4ff32476ead893c3bd8cdf2e1dd0e2b087..0749ba513cb48e58408c99d98c242f636f50e5b9 100644 GIT binary patch delta 29605 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

;eW(SFF)@Jr_(B_JW48#m$Slg-s6JXBq)A4 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 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 |