一定条件下で商品別税率設定が適用されない不具合の原因と対策。
Edit me

商品別税率設定が適用されない不具合について

増税に伴い、基本税率設定に10%の設定追加や、軽減税率対応のため商品別税率設定を適用する際、特定の時系列で設定を行なった場合に、商品購入時の税率に商品別税率設定が適用されない不具合が発生しています。

以下の「対象となるケース」から、不具合の発生する設定を行なっていないかご確認いただき、対象となる場合は「不具合の回避方法」にある手順を適用してください。

不具合の内容と対策

不具合の内容

EC-CUBEの本体バージョンが4系または3系で、基本税率設定を設定する際の「適用日時」より前に、商品別税率設定作業をすると、商品の購入時に基本税率設定の税率が適用されます。

対象となるケース

今回の商品別税率設定が適用されない不具合に関しては、以下の全てに該当している場合に問題が発生します。

  • EC-CUBEの本体バージョンが4系または3系である
  • 基本税率設定で基本税率の設定を追加している
  • 基本税率設定で追加した税率設定の「適用日時」より前に、商品別税率設定の作業をされている

例として、今回の不具合の対象となるケースは、以下の図のように基本税率設定で10%の税率の「適用日時」を 2019年10月1日 00:00:00 に設定されている状態で、商品別税率設定の作業を、2019年10月1日 00:00:00 より前の日時に実施した場合に発生します。

不具合の対策

商品の購入時、「dtb_tax_rule」テーブルの、「apply_date(適用日時)」を元にその商品に適用される税率を取得します。

税率設定は、「apply_date(適用日時)」が最新かつ現在までの日時である方を優先します。 商品別税率設定は、設定作業を行った日時で「apply_date(適用日時)」が登録されます。 商品別税率設定の「apply_date(適用日時)」が、基本税率設定で設定されている「apply_date(適用日時)」より、新しい日時に設定すれば不具合を回避できます。

不具合の詳細に関しては、こちらからご確認ください。

不具合の回避方法

※ 最新版でないバージョンをご利用の場合は、事前に最新版へバージョンアップをしてください。

運用での回避方法

基本税率の設定を商品別税率設定作業前の日時に設定する方法

  1. 管理画面「店舗設定/税率設定」を開き、登録した基本税率設定の「編集」ボタンをクリックします。
  2. 「適用日時」を、 商品別税率の設定作業をした日時 以前の値に変更します。
  3. 「決定」ボタンで設定を保存します。

商品別税率を基本税率の適用日時以降に設定する方法

基本税率設定で追加した税率の「適用日時」が 2019年10月1日 00:00:00 に設定されている場合は、 2019年10月1日 00:00:00 以降に、以下の手順で商品別税率を設定し、不具合を回避してください。

商品別税率設定の適用日時が、基本税率設定の適用日時より新しい日時に設定されるので、商品別税率が優先して適用されます。

  1. すでに商品別税率を設定されている場合は、一度設定を解除していただく必要がございます。適用する商品の編集画面を表示し、税率の入力フォームを、未入力の状態に変更してください。
  2. 「登録」ボタンをクリック(1回目)し設定を保存します。

  1. 保存が完了したら、そのまま税率の入力フォームに、商品別税率の値を入力します。
  2. 「登録」ボタンをクリック(2回目)し設定を保存します。

※ EC-CUBE4.0.3では、商品別税率の設定対象の商品が多い場合は、「商品CSV登録」でも同様に商品別税率の初期化と再登録を行うことで更新を行えます。ただし、デフォルトでは商品CSVの税率項目が有効になっていないので、管理画面「店舗設定/CSV出力項目設定」で、「CSV種別」から 商品CSV を選択し、 税率 の項目を「出力する項目」に追加してください。

技術者向けの回避方法

SQLでデータベースを更新する方法

以下の値の例は、基本税率設定で追加した税率の「適用日時」が 2019年10月1日 00:00:00 で設定されていることを前提としています。 SQLで更新をする場合は、更新する値や条件をご確認の上更新してください。

MySQLをご使用の場合は、環境に合わせて time_zone を設定し更新してください。

例) MySQLでtime_zoneをJSTに変更する場合

SET time_zone = '+09:00';

・任意のIDに対して更新する場合

UPDATE dtb_tax_rule SET apply_date = '2019-10-01 00:00:01' WHERE id = [任意のid];

・「product_class_id」がNULLでないレコードを更新する場合

UPDATE dtb_tax_rule SET apply_date = '2019-10-01 00:00:01' WHERE product_class_id IS NOT NULL;

※ EC-CUBEのデフォルトの仕様では、商品別率設定で登録されたレコードは、「product_class_id」に商品規格のIDが登録されます。

EC-CUBE 3.0.x系の場合の回避方法

EC-CUBE3系においても同様の不具合が発生します。 EC-CUBE3系では上記の回避対応に加えて、ソースコードの修正も必要となります。(ソースコードの修正を行わないと商品別税率が反映されません)

修正ファイル:
src/Eccube/Repository/TaxRuleRepository.php 差分コード:
https://github.com/EC-CUBE/ec-cube/pull/4310/files#diff-9ebf9d0c89cef624ee2648733e557603 修正後の動作確認:
商品別税率が購入時の価格に反映されていることを確認してください。

Tags: spec