Идентификаторы приращения буквенно-цифрового порядка
Вопрос
Я использую буквенно-цифровые идентификаторы приращения порядка с ~ CE 1.1 - все они настроены с использованием буквенного символа в поле префикса core_entity_store
.
В то время не существовало реальной документации, касающейся настройки и работы с несколькими магазинами, поэтому мы приняли практику, согласно которой все идентификаторы заказов начинались с альфа-символа, представляющего магазин.Номера заказов обычно выглядели как M000000003, PA000000004 и т.д.
Перенесемся на 5 лет вперед до EE 1.11, и примерно с PE / EE 1.10 мы заметили, что заказы периодически возвращают SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'PA00505156' for key 'UNQ_SALES_FLAT_ORDER_INCREMENT_ID'
ошибка или что-то подобное.Это случается нечасто, но мои исследования приводят меня к тому факту, что условие гонки при резервировании идентификатора заказа может быть связано с тем, что префикс является буквенным, а не числовым.
Я знаю, что Эшли Шредер некоторое время назад работал над этим с разработанным им модулем Pro Edition - http://www.aschroder.com/2010/07/easily-set-a-custom-order-number-in-magento-with-my-free-setstartordernumber-extension/ - Но не похоже, что там произошло много изменений, поскольку pro-версии нет в Magento Connect.
Кто-нибудь еще использует альфа-префиксы?Как это работало для вас до сих пор?Видите ли вы те же ошибки?
Решение
Да, у нас тоже была эта проблема.
Быстрое решение заключается в следующем:перейдите в in app\code\core\Mage\Sales\Model\Resource\Quote.php
, в функции isOrderIncrementIdUsed
замените строку
$bind = array(':increment_id' => (int)$orderIncrementId);
с
$bind = array(':increment_id' => $orderIncrementId);
Теперь все должно сработать.
Это исправление основного файла, но можно переопределить эту функциональность с помощью расширения (к сожалению, до сих пор у нас не было на это времени)..
С уважением.