レビュー指摘 #11936 » KS60151P_KS60152P_差異分析.md
KS60151P/KS60152P 差異分析報告書
| 項目 | 内容 |
|---|---|
| 対象 | KS60151P(新請求書電子帳票出力:通常分)と KS60152P(新請求書電子帳票出力:エコデリバー分) |
| 資料 |
KS60151P.txt(2,104行)、KS60152P.pl1(2,274行)、DAISEQ4J.jcl、上流確認用の KS60135P.pl1
|
| 体制 | 監督者が全体を統括し、作業者Aがソースから出力結果の差異を、作業者BがJCLから位置づけ・実行環境の差異を分析 |
| 作成日 | 2026-10-15 |
表記
- 行番号は各ファイルの物理行です。「151 L○○」「152 L○○」はソース、「JCL L○○」は JCL の行です。
- 推測を含む記述には「(推測)」と付けています。
- KS60151P.txt は Shift-JIS で保存されているため、日本語コメントが文字化けしています。根拠にはコード部分だけを使いました。
1. 結論(要旨)
-
帳票を組み立てるロジックは実質的に同じです。 見出し、明細、計、改ページ、住所の分割などは、行単位で比較しても差がありません。違いは次の3点に集中しています。
- どの顧客を、どのファイルに出すか
- 1行目の店所コード(A-SPOOL の振分けキー)
- 2行目の内容
-
出力の構成が違います。
- 151 は2本です。全顧客を「控え」(KS601511)に出し、明細不要以外の顧客は「送付用」(KS601512)にも重ねて出します。
- 152 は3本です。優先印刷マスター(VKSYUPR)に顧客があるかどうかで、出力先をどちらか一方に決めます。
- マスターに無い顧客:インフォコム(KS601521)とインフォコム送付用(KS601523)
- マスターに有る顧客:事業所送付用(KS601522)
- 明細不要の顧客:どこにも出さない
- 152 だけが顧客法人管理マスター(VKCORPO)を読みます。 読んだ値で、2行目に集約代表コードを印字し、KS601521 の1行目の店所を代表扱い店に置き換えます。JCL の DD が増えているのは、VKCORPO と OUTFIL3 の2つだけです。
- 入力データの範囲が違います。 151 は全配信店分のデータを、訂正分も含めて読みます。152 は KS60135P が郵送対象店所(SEQTRYTN)に絞り、訂正(データID 31〜33)を除いたデータを読みます。そのため、郵送対象店所の請求先は、151 と 152 の両方の帳票に出ます。
-
要確認事項があります。
- 152 には不具合の可能性が1件あります(§4 の D-11)。
- 明細不要の顧客が帳票に一切出ない点は、仕様どおりか確認が必要です。
- 再実行すると帳票が二重に配信されるリスクがあります。
2. JCL 上の位置づけ(作業者B)
2.1 データフロー
TEMP.DAISEQ4J.WORK0620(全件・訂正を含む)
┌──────────────┴───────────────────────┐
【通常分(特積)】 【郵送/エコデリバー】
KS60144P 1回目 (L460) KS60135P (L528)
│ ・SEQTRYTN の店所の荷主だけ抽出
│ ・データID 31〜33(訂正)を除外
│ ▼ WORK062S ──▶ KS60630P (CSV)
│ KS60144P 2回目 (L545)
▼ WORK0635 ▼ WORK0700
KS60151P (L494) KS60152P (L579)
OUTFILE → KS601511 控え OUTFILE → KS601521 インフォコム
OUTFIL2 → KS601512 送付用 OUTFIL2 → KS601522 事業所送付用
OUTFIL3 → KS601523 インフォコム送付用
151 と 152 の間でデータの受け渡しはありません。共通の上流は WORK0620 だけです。
2.2 DD の比較
| DD名 | DSN/SYSOUT | 151 | 152 | 備考 |
|---|---|---|---|---|
| ALTFILE | ADG.ALTLIB(SEQPRTNC) | ○ L497 | ○ L582 | 同じメンバー |
| SQHAIDA | 151=WORK0635、152=WORK0700 | ○ L498 | ○ L583 | DD名は同じで、DSN だけ異なる |
| VKTENMS/VKBANKM/VKSYUPR | 店所マスター、銀行マスター、優先印刷マスター | ○ | ○ | 同じ |
| VKCORPO | VKAD.CORPOMAN.DTMASTER | × | ○ L590 | 152 だけ(152 L25 の宣言と一致) |
| MDMIKAN | VKAD.MISYUKAN.DTMASTER | ○ L505 | ○ L591 | どちらのソースにも宣言がない。外部手続き LKN0010 が使っていると推測 |
| VKCHINM | 地名マスター | コメント化 | コメント化 | ソース側の READ もコメントアウトされている(151 L1725/152 L1888) |
| OUTFILE | SYSOUT=(E,…,99) | KS601511 | KS601521 | |
| OUTFIL2 | 同上 | KS601512 | KS601522 | |
| OUTFIL3 | 同上 | × | KS601523 | 152 だけ(152 L28 の宣言と一致) |
整合性チェックの結果
- ソースで宣言しているのに JCL に DD が無いファイルは、2本ともありません。
- JCL にだけあってソースに宣言が無いのは MDMIKAN だけです。
2.3 実行・運用面の差異と注意点
-
COND:各ステップに COND は指定されておらず、効くのは JOB 文の
COND=(9,LT)だけです。そのため、151 が異常終了または RC≥10 になると、データ上は関係のない 152 も実行されません。 - RC:どちらのソースにも RC を設定する処理(PLIRETC)がありません。異常で止まるのは ABEND のときだけです。
- 再実行:どちらも SYSOUT に直接出力するため、再実行すると帳票が二重に配信されます。また KS60144P のステップ名が重複しているので(L460/L545)、RESTART でステップ名を指定すると、どちらの KS60144P から始まるかが一意に決まりません。
- KS60144P の副出力:WORK0642・0646・0701・0702 は、151 と 152 のどちらでも読まれていません。JCL 全体でも、作成と SCRATCH の行にしか出てきません。
- 後片付けの非対称:最終削除ステップ(L833〜838)は WORK0635 を消しますが、WORK0700 は消しません。
3. 出力結果の差異(作業者A)
3.1 顧客の状態と出力先
| 顧客の状態(優先印刷マスター VKSYUPR) | KS60151P | KS60152P |
|---|---|---|
| マスターに無い | 控え(KS601511)+送付用(KS601512) | KS601521+KS601523 |
| マスターに有る(UPRNASKB≠'6') | 控え+送付用 | KS601522 だけ |
| マスターに有る(UPRNASKB='6':明細不要) | 控えだけ(1行目57桁目に #) |
どこにも出さない |
根拠:151 L556〜569、L648〜661/152 L572〜585、L676〜700
- 151 の控え(OUTFILE)は、OUT_SW に関係なく全行を無条件に書き出します(151 L648〜649 ほか)。
- 152 には無条件に書き出す行が無く、すべての WRITE が OUT_SW で振り分けられます。そのため、152 には全顧客分がそろった帳票がありません。
3.2 差異一覧
| No | 分類 | KS60151P | KS60152P | 根拠 |
|---|---|---|---|---|
| D-1 | 出力本数 | 2本(KS601511/512) | 3本(KS601521/522/523) | 151 L23〜24、152 L26〜28 |
| D-2 | 振分け区分 OUT_SW | 2値('1'=控え+送付、'0'=控えのみ) | 3値('1'=OUTFILE+OUTFIL3、'2'=OUTFIL2、'0'=出力なし) | 151 L556〜569/152 L572〜585 |
| D-5 | 明細不要の顧客 | 控えに # を付けて出力する |
出力しない。# を設定する処理は残っているが、使われない死にコードになっている(152 L655〜657) |
|
| D-7 | 1行目の店所CD | 控え=発行店。送付用=条件を満たせば未収管理店(MISYU_TC) | KS601521=代表扱い店(CORPZDTN)。KS601523=発行店。KS601522=151 の送付用と同じ規則 | 151 L622、L655〜656/152 L680〜685、L692〜693 |
| D-8 | 2行目 | 西暦表示の案内文。最初のレコードの終了日が 190610 より後なら空白になるため、今のデータでは空白行 | 集約代表コード(7桁、ASA を除いた印字位置で126〜132桁)を3本すべてに出す | 151 L122〜127、L531〜534/152 L131〜134、L601 |
| D-9 | 参照マスター | VKTENMS、VKBANKM、VKSYUPR | 左記に加えて VKCORPO | 152 L587〜597 |
| D-10 | CORPOMAN に該当が無いとき | - | 集約代表コード=自分の荷主CD、代表扱い店=発行店。このとき KS601521 と KS601523 は完全に同じ内容になる | 152 L588、L591〜597 |
| D-11 | 2ページ目以降の2行目 | - | 不具合の可能性あり(§4 参照) | 152 L566〜601 |
| D-12 | OUTFIL3 の OPEN/CLOSE | - | OPEN 文と CLOSE 文に OUTFIL3 が無い。最初の WRITE で暗黙に開かれる | 152 L514〜521、L2153〜2160 |
| D-14 | ALTFILE(SEQPRTNC) | 送付用の1行目の店所置換にだけ効く | 事業所送付用(KS601522)にだけ効く。インフォコム系の2本には効かない | 151 L602〜618/152 L630〜646 |
| D-15 | 0件のとき | 入力が0件なら2本とも0行 | 入力が0件なら3本とも0行。顧客の構成によっては、一部の帳票だけ0行になりやすい |
3.3 違いが無い部分
次の部分は、行単位で比較して差がないことを確認しています。
- 出力行のレイアウト(OUT_2 を除く)
- 1行目の編集(店所CD と
#を除く) - 見出し2(1ページ目と2ページ目以降)
- 検品料・サーチャージの処理
- 小計・合計
- 明細行
- 改ページと行数の制御
- 住所・荷主名の分割サブルーチン
- マスターの読み方
- エラー処理(ON ERROR が無いこと、PLIRETC が無いことを含む)
4. 監督者による検証結果
作業者の報告のうち、影響の大きいものについて、監督者がソースを直接確認しました。
| 対象 | 確認内容 | 結果 |
|---|---|---|
| 振分けロジック | 151 L548〜662、152 L555〜700 を読み合わせた | ✅ 作業者A・Bの報告どおり |
| VKCORPO と OUTFIL3 の宣言 | 152 L25、L28 | ✅ 確認した |
| MDMIKAN | 両ソースを Grep した | ✅ どちらのソースにも宣言が無い |
| D-11 | 152 L566〜601 を確認した | ✅ 作業者Aの指摘は正しい |
D-11 の詳細(KS60152P の不具合の可能性)
- 152 では、見出し1のたびに
DISKEY = SQNO_1_7(自分の荷主CD)に戻しています(L567)。 - 一方、VKCORPO を読んで DISKEY に集約代表コードを入れる処理(L587〜597)は、
IF UPRNNICD = SYUKEY THEN ; ELSE DO …の ELSE 側の中(L568〜598)にあります。つまり、優先印刷マスターのキーが前回と変わったときにしか実行されません。 - 優先印刷マスターに有る顧客(KS601522 に出る顧客)の場合、マスターの読み込みに成功するので UPRNNICD がこの顧客の荷主CDになります。そのため、同じ荷主の2回目以降の見出し1(2ページ目以降や枝番違い)では ELSE 側に入らず、2行目が集約代表コードではなく自分の荷主CDになります。
- マスターに無い顧客(KS601521/523 に出る顧客)の場合、読み込みに失敗して UPRNNICD が更新されないため、見出し1のたびに読み直します。そのため、正しい値が出ます。
- 既存の
KS60152_詳細設計書.md6.5 は、この現象がインフォコム側で起きると書いていますが、ソースとは逆です。設計書の修正が必要です。
5. 要確認事項(業務・運用担当への確認依頼)
| No | 内容 | 出典 |
|---|---|---|
| 1 | D-11:152 の事業所送付用(KS601522)で、2ページ目以降の2行目が自分の荷主CDになる。不具合として扱うか、現行仕様として Java 移行でも同じ動きにするか | A・監督者 |
| 2 | 152 では明細不要の顧客が帳票に一切出ない(151 では控えに # 付きで残る)。意図どおりか |
A |
| 3 | 郵送対象店所の請求先は、151(特積)と 152(郵送)の両方に出る。しかも訂正を含むかどうかで、金額が違う帳票が2種類出る可能性がある。業務上の想定どおりか | B |
| 4 | MDMIKAN が LKN0010 の内部で使われているか、LKN0010 のソースで確認する | A・B |
| 5 | OUTFIL3 が OPEN 文から漏れている。対象が0件のとき、KS601523 が空の帳票として出るのかどうか、実機で確認する | A・B |
| 6 | SYSOUT のライター名(KS601511〜523)が、A-SPOOL でどこへ振り分けられるか。インフォコム、NEOSS、事業所の対応を運用定義で確認する(本書の用途名は推測を含む) | B |
| 7 | KS60144P の副出力(WORK0642/0646/0701/0702)がジョブの外で使われているか。WORK0700 などを最終削除しないのは意図的か | B |
| 8 | ALTFILE が101件以上のとき、範囲外の TAB_PRTN(101) を参照する(151・152 共通)。KS60135P の SEQTRYTN テーブルには件数の上限チェックが無い | A・B |
6. 付録:作業の経過
| 担当 | 作業内容 | 所要時間 |
|---|---|---|
| 作業者B | JCL・DD・データフローの分析。KS60135P も確認 | 約3分半(ツール操作23回) |
| 作業者A | 両ソースを全行読み、行単位の差分を取って確認 | 約5分(ツール操作30回) |
| 監督者 | 主要な指摘をソースで裏付け、報告を統合 | - |
作業者ごとの詳細レポート(全差異 D-1〜D-15、要確認 Q-1〜Q-9、DD 整合性の全表)は、セッションの一時フォルダにあります。必要であれば作業フォルダにコピーします。