# プログラム仕様書　BV13600P（他社直卸分発送伝票送付書（傭車便）　入力・登録）

| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV13600P.pl1<br/>・画面イメージ MPBV350.jpg（他社直卸分発送伝票送付書（傭車便））<br/>・現行の解析資料 BV0180_他社直卸出発入力（傭車.xlsx（シート「資産一覧」「MPBV350」「レコードフォーマット」「SRC_BV13600P」） |
| 項目名の出典 | 画面項目は解析資料のシート「MPBV350」の日本語名、送受信データ・マスター・集信ログの項目はシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV13600P（手続き名：BV13600） |
| プログラム名称 | 他社直卸分発送伝票送付書（傭車便）入力・登録（ソースの冒頭コメントは「他社直卸発送入力（傭社）［検証］　２０００年対応」） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BV36 |
| パターンID | PPOD152P（1987/05/01）、業務 BXHEAD30 |
| 使用画面（マップ） | MPBV350（他社直卸分発送伝票送付書（傭車便））、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 前の処理 | BV35（BV13500P）。照会OK で項目の入力可・不可を決め、BV36 で待機している |
| 次の処理 | 登録OK → BV37（BV13700P：次画面の振り分け） |
| センター登録 | SYSID 'CIC1'、プロセス 'B36V'（BV23600P）と APPC 会話。新規の送付書（区分 '2'・'5'）のときだけ |
| 参照・更新ファイル | VPSOHFU（ＤＤＰ 送付書マスター）参照・更新・追加、VPTENMS（ＤＤＰ 店所マスター）・VPCHINM（ＤＤＰ 地名マスター）・VPHCBKM（発着地粁程マスター）・VPKONAM（直卸他社の名称マスター）参照 |
| 出力 | TD キュー 'SYUS'（集信Ｒ２ 発送鑑データ：SSS21） |
| 呼出しモジュール | LSO0130（日間通算日数の計算。２０００年対応） |
| 一時記憶 | TSキュー（BV13500P と同じ「端末ID＋'BV35'」、長さ 300。通信領域の TSQ_ID・TSQ_LENGTH を使う） |

### 1.1 機能概要

照会した送付書に、発送日時・着店・着地・直集軒数・直卸他社コードなどを入力して登録する。

1. 入力された項目をチェックし（項目チェック・関連チェック）、エラーなら表示して再入力を待つ。
2. 新規の送付書（区分 '2'・'5'）の場合は、センターの運行指令マスターに送付書を登録する（BV23600P）。
3. DDP の送付書マスターを登録（追加または更新）し、項目を入力した場合は集信ログを書く。
4. 「送付書登録ＯＫ　ＮＯ群または直集受付は実行キー」を表示して BV37 で待機する。

```mermaid
flowchart LR
    BV35[BV35<br/>BV13500P 照会] -- 照会OK --> BV36[BV36<br/>本プログラム<br/>MPBV350]
    BV36 -- エラー --> BV36
    BV36 <-- APPC B36V（新規のみ） --> CIC1[(センター CIC1<br/>BV23600P)]
    BV36 --> SOHFU[(VPSOHFU<br/>送付書マスター)]
    BV36 --> SYUS[[TD SYUS<br/>集信ログ]]
    BV36 -- 登録OK --> BV37[BV37<br/>BV13700P 振り分け]
```

---

## 2. 画面仕様（MPBV350）

画面レイアウト・項目は BV13500P_仕様書.md の 2.1・2.2 と同じ。

### 2.1 入力項目とチェック結果の番号

FLG は TSキューのチェック結果（'0'：未入力、'1'：エラー、'3'：関連エラー、'2'：OK）。どの項目が入力できるかは BV13500P の照会結果の区分で決まる（BV13500P_仕様書.md 4.7）。傭車会社・傭車形態・傭車料金・傭車番号・標示屯数・ＯＷ区分・一車保険料は、どの区分でも入力できない（照会結果を表示しているだけ）。

| FLG | 項目ID | 項目名 | 属性・桁 | 本プログラムでのチェック |
|---|---|---|---|---|
| 3 | BV35071 | 発送年 | 数字 2 | 区分 '2'・'5' のとき |
| 4 | BV35072 | 発送月 | 数字 2 | 同上 |
| 5 | BV35073 | 発送日 | 数字 2 | 同上 |
| 6 | BV35074 | 発送時 | 数字 2 | 全区分（入力不可の区分ではチェック済みまたは未入力） |
| 7 | BV35075 | 発送分 | 数字 2 | 同上 |
| 10 | BV35091 | 着店コード | 数字 4 | 同上 |
| 11 | BV35092 | 着地コード | 数字 5 | 同上 |
| 12 | BV35151 | 直集軒数 | 数字 2 | 同上（BV13500P で入力不可にしている） |
| 13 | BV35181 | 直卸他社コード | 数字 7 | 全区分。区分 '2'・'3'・'5'・'6' は必須 |

FLG(8)・FLG(9)（発店・発地）は BV13500P でチェック済み（OK）にしており、本プログラムではチェックしない。

### 2.2 ファンクションキー

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 入力内容をチェックし、登録する |
| PF2 | 取消 | 画面をクリアし、TSキューを削除して、共通ヘッダ画面と空の MPBV350 を表示する。BV35（照会）で待機 |
| PF3 | 終了 | TSキューを削除し、戻り先画面のスタックから一つ前の画面に戻る（BV13500P と同じ） |
| PF4 | 戻り | TSキューを削除し、メインメニューに戻る（BV13500P と同じ） |
| CLEAR | 強制終了 | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| 上記以外（PF1 を含む） | 再表示 | 画面のデータ部分を再送信し、BV36 で待機 |

---

## 3. インターフェース

### 3.1 通信領域（COMMAREA：256バイト）

| 項目ID | 本プログラムでの用途 |
|---|---|
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | 戻り先画面のスタック（PF3・PF4） |
| TSQ_ID・TSQ_LENGTH | TSキューの名前・長さ（BV13500P がセット） |
| COMM_TEN_CODE | 端末の店所コード（集信ログの入力店所・店所コード） |
| COMM_RPOC_YMD | 処理日付（送付書マスターの入力年月日） |
| COMM_ITEM_NO | 作業選択番号（送付書マスターの画面区分） |
| COMM_ITEM_DDP | 照会結果の区分（'1'：DDP の送付書あり、'2'・'5'：新規、'3'・'6'：センターに送付書あり。BV13500P_仕様書.md 3.4） |

### 3.2 TSキュー（CHK_DSP_WORK：300バイト）

BV13500P と同じ形式。BV13500P が保存した画面項目（傭車会社・傭車形態・傭車料金・傭車番号・一車保険料など）と照会結果（年月日・積店・運行車区分・標屯・到着予定年月日・差額区分）を使う。本プログラムで追加・更新する項目は次のとおり。

| 項目ID | 内容 |
|---|---|
| WK_TEIKBN | 訂正区分。いずれかの項目を入力したら '1'（送付書マスターの更新・集信ログの出力の判定に使う） |
| TS35HSYZ | 着店コードの店所マスターの所在地コード（先頭5桁） |
| TS35ATKA | 着地コードの地名マスターの扱店コード |
| BUYUSOK | 輸送粁程（発着地粁程マスターの標準粁程） |
| TS35BNKB | 運行車区分（区分 '5'・'6' の更新時に 02） |

### 3.3 センター登録（新規の送付書のとき）

| 項目 | 内容 |
|---|---|
| 接続先 | SYSID 'CIC1'、プロセス名 'B36V'（BV23600P） |
| 送信（42バイト） | トランザクションID（4）＋ DPCEB36V：指令書ＮＯ（B36VSRNO）、送付書ＮＯ（B36VSOFN）、年月日（B36VSYMD：発送年月日）、時分（B36VDHMM：発送時分）、発店（B36VSTNC）、着店（B36VSRCT：着店コード、0 なら着地の扱店コード）、運行車区分（B36VBNKB：照会結果の運行車区分）、積区分（B36VTSKB：0） |
| 受信（22バイト） | エラーフラグ（1）＋エラーコード（4）＋ CEDPBV36（指令書ＮＯ・送付書ＮＯ） |

### 3.4 送付書マスター（VPSOHFU）への登録内容

| 項目 | 区分 '2'・'3'（追加） | 区分 '5'・'6'（更新） | 区分 '1'（更新） |
|---|---|---|---|
| 発送伝票送付書ＮＯ・指令書ＮＯ・削除区分 | 送付書ＮＯ・指令書ＮＯ・'0' | （変更しない） | （変更しない） |
| テ゛ータ区分 | '1' | '1' | （変更しない） |
| 画面区分 | 作業選択番号 | 作業選択番号 | （変更しない） |
| 到着予定年月日 | 照会結果の到着予定年月日 | （変更しない） | （変更しない） |
| 発送年月日 | 発送年・月・日 | 発送年・月・日 | （変更しない） |
| 出発時分 | 発送時・分 | 発送時・分 | 発送時・分 |
| 積店コート゛・発地コード | 発店コード・発地コード | 発店コード・発地コード | （変更しない） |
| 卸店コート゛ | 着店コード（0 なら着地の扱店コード） | 同左 | 同左 |
| 着地コード | 着地コード（0 なら着店の所在地コード） | 着地コード | 着地コード |
| 運行車区分 | 照会結果の運行車区分 | 02 | （変更しない） |
| 車番・車号 | 傭車番号 | 傭車番号 | （変更しない） |
| セミトレ車番 | 0 | （変更しない） | （変更しない） |
| 傭車会社コート゛・ｏ・ｗ区分・標屯 | 傭車会社コード・ＯＷ区分・照会結果の標屯 | 同左 | （変更しない） |
| 傭車形態 | 傭車形態（空白なら 0） | 同左 | （変更しない） |
| 定額傭車料 | 傭車料金 | 傭車料金 | （変更しない） |
| 一車保険料 | 一車保険料 | （変更しない） | （変更しない） |
| 直集軒数 | 直集軒数 | 直集軒数 | 直集軒数 |
| 積区分 | '0' | （変更しない） | （変更しない） |
| 区域区分 | 空白 | 空白 | 空白 |
| 差額区分 | 照会結果の差額区分 | 同左 | 同左 |
| 輸送粁程 | 発着地粁程マスター（キー：発地コード＋着地コード）の標準粁程（1件目）。なければ 0 | 同左 | 同左 |
| 入力年月日 | 処理日付 | 処理日付 | 処理日付 |
| 直卸他社コード | 直卸他社コード | 直卸他社コード | 直卸他社コード |

区分 '1'・'5'・'6' の更新は、項目を入力した場合（WK_TEIKBN ＝ '1'）だけ行う。

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面]
    AID -- PFキー --> PF[ファンクションキー処理 2.2]
    AID -- 実行 --> RCV[MPBV350 を受信<br/>TSキューを読んで削除]
    RCV -- 画面データなし --> CLR
    RCV --> CHK[項目チェック 4.2<br/>関連チェック 4.3]
    CHK -- エラー --> ERR[TSキュー保存<br/>エラー表示] --> W36([BV36 で待機])
    CHK -- OK --> INQ{区分 '2'・'5'}
    INQ -- はい --> CEN[センターに送付書を登録 4.5]
    CEN -- エラー --> CERR[センター登録エラー<br/>ＰＦ３を押せ] --> W36
    INQ -- いいえ --> REG
    CEN -- OK --> REG[送付書マスター登録<br/>集信ログ出力 4.6]
    REG --> W37([BV37 で待機])
```

### 4.2 項目チェック（CHECK_SUB_RTN_LVL1）

1. 画面を受信し、TSキューを読む。なければ初期化する（FLG はすべて '1'、必須は時・分）。読めたら削除する。
2. 区分が '1'・'3'・'6' の場合は、発送年・月・日のチェックを飛ばし、発送時から始める。
3. チェック結果が '2' の項目はチェックしない。未入力は必須（FLGX ＝ '1'）ならエラー、そうでなければ未入力（'0'）。項目を入力した場合は WK_TEIKBN を '1' にする（時・分は範囲内の場合だけ）。

| FLG | 項目 | チェック内容（満たさなければエラー） |
|---|---|---|
| 3 | 発送年 | 数字 |
| 4 | 発送月 | 数字で 0～12 |
| 5 | 発送日 | 数字で 0～31 |
| 6 | 発送時 | 数字で 0～23 |
| 7 | 発送分 | 数字で 0～59 |
| 10 | 着店コード | 数字で、3～4桁目が '00' でない。店所マスターにあり、店所区分（VETNGETA）が 1・4・8。着店所名に店所略名（漢字）を表示し、所在地コード（先頭5桁）を着地コードと TS35HSYZ にセットする。OK なら着地コードの関連エラー（'3'）を解除する |
| 11 | 着地コード | 数字で、地名マスターにあり入力区分（VCHIIKUB）が 1。着店所名に地名（漢字）（1～19バイト目＋30バイト目）を表示し、扱店コードを TS35ATKA にセットする。OK なら着店コードの関連エラーを解除する |
| 12 | 直集軒数 | 数字 |
| 13 | 直卸他社コード | 数字で 0 でなく 9950000 未満。1859026（東京支店扱い）・1859034（宇都宮直卸）・1926065（入力不可）でない。直卸他社の名称マスター（VPKONAM）にあり、扱店が 0102（函館扱い）でない。直卸他社名・扱事業所コード・扱事業所名を表示する |

4. FLG(1)～FLG(13) にエラー（'1'）があれば、関連チェックをせずに全体エラーにする。

### 4.3 関連チェック

項目エラーがなければ行う。エラーは関連エラー（'3'）。

| No | 条件 | チェック内容 |
|---|---|---|
| 1 | 区分 '2'・'5'（新規） | 発送年月日が、指令書の年月日（照会結果 TS35SYMD）の 0～5日後（LSO0130）。範囲外・日数計算エラーなら発送年・月・日をエラー |
| 2 | 全区分 | 着店コード・着地コードがともに 0 なら両方エラー。着店コードが 0 で着地の扱店コードがあれば、着店コードを扱店コードにする |
| 3 | 着地コードが下表の地区 | 直卸他社コード（・着店）が決められた組合せでなければ、着地コード・直卸他社コード（函館市は着店も）をエラー |
| 4 | 直卸他社コードが 1501099（小牧　札樽） | 着店 0181・着地 01202 でなければ、着店・着地・直卸他社コードをエラー |

| 着地コード | 認める直卸他社コード |
|---|---|
| 01101（北海道 中央区） | 0376302、1027508、1208596、1803411（東雲）、1803271（京浜）、1802819（葛西）、1802801（板橋）、1802851（足立）、1802885（横浜）、1803156（入間）、1802835（八潮）、1802976（岩槻）、1802702（栗橋）、1802687（千葉）、1803312（土浦） |
| 01107（北海道 西区） | 1877549（大阪）、1877763（門真）、1877573（南大阪）、1877630（兵庫）、1877680（尼崎） |
| 01202（北海道 函館市） | 着店 0101 で 1374355（札樽）、着店 0181 で 0115750（函館運送）、着店 0181 で 1501099（小牧　札樽） |
| 01203（北海道 小樽市） | 1208645 |

最後に FLG(3)～FLG(13) に '1' または '3' があれば全体エラーにする。

### 4.4 表示の編集

1. 各項目：OK・未入力は入力不可（自動スキップ）、エラー（関連エラーを含む）は入力可・赤でカーソルを置く。
2. メッセージ：エラーなら「ERR 1」「エラー項目あり，再入力して下さい」、OK なら「OK  2」「確認ＯＫなら実行キーを押して下さい」。
3. エラーの場合は TSキューを書き、メッセージ・エラーコードを赤にして画面のデータ部分を送信し（カーソル指定）、BV36 で待機する。

### 4.5 センター登録（区分 '2'・'5'）

1. センター（CIC1 の B36V）に送付書の登録を依頼する（3.3）。
2. 通信エラーは BV13500P と同じエラーコード（ASYSB・ASYSI・A9999・CTERM・C9999・STERM・S9999・RTERM・RLENG・R9999）。回線混雑（ASYSB）は、メッセージを赤で表示して画面を受信し、送信をやり直す。
3. 通信エラー、またはセンターのエラーフラグが '0' 以外（指令書なし '1'、読込みエラー '2'）の場合は、メッセージ「センター登録エラー　ＰＦ３を押せ。」を高輝度・赤で表示し、TSキューを書いて BV36 で待機する（7章 3）。
4. OK なら登録処理（4.6）に進む。区分 '1'・'3'・'6' はセンターに登録しない。

### 4.6 登録処理（OK_DATA_PROCESS_SUB_RTN）

1. 送付書マスター（VPSOHFU）を 3.4 のとおり登録する。
   - 区分 '1'・'5'・'6'：項目を入力した場合だけ、送付書ＮＯ で更新モードで読み、書き換える。
   - 区分 '2'・'3'：レコードを作って追加する。
   - 読込み・更新・追加の結果は判定しない。
2. 項目を入力した場合（WK_TEIKBN ＝ '1'）は、集信ログ（SSS21：集信Ｒ２ 発送鑑データ、レコードＩＤ 230、長さ 384）を TD キュー 'SYUS' に書く。

| 集信ログの項目 | 内容 |
|---|---|
| 入力店所コート゛・継続区分 | 端末の店所コード・0 |
| 入力の年・月・日・時・分・秒 | 現在の日時 |
| 指令書ＮＯ・送付書ＮＯ | 指令書ＮＯ・送付書ＮＯ |
| 取消区分 | 区分 '2'・'5'（新規）は 0、それ以外は 1 |
| 店所コート゛ | 端末の店所コード |
| 出発の年・月・日・時・分 | 発送年・月・日・時・分 |
| 到着予定の年・月・日 | 送付書マスターの到着予定年月日 |
| 発地コート゛・卸店コート゛・着地コート゛・扱い店所コート゛ | 発地コード、着店コード（0 なら着地の扱店コード）、着地コード、着店コード |
| 運行車区分・積載社番（車号）・標屯・ｏｗ区分 | 送付書マスターの運行車区分、傭車番号、送付書マスターの標屯、ＯＷ区分 |
| 傭車会社コード・傭車 形態・定額傭車料・一車保険料 | 傭車会社コード、傭車形態（空白なら 0）、傭車料金、一車保険料 |
| 直集軒数・積区分・区域区分・直卸他社コード | 直集軒数・0・空白・直卸他社コード |
| 輸送粁程 | 発着地粁程マスターの標準粁程（1件目）。なければ 0。TSキューの BUYUSOK にも保存 |

3. TSキューを書き、メッセージ「送付書登録ＯＫ　ＮＯ群または直集受付は実行キー」をターコイズで表示して、画面のデータ部分を送信し BV37 で待機する。

---

## 5. メッセージ一覧

| No | エラーコード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | ERR 1 | エラー項目あり，再入力して下さい | 項目エラー・関連エラー |
| 2 | OK  2 | 確認ＯＫなら実行キーを押して下さい | チェックOK（表示の編集時。登録後は No.3 に置き換わる） |
| 3 | ― | 送付書登録ＯＫ　ＮＯ群または直集受付は実行キー | 登録OK |
| 4 | ― | センター登録エラー　ＰＦ３を押せ。 | センター登録の通信エラー・センターのエラー |
| 5 | ASYSB | 回線が混雑しています！！　実行キーをもう一度押して下さい | センター接続の回線混雑 |

---

## 6. 画面遷移

```mermaid
flowchart LR
    BV35[BV35 照会] --> BV36[BV36<br/>本プログラム]
    BV36 -- 実行（エラー・センター登録エラー） --> BV36
    BV36 -- 実行（登録OK） --> BV37[BV37<br/>BV13700P]
    BV36 -- PF2 --> BV35
    BV36 -- PF3 --> PREV[一つ前の画面]
    BV36 -- PF4 --> MAIN[メインメニュー]
    BV36 -- CLEAR・画面データなし --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **確認画面がない**：メッセージは「確認ＯＫなら実行キーを押して下さい」を編集するが、チェックOK の実行キーでそのまま登録まで進み、確認のための画面は表示されない（登録後に No.3 のメッセージに置き換わる）。
2. **区分 '3' は実際には来ない**：BV13500P は DDP の送付書マスターにない場合、センターに送付書があっても区分を '2' にする（BV13500P_仕様書.md 7章 1）。このため、センターに送付書がある場合も新規として扱われ、センターへの登録（送付書の一覧への追加）と送付書マスターの追加が行われる。
3. **センター登録エラーのエラーコード**：センター登録エラーの場合、メッセージだけを置き換え、エラーコード欄は表示の編集でセットした「OK  2」のまま表示される（回線混雑を除く）。通信エラーのエラーコード（ASYSI など）は表示されない。
4. **送付書マスターの更新結果を判定しない**：送付書マスターの読込み・書換え・追加の結果を判定していないため、失敗しても「送付書登録ＯＫ」になる。
5. **直卸他社コードの必須**：直卸他社コードを必須にしているのは BV13500P で、区分 '2'・'3'・'5'・'6' だけ。区分 '1'（DDP の送付書あり）では必須でなく、未入力でも登録できる。自社便版（BV13200P）にある「直卸他社コードが 0 ならエラー」の関連チェックはなく、項目チェックで 0 をエラーにしている。
6. **傭車の項目は入力できない**：傭車会社・傭車形態・傭車料金・傭車番号・一車保険料は画面では入力不可で、照会結果の値がそのまま登録される。標屯は画面の標示屯数ではなく、照会結果の標屯を登録する。
7. **区分 '5'・'6' の更新で変えない項目**：一車保険料・セミトレ車番・積区分・到着予定年月日は変更しない。運行車区分は照会結果に関係なく 02 にする。
8. **集信ログの店所コード**：自社便版（BV13200P）は発店コードをセットするが、本プログラムは端末の店所コードをセットする（発店は端末の店所なので、通常は同じ値）。
9. **集信ログの到着予定年月日**：区分 '1'・'5'・'6' で更新した場合は送付書マスターの値、区分 '2'・'3' では追加したレコードの値（照会結果）を使う。
10. **画面データなし**：画面データがない場合（MAPFAIL など）は、BV13500P と違って終了画面（ELEPHAN）にする。
11. **月・日・時・分の範囲**：発送月は 0～12、発送日は 0～31 で、0 を受け付ける。区分 '2'・'5' では関連チェック（日数計算）でエラーになるが、それ以外の区分では年月日を入力しない。
12. **エラーメッセージファイル**：VSAM 読込みサブルーチンでエラーメッセージファイルを 'VKERMSG' としている（BV13500P は 'VPERMSG'）。本プログラムではエラーメッセージファイルを読む処理はない。
