出荷伝票のステータスやデータの不整合を修正するプログラム・トランザクション（Useful tools for correcting status/data of delivery documents)

こんにちは。

今回は、運用保守の業務にて出荷伝票のリカバリ対応がうまくいかなかった際に習得した、出荷伝票ステータスの修正用標準プログラムやトランザクションの情報をまとめます。特に、出荷伝票のWMステータスが'B'のまま何をしても変更されなくなった場合および、出荷伝票の後続伝票データ（VBFA）に不正なデータが設定された場合の対処処理について記載しています。

:::note warn
なお、私が保守を担当している環境は、以下のとおりです。システムの遅延も多く発生しており、通常のSAP環境下では発生しない、発生確率が少ない事象があると思いますのでご留意のほどお願いいたします。
・ECC6.0環境
・サードバーティーアプリケーションを使用した出荷・倉庫管理の処理
:::

## 目次

1. まず参照すべきSAPノート
2. 対処方法あれこれ
3. トランザクション：VL_COMPLETE

## 1.まず参照すべきSAPノート
出荷伝票のWMステータスがおかしな状態になる、をはじめとするステータス関連・データ関連の不具合は、過去からある不具合のようで、以下のノートにて確認する内容・リカバリ用プログラムの対応方法がまとめられています。まずはこれを見て対処していくのが良いでしょう。
[2303665 Troubleshooting WM status 'B' in a Delivery](https://launchpad.support.sap.com/#/notes/2303665)
じゃあこれでこの記事終わり・・・としてもいいくらいよくできているノートなのですが、今回は当方の経験談や、こちらに掲載されていない、関連トランザクション：VL_COMPLETEの内容を併せて記載します。

:::note warn
なお、ノート記載の以下については当方が未対応なので記載を行っておりません。何かの機会で触れることがあれば更新します。
・ピッキング依頼有無の確認
・「遅延出荷更新設定」が行われている場合の処理（トランザクション：LX47を使って解消）
・PGM：WS_CORR_VBFA_LTAP（プログラムコメントによると「存在しないWM転送オーダーのドキュメントフローを削除する」)
:::

## 2. 対処方法あれこれ
以下、出荷伝票のWMステータスが'B'のまま変更されなくなった場合や、後続伝票データがおかしくなった場合に実行した対応やプログラムについて説明します。

### 2-1.出荷伝票明細の全品目・全数量に対して転送指図が登録されていることを確認する
基本ですが、転送指図の登録漏れがないかを確認します。出荷明細と転送指図の品目と数量を比較してもよいですが、トランザクション：LT03（出荷参照による転送指図登録）にて、出荷伝票に紐づく転送指図が登録できるかどうかを試すことでも確認ができます。

### 2-2.出荷伝票に紐づくすべての転送指図確認が完了している
出荷伝票の伝票フローから未完了の転送指図がある場合は、未確認の転送指図をトランザクション：LT12（転送指図確認）で確認処理を行います。前項の未登録転送指図の確認をせず、ここから対応し始めると、「あれ？全部確認完了なんだけど？」とハマる場合があります。ただし、サードパーティーアプリケーションの不具合などによるレアケースだとは思いますが、後続伝票データ（VBFA）自体がそもそも存在していないデータだった、と言う事例もありました（→2-5.）

### 2-3.出荷伝票ステータスを修正する（PGM：RVDELSTA）
ノートでも推奨されているのがPGM:RVDELSTAの実行です。出荷伝票のステータスの不整合があることがわかった場合に値を修正するプログラムです。選択画面の「シミュレーション」をチェックして実行すると実際の変更をせずに修正後のヘッダステータス・明細ステータス値を確認できます。チェックをせず実行すると、各種ステータスの値を変更します。

::: note info
ノートには、出荷伝票のステータスを完了（'C')のステータスに変更するプログラムと言う説明がありますが、後述のトランザクション：VL_COMPLETEを実行後にこのプログラムを実行すると強制的に完了させたステータスを本来の値に戻すことができます（後述）。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/93b28bd4-9a7a-07ff-fcc7-32b2fb7528b1.png)
SAPノート上の結果画面スクショではトリミングされていますが、「シミュレーション」のチェック有無にかかわらず、一覧の上部には常に「シミュレーション実行」と表示される仕様:sob:のようです。「シミュレーション」をオンで実行したかそうでないかは、一覧最下部に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/3266c8a2-a332-d99f-a3b5-7884129f532b.png)
「シミュレーション」にチェックを入れて実行した場合のメッセージ（メッセージのみ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/732caabb-0a56-f0fb-673d-dded91d7999e.png)
「シミュレーション」にチェックを入れずに実行した場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/d8adcd0d-fa22-01ce-8922-a372103cd649.png)

:::note info
上記スクショではステータスCがAに変更されていて、ノートの説明とは逆の修正を行っています。これは、後述するトランザクション：VL_COMPLETEを実行後にステータスを再度戻す必要が発生した際のスクリーンショットとなります。
:::

ただし、出荷伝票のステータス以外の箇所にも不整合が発生していると、このRVDELSTAでステータスの修正ができない状態になっている場合があります。その場合に以降の処理を行います。

### 2-4.伝票フローの設定内容を修正する(PGM：ZPICKFLO)
伝票フロー（テーブル：VBFA）の情報が適切に更新されてない場合、前述のRVDELSTAに失敗することがあるようです。その場合、（記載していないPGM：WS_CORR_VBFA_LTAPとともに）PGM：ZPICKFLOを実行して、伝票フローの情報を修正する必要があります。名称がZ始まりとなっているのは、下記のノートに添付されているコードを顧客側が手動で実装する必要があるため、暫定的な名称として使用されているようです。
[206453 - Correction report: Update of the TO confirmation - SAP ONE Support Launchpad](https://launchpad.support.sap.com/#/notes/206453)

選択画面にて、伝票フロー情報の修正が必要な出荷伝票番号を条件に指定して実行します。PGM：RVDELSTAと同様、「Test Run」にチェックを入れることでデータの更新前に結果だけを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/9c2da025-9fdb-f2f7-d685-6a00b4539a13.png)
選択画面の「Test Run」にチェックを入れた状態での結果画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/eed11a80-8fab-65fb-73e5-148a4a9e91b2.png)

:::note warn
このPGM：ZPICKFLOは出荷伝票のステータスを変更しませんので、実行後に再度PGM：RVDELSTAを実行する必要があります。
:::

### 2-5.存在しないWM転送オーダーのドキュメントフローを削除する(PGM:WS_CORR_VBFA_LTAP)
「出荷伝票を削除したいが、照会で開くだけで実行時エラーでショートダンプする」という問い合わせがありました。下記のノートに記載がある、テーブル：VBFAで出荷伝票の後続転送指図の明細数量の合計がマイナス値になっていることが確認できたのでSAPにインシデントを登録しました。しかし、SAP標準プログラム以外で出荷伝票が更新されているので対応はできないと返答でした。
[2465935 - Dump DYNPRO_FIELD_CONVERSION in VL02N/ VL03N due to negative picking](https://launchpad.support.sap.com/#/notes/2465935)
再度調べてみたのですが、SAPのシステム遅延による影響なのか、サードパーティアプリケーションの不具合なのか、存在しない転送指図の後続伝票データがVBFAに作成されていたようです:sweat:。照会時の実行時エラーはこの現象の副作用でした。この不正な後続伝票データを削除する際に使ったのがPGM：WS_CORR_VBFA_LTAP（WM 転送指図未登録の伝票フロー削除）です。

「DELIVERY」に出荷伝票番号を入力。事前に結果を確認したい場合は「TEST」に’X'を設定。 何か見覚えのある番号やコードがあってもそれは全くの偶然です（SAPノートの記載のパクリ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/961c5d2a-a91c-2f49-ba6e-c553f1138592.png)
「TEST」に’X'を設定して実行した結果。「To be deleted（削除予定）」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/8f9a6398-f5b8-a1c1-8598-e4fc12f74ee1.png)
「TEST」に’X'を設定せず実行した結果。「deleted（削除済）」。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/656535c1-e294-1de1-812b-7d8452edb6f3.png)
サードパーティーアプリケーションだからこういう不具合が起きるのではと思っていましたが、標準プログラムとして修正ツールが提供されているということは、SAP標準でもそれなりに発生し、ユーザからの需要があったという事情も考えられますね。

### 3.強制的に出荷伝票のステータスを完了にさせる（トランザクション：VL_COMPLETE）
トランザクション：VL_COMPLETE(PGM：SHP_DELIVERY_COMPLETE)の使い方について説明します。このトランザクションは *未出庫状態の* 出荷伝票の多くのステータスを'C'（完了）またはブランク（関連なし）に更新して、その出荷伝票を強制的に「完了状態」にするトランザクションです。
上記の、転送指図のステータスを修正するプログラムの情報がない頃には、 **出荷伝票の後続伝票を出荷伝票までロールバックしてから** VL_COMPLETEを実行して完了状態として在庫引当を解除し、現場側で別伝票を起票してもらい出庫を間に合わせるといった対応を行っていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/4613dfbe-c695-6137-696f-e903c7109882.png)
ロールバックおよび出荷伝票の強制完了・別出荷伝票での出庫対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/1994c017-699b-eaf2-3646-29d1c8628b18.png)

選択画面では対象となる出荷伝票番号や伝票タイプを指定する際に、誤動作防止のためか出荷伝票登録日の入力を求められます。そのため、複数伝票が対象であっても1伝票づつ処理を行うほうが良いと思います。また、画面下部の「輸送計画完了」にチェックを入れて実行すると輸送計画ステータスも完了に変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/c078492a-a6b6-3249-23f1-acd1f9aaa3a9.png)

抽出条件を満たす出荷伝票が一覧に表示されますので、行を選択して実行すると、対象の出荷伝票のステータスが完了（'C')、または関連なし（ブランク）に設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326392/59c21ad3-acff-f3a8-8149-6215009fdacf.png)

::: note info
前述のとおりですが、何らかの理由で間違ってこのVL_COMPLETEを実行した場合は、PGM：RVDELSTAを実行することで元のステータスに戻すことができます。
:::

## まとめ
以下について説明しました。
* 出荷伝票のWMステータスが'B'のまま変わらなくなったときに見るべきSAPノート
* SAPノートに記載されているリカバリ用プログラム：RVDELSTA・ZPICKFLO・WS_CORR_VBFA_LTAP
* 出荷伝票のステータスを強制的に完了状態にするトランザクション：VL_COMPLETE

運用保守案件を担当していると、導入案件ではわかりづらいSAPの不具合や、それらに対応するプログラム・トランザクションに触れることができるのが楽しいと感じています。今後も参考になりそうな内容があれば記事にまとめていきます。

今回は以上となります、ありがとうございました。