违反完整性约束:1062键“ UNQ_SALES_FLAT_INVOICE_INCREMENT_ID”的重复条目


13

我正在帮助商家追踪某些付款交易失败(在繁重的订单日期间)的根本原因,该交易失败并出现以下错误

SQLSTATE [23000]:违反完整性约束:1062键“ UNQ_SALES_FLAT_INVOICE_INCREMENT_ID”的条目“ 51986”重复

UNQ_SALES_FLAT_INVOICE_INCREMENT_ID指数是在一个独特的密钥increment_id在列sales_flat_invoice表。当我在该表中查找increment_id错误(51986)中提到的内容时,我发现其中已经有一张发票increment_id,并且该发票是由另一位客户下的订单。

我与此有关的2个问题

  • 通常在Magento CE 1.9.0.1中的哪个位置创建发票ID?

  • Magento CE 1.9.0.1库存中是否存在已知问题,且几乎同时发生的订单具有冲突的发票ID?

我认识到51986手段的增量ID 商店具有某种扩展名,用于更改已安装的增量ID,但是我想确保在沿这条路径走得太远之前没有已知的科学。


1
添加Mage_Eav_Model_Entity_Type :: fetchNewIncrementId()作为调试点。
艾伦·斯托姆

1
我以前见过,但这是由于有人save()在特定的观察者事件中放置了一个方法调用,有时这会导致此问题-在代码审阅之前;)
Erfan 2015年

@AlanStorm,出于好奇,为什么要进入Eav实体,我认为发票是一个平面模型。
Prateek

我相信这也可以用默认的Magento发生stackoverflow.com/questions/25918091/...
克里斯托夫在Fooman

1
我知道这个旧版本,但是由于任何原因复制了eav_entity_store表。这是一个常见错误,其中最后一个订单ID与当前下达的订单不匹配。因此,Magento使用eav_entity_store表确定要在订单表中插入的ID,在这种情况下,该ID已经存在。另外,请注意,这是FooMan订单号扩展名中的一个非常常见的问题,因为它可以绕过此检查并导致此问题突然出现。
罗布2015年

Answers:


3

订单,发票,信用额度,运费为EAV直到1.6(?)

@Prateek发票是一个EAV模型,而增量ID仍然是。

Increment_id的创建和问题

在此处创建增量ID

\Mage_Eav_Model_Entity_Attribute_Backend_Increment which calls
\Mage_Eav_Model_Entity_Abstract::setNewIncrementId which calls
\Mage_Eav_Model_Entity_Type::fetchNewIncrementId

我想假设是因为在最后一种方法中,事务已启动(并且表/行未锁定),第二个订单创建可以通过并接受新创建的订单increment_id

我假设,如果在读取之前锁定了行/表,则可以避免任何其他进程读取表,直到您编写新的增量ID。这可能会有所帮助:使用load()之后如何锁定行?

但是我担心锁定行会导致性能下降。


1
刚看到这篇文章和@Fabian,这是很高兴知道的。当答案中提到某人时,SE还应触发通知。
Prateek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.