Номер заказа Magento

9

У меня странная проблема с номером заказа в Magento.

В последнее время, когда один заказ был размещен на моем сайте номер заказ пришел был 100000350, В идеале это должно было быть, 100000370как мои предыдущие порядковые номера были 100000369и 100000367. Я прикрепил скриншот ниже для этого

Скриншот номера заказа

Более того, я проверил журналы ошибок, но не нашел ни одной записи. Мы используем SagePay и PayPal в качестве платежного шлюза для него.

Кто-нибудь может направить меня в этом?

правый
источник
Я ясно вижу, что у вас установлен какой-либо модуль, связанный с заказом, поэтому у вас возникнет проблема,
Кейул Шах
Там нет никакого модуля, связанного с заказом. Единственный сторонний модуль, который мы используем, это Ebizmarts_SagePay, Mass_Product_Relater, TBT_Enhancegrid и Sphinix Search
Dexter
1
Ничего страшного, кто-то с учетной записью клиента почти выполнил заказ до того момента, когда он отправил его на оплату, получил номер заказа на продажу, а затем отказался от корзины на некоторое время. Бывает все время ... Вы получили заказ, поздравления, выполненный заказ вместо отказа.
Fiasco Labs
Я думаю, что вы не поняли мой вопрос
Декстер
1
@huzefam - Пожалуйста, обсудите это с командой разработчиков Magento или создайте свой собственный столбец серийного автономного номера, который вы отключите для своей ERP на завершенной версии Magento SO. Да, я понимаю с точки зрения одитинга, если пропущены номера счетов-фактур, есть платок. Похоже, Magento занял позицию, что не все заказы действительны, поэтому пропущенные номера SO не имеют большого значения. Я также понимаю, что некоторые системы бухгалтерского учета в правительственных юрисдикциях одинаково относятся к заказам на продажу и ожидают, что у них будет контрольный журнал, показывающий аннулированные заказы в полной последовательной последовательности.
Fiasco Labs

Ответы:

28

В первый раз, когда я получил порядковый номер, у нас было удивление и некоторое смятение, пока я не выяснил, что происходит. Это связано с тем, как Magento распределяет номера заказов на продажу.

Совершенно нормально иметь такой номер вне последовательности, быть перед текущими назначенными номерами и месяц или более старым. Секрет в том, что это был зарегистрированный клиент, который не выполнил заказ после определенного критического этапа, вернулся, вошел в систему и решил, наконец, купить.

Цитата с присвоенным номером заказа на продажу использует этот номер для номера заказа на продажу.

Теперь для объяснения.

Процесс заказа Magento создает предложение при первом добавлении чего-либо в корзину.

  • Для гостевых клиентов эта цитата действует до тех пор, пока время их сеанса не истекло, и в этот момент она существует в базе данных, но не может быть восстановлена ​​гостевым клиентом.
  • Когда зарегистрированный покупатель входит в систему, корзине присваивается идентификатор его покупателя, поэтому корзина действует до тех пор, пока покупатель не опустошает ее, и ее может получить зарегистрированный покупатель, войдя в свою учетную запись.

На данный момент предложение является только потенциальным Заказом на продажу . У него нет назначенного номера, потому что клиент не взял на себя обязательство платить за него.

Когда клиент нажимает кнопку «Приступить» к оформлению заказа, он будет:

  • либо войдите в систему до запуска корзины
  • или, если не вошли в систему, спросили, хотят ли они зарегистрироваться или зарегистрироваться в качестве гостя.

Ниже приводится важный момент: клиенты, которые решили зарегистрироваться в корзине, считаются гостевыми клиентами до тех пор, пока заказ не будет завершен, и они не перейдут на страницу успеха, после чего их учетная запись будет создана, и они вошли в систему. Цитата остается гостевым предложением клиента с потерей времени ожидания сеанса в корзине, если заказ не выполнен, и отображается страница успеха.

С заказом кредитной карты происходит следующее, когда нажимается кнопка « Разместить заказ» .

  • Информация о кредитной карте, адрес для выставления счета, общая сумма заказа и информация о заказе собраны
  • Для этой квоты назначен номер заказа на продажу ( sales_flat_quoteтаблица в reserved_order_idстолбце)
  • Пакет данных передается в шлюз кредитной карты для авторизации / захвата средств для оплаты заказа.
  • Обработчик кредитной корзины передает обратно:
    • либо авторизация / сбор средств с соответствующей информацией о транзакции для записи
    • или отклонение платежа с соответствующей информацией о том, почему было отказано в авторизации / захвате.
  • При успешной авторизации / захвате предложение преобразуется в заказ клиента, и если это регистр корзины, создается учетная запись клиента.

Если транзакция по кредитной карте отклонена для какого-либо клиента шлюзом оплаты по кредитной карте, и следующий клиент разместит успешный заказ, в последовательности номеров заказов на продажу будет пропущено из-за того, что заказу на продажу с отклоненным платежом назначен зарезервированный номер заказа на продажу. и следующему успешному заказу на продажу присваивается следующий доступный номер.

Для гостевых тележек (гостевых заказов и неудачных регистраций в клиентах корзины), которые превышают время ожидания сеанса, этот зарезервированный номер заказа на продажу будет потерян по истечении сеанса, оставляя пробелы в последовательности заказа на продажу.

Для клиентов, которые вошли в систему до нажатия кнопки « Продолжить» , котировке присваивается идентификатор клиента, поэтому, если они попытаются разместить заказ и обнаружат, что он отклонен, они могут вернуться, войти в систему, обнаружить, что в корзине все еще есть содержимое, и разместить порядок, иногда намного позже (самый длинный на сегодняшний день был четыре месяца). В предложении будет использоваться назначенный зарезервированный номер заказа на продажу, в результате чего на дисплее управления заказами на продажу отобразится номер заказа клиента, вышедший из последовательности .

Fiasco Labs
источник
Для проверки я сделал вид, что застрял в кассе, не выбрав способ оплаты и, наконец, закрыв браузер (на компьютере, который первым открыл сайт + оформить заказ). и тем временем закончил второй заказ компьютеров (который должен получить следующий шаг ID). В результате он не перепрыгивает через номер. Если бы это работало так, это добавило бы неиспользованный идентификатор между заказом 10 и заказом 11, который это не сделало. Согласно вашей информации, я пытался проверить и сделать именно то, что вы указываете, но это не дает вывод.
Шива
Вместо этого, если клиент потерпел неудачу в Payement Gateway, он будет отображаться как ожидающий платеж или отмененный, а если заказ не выполнен в последней части оформления заказа, он вообще не будет отображаться (и просто продолжить с правильным идентификатором в последовательность). Так что теперь я запутался с этим. Пожалуйста, помогите мне понять, почему номер заказа пропускается случайно. Спасибо
Шива
Отличное объяснение.
Вольфак
2

Я столкнулся с той же проблемой, но это было только тогда, когда сервер был загружен с огромной нагрузкой. Эта проблема возникает, потому что БД переходит в состояние блокировки при преобразовании кавычек в порядок. При дальнейшей проверке я обнаружил, что проблема заключалась в том, что он пытался записать данные в таблицу sales_flat_order_grid в транзакции сразу после вставки в таблицу sales_flat_order. При одновременных запросах это вызывало конфликты блокировки. Реальное решение состоит в том, чтобы убрать часть sales_flat_order_grid из транзакции.

Ссылка помогла мне понять проблему

Патч решил проблему для меня.

Вы должны удалить функцию _afterSave из Mage_Sales_Model_Abstract и добавить

public function afterCommitCallback(){
    if (!$this->getForceUpdateGridRecords()) {
         $this->_getResource()->updateGridRecords($this->getId());
     }
    parent::afterCommitCallback();
}

Дайте мне знать, если это решит проблему для вас.

Shaily
источник
Кто-нибудь пробовал этот метод, как сказал Шейли ?
Шива
0

Я не уверен, но это может решить вашу проблему:

Насколько я думаю, что-то могло помешать вашему eav_entity_storeстолу. Он содержит информацию о следующем инкрементном идентификаторе, т.е. используемом порядке. Возможно, какой-то модуль или код в вашей magento-системе изменили его.

Откройте эту таблицу и обновите столбец increment_last_id своим последним идентификатором заказа. Будьте осторожны, он содержит идентификаторы приращения других, такие как счет-фактура, отгрузка и т. Д. Чтобы быть уверенным, просто перейдите в eav_entity_typesтаблицу и посмотрите, что entity_type_idдля sales/order(столбец entity_model). В моем magento его 5. Так что теперь перейдите к eav_entity_storeтаблице и просто обновите increment_id для строки, чей номер entity_type_id5. Вы можете напрямую обновить ее через phpmyadmin или вы можете выполнить запрос как,

update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5; 

Обратите внимание, что 5 является entity_type_id в моем magento для заказа

Может быть много причин для вашей проблемы, но я думаю, что это может решить вашу проблему.

Прадип
источник
Спасибо .. но уже проверили таблицу и она имеет правильный идентификатор приращения
Декстер
какой ваш максимальный (не последний) идентификатор заказа в продажах администратора -> заказы? Поместите это значение в таблицу, которую я сказал .. разместите тестовый заказ и проверьте ..
Pradeep