オープンソースのERP iDempiereの標準機能として、受注伝票と発注伝票は、一度完成にしても"再アクテイブ"する事で再度編集する事ができます。受注伝票の修正は、業種/業界によっては割と頻繁にある事かもしれません。そのような場合に完成した受注伝票をボイドして、再度入力というのは面倒な場合があるだろうという事で、"再アクテイブ"して再度編集できるようにしているのだと思います。
しかし一方で、既に出荷したり請求したりしている受注伝票の変更は困る場合があります。例えば、受注伝票明細上は10個受注して、10個すべて出荷済みになっているのにも関わらず、再アクテイブする事により、8個受注に変更する事ができてしまいます。
このように、再アクテイブは業務処理的なメリットがある一方で、誤入力のデメリット(懸念)もあります。そこで、JPiereでは、再アクテイブした際に、数量等の重要な情報を修正しないようにするチェックロジックを実装しました。
前提
そもそも受注伝票や発注伝票で"再アクテイブ"を許可しないのであれば、職責の設定やDocOptionsの実装で制限して下さい。このカスタマイズは、あくまでも再アクテイブを行う事を前提に、運用上誤入力を防ぐためのチェックロジックの実装を目的としています。
チェックロジックは、既に出荷/入荷がされているか、請求されている受注伝票明細もしくは発注伝票明細を変更しようとした際に、bereSave()メソッドで実行されます。新規に明細行を追加するのは、既に出荷/入荷がされているという事はないため、チェックロジックの対象外としています。
数量変更チェックのシステムコンフィグ設定
受注伝票と発注伝票の再アクテイブの制御は、まずは、その方針をシステムコンフィグ設定に定義しておく必要があります。
JP_SO_REACTIVATE_QTY_CHECK
受注伝票の入力数量(QtyEntered)の変更を許可するかどうかの設定です。このシステムコンフィグ設定は組織レベルの設定が可能です。
JP_PO_REACTIVATE_QTY_CHECK
発注伝票の入力数量(QtyEntered)の変更を許可するかどうかの設定です。このシステムコンフィグ設定は組織レベルの設定が可能です。
システムコンフィグ設定には次のいずれかの値を設定します。
◆PCQ: 数量の変更は不可(Prohibit Change Qty)
再アクテイブの際に、数量の変更はできません。
実装としては引当数量(未入荷発注数量)か出荷済数量(入荷済数量)、請求済数量のいずれかひとつでも0ではない場合は、入力数量を変更する事はできないようにしています。
一度引当及び発注した在庫を簡単に変更されたくない場合などに使用する事を意図しています。
◆AIQ: 数量増加の許可(Allow Increase Qty)
再アクテイブの際に、出荷済数量(入荷済数量)もしくは請求済数量が0ではない場合は、入力数量(注文数量)を出荷済数量(入荷済数量)もしくは請求済数量のいずれか大きい数量より小さくする入力はできません。注文数量が、出荷済数量(入荷済数量)、請求数量より少なく変更される数値の矛盾を防ぐことができます。
◆ACR: 引当のみの場合は数量の変更を許可(Allow Change Qty When Reserved)
再アクテイブの際に、出荷済数量(入荷済数量)もしくは請求済数量が0ではない場合は、入力数量(注文数量)の変更はできません。引当だけの場合は変更する事ができます。
◆NON
数量の変更チェックは行わない場合に使用します。
金額変更チェックのシステムコンフィグ設定
JP_SO_REACTIVATE_AMT_CHECK
受注伝票の入数単価(PriceEntered)の変更を許可するかどうかの設定です。このシステムコンフィグ設定は組織レベルの設定が可能です。
JP_PO_REACTIVATE_AMT_CHECK
発注伝票の入数単価(PriceEntered)の変更を許可するかどうかの設定です。このシステムコンフィグ設定は組織レベルの設定が可能です。
システムコンフィグ設定には次のいずれかの値を設定します。
◆ANI: 請求が無い場合は金額の変更を許可(Allow Change Amt When Not Invoiced)
再アクテイブの際に、請求済数量が0の場合は、入数単価と税金情報の変更ができますが、請求済数量が0でない場合は変更する事ができません。
◆NON
入数単価と税金情報の変更チェックは行わない場合に使用します。
カスタマイズ情報
実装クラス
- jpiere.base.plugin.org.adempiere.base.JPiereOrderLineModelValidator.java
追加メッセージ
◆JP_CanNotChangeQtyForQtyDeliveredOrQtyInvoiced
You can not change Qty. Because Delivered or Invoiced Qty are not 0.(既に入出荷もしくは請求が行われているため数量の変更はできません。)
◆JP_CanNotChangeQtyLessThanQtyDeliveredOrQtyInvoiced
You can not change Qty less than Delivered or Invoiced Qty.(入出荷済数量もしくは請求済数量より少ない数量に変更する事はできません。)
◆JP_CanNotChangeAmountForQtyInvoiced
You can not change Amount. Because invoice was issued.(既に請求が行われているため金額に関係する変更はできません。)
◆JP_CanNotChangeAmountForQtyReservedSO
You can not Change Qty. Because of Reserved Qty.(引当済みのため変更できません。)
◆JP_CanNotChangeAmountForQtyReservedPO
You can not Change Qty. Because of Reserved Qty.(発注済みのため変更できません。)
更新履歴
2016年11月7日:対応バージョンJPiere4.1以上
◆"ボイド"と"クローズ"の伝票ステータス更新処理時はチェックしないように修正
受注伝票/発注伝票のボイドとクローズの処理時に注文数量(QtyOrdered)の数量更新処理が行われるため、再アクティブ時のチェックロジックを通過しないように修正しました。
2016年12月7日:対応バージョンJPiere4.1以上
◆在庫移動伝票が作成されている場合には数量を変更できないように修正
数量変更のチェックを行う場合、在庫移動伝票が作成されている受注伝票明細については、再アクティブの際に、数量変更できないようにチェックロジックを追加しました。