2012-03-13 6 views
3

私はMagentoの中にクレジットカード/デビットカードで順序を作るとき、私は、次のエラーを取得しています:Magentoの注文:整合性制約違反

Order saving error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '282-189' for key 2 

私はそれだけのdidnとして、正確なトレースを取得できませんでしたしかし、私にそれを示したいと思っていますが、app/code/core/Mage/Checkout/controllers/OnepageController.phpの行501(未編集)に戻ってきました。正確なラインがある:

$this->getOnepage()->saveOrder(); 

、ロジックは、これは順番を追加しようとすると、同じキーを持つ2つだけのオーダーである、または私は完全に間違っていると言われますか?

とにかく、これ以外では、これを修正するにはどうすればよいでしょうか?私は、注文を輸出し、それらをすべて取り除き、その後再輸入することを考えましたが、それはうまくいかないと感じています。

私は

EDIT Magentoの1.6.2.0を使用しています:私は、私は潜在的に空にそのテーブル(それがどのテーブルに依存する)可能性があるテーブルの整合性チェックを失敗している見つける場合、私はちょうど、実現し、これは希望それを自分で修正しますか?どのテーブルを見つけてどのテーブルが台無しになっているかを知る方法はありますか?

EDIT2:同じtax_idの

2012-03-14T13:59:01+00:00 DEBUG (7): SQL: INSERT INTO `sales_order_tax_item` (`tax_id`, `item_id`, `tax_percent`) VALUES (?, ?, ?) (254, 8, 10) 
2012-03-14T13:59:01+00:00 DEBUG (7): SQL: INSERT INTO `sales_order_tax_item` (`tax_id`, `item_id`, `tax_percent`) VALUES (?, ?, ?) (254, 8, 10) 

明らかに2を挿入することはできません。OGUZÇelikdemirの答えの後、それが判明したので、次は犯人です。誰でもどのようにそれを修正する考えですか?

+0

最近、拡張機能をインストールしたことがありますか? –

+0

はい、何もそれは税に干渉していたはずです!私は解決策を見つけました。 –

答えて

2

クイックダーティハックが見つかりました。私はこれをバグとして開発者に投稿しようとします。ファイルapp/code/core/Mmage/Tax/Model/Observer.phpを開き、if($item)文は、その文の中に、あります132 行目に行く 、この周りのコードをラップ:

$define = 'FIX_'.$item->getId().'_'.$result->getTaxId(); 
if(!defined($define) || constant($define) != true) { 
      // code 
    define($define, true); 
} 

例:

if (isset($ratesIdQuoteItemId[$id])) { 
    foreach ($ratesIdQuoteItemId[$id] as $quoteItemId) { 
     if ($quoteItemId['code'] == $tax['code']) { 
      $item = $order->getItemByQuoteItemId($quoteItemId['id']); 
      if ($item) { 
       $define = 'FIX_'.$item->getId().'_'.$result->getTaxId(); 
       if(!defined($define) || constant($define) != true) { 
        $data = array(
         'item_id'  => $item->getId(), 
         'tax_id'  => $result->getTaxId(), 
         'tax_percent' => $quoteItemId['percent'] 
        ); 
        Mage::getModel('tax/sales_order_tax_item')->setData($data)->save(); 
        define($define, true); 
       } 
      } 
     } 
    } 
} 
3

logテーブルを切り捨てます。あなた自身を守るために、Magentoではなく、CONSOLEからバックアップを作成してください。

TRUNCATE `log_customer`; 
ALTER TABLE `log_customer` AUTO_INCREMENT=1; 
TRUNCATE `log_quote`; 
ALTER TABLE `log_quote` AUTO_INCREMENT=1; 
TRUNCATE `log_summary`; 
ALTER TABLE `log_summary` AUTO_INCREMENT=1; 
TRUNCATE `log_visitor_info`; 
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1; 
TRUNCATE `log_url`; 
ALTER TABLE `log_url` AUTO_INCREMENT=1; 
TRUNCATE `log_url_info`; 
ALTER TABLE `log_url_info` AUTO_INCREMENT=1; 
TRUNCATE `log_visitor`; 
ALTER TABLE `log_visitor` AUTO_INCREMENT=1; 
TRUNCATE `report_event`; 
ALTER TABLE `report_event` AUTO_INCREMENT=1; 
TRUNCATE `log_summary_type`; 
ALTER TABLE `log_summary_type` AUTO_INCREMENT=1; 

EDIT: SQLのデバッグのために、/lib/Varien/Db/Adapter/Pdo/Mysql.phpファイルを開き、protected $_debugを見つけます。デフォルトのステータスはfalseで、trueに変更してください。その後

、またvar/debug/sql.txt

ですべき利用できるログファイルは、How do I print all the queries in Magento?

EDIT 2 ansverこのstackoverflowのを取る: だから、ここにあなたのファイル、プロセス、販売アイテム税です。 sales_order_tax_itemモデルを呼び出している app/code/core/Mage/Tax/Model/Observer/Observer.php

# Line 144 (Magento 1.6 edition) 
Mage::getModel('tax/sales_order_tax_item')->setData($data)->save(); 

。ここで

app/core/Mage/Tax/Model/Resource/Sales/Order/Tax/Itemp.php

# Line 51 
public function getTaxItemsByItemId($item_id) 
{ 
    $adapter = $this->_getReadAdapter(); 
    $select = $adapter->select() 
     ->from(array('item' => $this->getTable('tax/sales_order_tax_item')), array('tax_id', 'tax_percent')) 
     ->join(
      array('tax' => $this->getTable('tax/sales_order_tax')), 
      'item.tax_id = tax.tax_id', 
      array('title', 'percent', 'base_amount') 
     ) 
     ->where('item_id = ?', $item_id); 

    return $adapter->fetchAll($select); 
} 

オブザーバーから呼び出す機能です。では、ObserverまたはFunctionにブレークポイントを追加し、デバッガの出力を見てください。なぜこの機能を2回呼び出すのですか?

+0

それは、動作しませんでしたか?以前もこれを試していましたが、まだ動作しませんでした。 sales_order_flatテーブルを含む他の多くのテーブルを空にする人がいました。しかしそれのどれも働かなかった。その他の提案はありますか? –

+1

キャッシュと再インデックスの製品とカテゴリを更新しようとしましたか? magentoではなく 'cache'ディレクトリをコンソールから削除してください。 –

+0

はい、私は、私は質問を更新しました、多分私は編集したビットを助けることができますか? –

2

セクションSales -> Tax -> Manage Tax Rules内に移動してください管理パネルを開き、そこにすべてのレコードをチェックして、関係zone-classの重複を確認します。

私のケースでは、税クラス "課税対象商品"を持っていた商品のチェックアウトページに同じエラーがあります。税ルールでは、このクラスに対して2つのエントリがあり、それぞれのエントリは同じ税務ゾーンでした。そこで、システムは製品に対して同じ税金を2回適用しようとしました。

+0

ありがとう、ちょうど私の問題だった。以前のMagentoの設置(当社は1.6.2.0)で税金がどのように壊れていたかで、これは税制に加えられた相当量の変更のために1.9で頭を上げただけです。 – evensis

関連する問題