无法保存发票

时间:2012-02-21 20:27:30

标签: magento magento-1.5

将magento从1.4.0.1升级到1.5.1.0后,我无法提交发票。 当我将浏览器指向Sales -> Orders -> [order] View -> Invoice并点击Submit invoice时,我收到的错误是Unable to save the invoice.

我已经检查了我的exception.log文件中发生了什么,这里是错误:

exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '100000001' for key 'UNQ_INCREMENT_ID'' in /home/misbhv/domains/*/public_html/lib/Zend/Db/Statement/Pdo.php:234
Stack trace:
#0 /home/misbhv/domains/*/public_html/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/misbhv/domains/*/public_html/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 /home/misbhv/domains/*/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `sk...', Array)
#3 /home/misbhv/domains/*/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(337): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `sk...', Array)
#4 /home/misbhv/domains/*/public_html/lib/Zend/Db/Adapter/Abstract.php(574): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `sk...', Array)
#5 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Model/Mysql4/Abstract.php(414): Zend_Db_Adapter_Abstract->insert('sklep_sales_fla...', Array)
#6 /home/misbhv/domains/*/public_html/app/code/core/Mage/Sales/Model/Mysql4/Order/Abstract.php(417): Mage_Core_Model_Mysql4_Abstract->save(Object(Mage_Sales_Model_Order_Invoice))
#7 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Model/Abstract.php(318): Mage_Sales_Model_Mysql4_Order_Abstract->save(Object(Mage_Sales_Model_Order_Invoice))
#8 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Model/Resource/Transaction.php(150): Mage_Core_Model_Abstract->save()
#9 /home/misbhv/domains/*/public_html/app/code/core/Mage/Adminhtml/controllers/Sales/Order/InvoiceController.php(272): Mage_Core_Model_Resource_Transaction->save()
#10 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Adminhtml_Sales_Order_InvoiceController->saveAction()
#11 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('save')
#12 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 /home/misbhv/domains/*/public_html/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
#14 /home/misbhv/domains/*/public_html/app/Mage.php(627): Mage_Core_Model_App->run(Array)
#15 /home/misbhv/domains/*/public_html/index.php(80): Mage::run('', 'store')
#16 {main}

我不知道该如何处理,并且无法谷歌任何解决方案。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:6)

来自http://www.magentocommerce.com/boards/v/viewthread/234665/#t335407的解决方案是有道理的:

  

我有相同的错误代码。增量号和最后一个订单   号码不再同步。我们做了以下几点:

     

转到admin-> sales->订单并查找最高订单号(for   每个商店视图!)

     在fooman帖子的一些帮助之后,我们做到了:“然后看看你的   数据库。在表eav_entity_type中,您将找到所有实体类型   上市。有意改变的是订单号   开始,即。订单销售/订单。记住entity_type_id。\“(在我的   安装它是4)

     

\“接下来转到表eav_entity_store。查找entity_type_id。   现在,您可以将increment_last_id的值更改为上一个实际值   订单号。 (也就是说,如果你想要下一个orderId   15000将increment_last_id设置为14999。)\“

     

希望这会有所帮助。

答案 1 :(得分:1)

我实际上看了上面的解决方案,并认为它可能有用,你在正确的轨道上但我尝试了不同的东西:

更改' increment_last_id'字段直接解决没有问题 - 实际上有一组订单存在于之前的商店视图中,该视图已被删除,共享相同的订单ID,因此当Magento尝试在重复错误中写入失败的ID时。 / p>

我通过查看我的exception.log找到了问题(它实际上告诉我导致问题的订单ID)。

删除这些订单并通过编辑increment_last_id字段重新对齐新订单解决了我的问题。现在,我的新订单从上次的数字开始,上次没有订单ID的冲突。

答案 2 :(得分:0)

我认为您对版本1.4.x中没有要求的行中的唯一性有新的限制。您应该看到重复的行并使用另一个不同的increment_id创建一个包含所有级联约束的新行。 您可以使用下一个sql语句看到重复的行:

SELECT row FROM table GROUP BY row HAVING COUNT(*)>1;

以后你需要看到重复的行,在我的情况下,我可以删除重复的jey,因为那些是错误。是的,你可以删除重复的行,因为你被Magento中的错误所伤害。 在我的情况下,停止的magento scrip update更新了表的结构。

答案 3 :(得分:0)

我遇到了Fooman插件的问题,并且在所有的increment_id之前都有一个空格。这个查询为我修好了..

UPDATE `sales_flat_invoice` SET increment_id = trim(increment_id);
UPDATE `sales_flat_order` SET increment_id = trim(increment_id);
UPDATE `sales_flat_invoice_grid` SET increment_id = trim(increment_id);
UPDATE `sales_flat_order_grid` SET increment_id = trim(increment_id);
UPDATE `sales_flat_shipment` SET increment_id = trim(increment_id);
UPDATE `sales_flat_creditmemo` SET increment_id = trim(increment_id);
UPDATE `sales_flat_shipment_grid` SET increment_id = trim(increment_id);
UPDATE `sales_flat_creditmemo_grid` SET increment_id = trim(increment_id);
UPDATE `eav_entity_store` SET increment_last_id = trim(increment_last_id);