Можно ли настроить Magento таким образом, чтобы несколько просмотров магазина на одном веб-сайте могли использовать один и тот жеincrement_id
диапазон номеров заказов ? И если да, то как?
Например, с настройкой мульти-магазина, как это в core_store
:
store_id code website_id group_id
0 admin 0 0
1 alpha 1 1
2 bravo 2 2
3 charlie 2 2
Теперь добавлен новый вид магазина delta
:
store_id code website_id group_id
4 delta 1 1
Предполагая, alpha
что последний идентификатор приращения ордера в настоящее время равен 1000123, как этого добиться:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
Тот же вопрос касается нескольких просмотров магазина, совместно использующих один и тот же increment_id
диапазон номеров счетов и / или разделяющих один и тот же диапазон increment_id
номеров creditmemo .
Поддерживает ли Magento это из коробки?
configuration
magento-1
multistore
Юрген Телен
источник
источник
Ответы:
Я полагаю, что это будет довольно сложно. Идентификаторы приращений хранятся в
eav_entity_store
таблице, и неудивительно, что в каждом магазине есть собственная запись, которая обновляется при создании заказа (и квоты, счета и т. Д.). Чтобы все хранилища использовали один и тот же инкрементатор, вам нужно как-то переписать эту логику, чтобы она использовала одну и ту же строку в БД. Какое влияние это может оказать на другие области сайта, следует рассмотреть еще кое-что.источник
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Вы можете переопределить модель заказов, отгрузок, счетов-фактур и кредитных нот, переписав класс «eav / entity_increment_numeric», предоставляя настраиваемую логику в вашей модели.
Взгляните на классы предков (Mage_Eav_Model_Entity_Increment_Numeric и Mage_Eav_Model_Entity_Increment_Abstract), чтобы понять, как обеспечить свою собственную логику.
Вы можете различать логику между различными объектами, проверив параметр $ entityTypeCode функции getNextId (), которую вы переопределите.
Другой (более инвазивный) способ заключается в том, чтобы задать разные модели приращения для каждого типа сущности путем перезаписи (с помощью сценария установки) значения столбца «increment_model» таблицы «eav_entity_type». Лично я предпочитаю решение "переписать", упомянутое выше.
Обратите внимание: инкрементные идентификаторы имеют ограничение уникальности в последних версиях Magento, поэтому вы не можете хранить один и тот же инкрементный идентификатор для двух разных объектов одного и того же типа. Другими словами, вы не можете иметь два разных счета с одинаковым инкрементным идентификатором.
Надеюсь, это поможет.
источник
getLastId()
вMage_Eav_Model_Entity_Increment_Numeric
или в любом другом классе или интерфейсе в иерархии. Кстати, это должен быть принятый ответ.Varien_Object
отMage_Eav_Model_Entity_Type
Копая глубже, я понял, что это
eav_entity_type.increment_per_store
может быть полезно.Это. Но только для случая, когда вы хотите все виды магазина (глобально, независимо от того, на каком веб-сайте они определены) вашей установки Magento имели одинаковый
increment_id
диапазон номеров заказов .Это не решает мою конкретную проблему, но, возможно, это полезно для некоторых других, так что здесь мы идем:
Чтобы активировать общий доступ к номерам вашего заказа, установите для
eav_entity_type.increment_per_store
объекта заказа значение0
,Это приводит к
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
использованиюstore_id = 0
при загрузкеeav_entity_store
записи объекта заказа независимо от того, к какому виду магазина он действительно принадлежит.Если такой записи не существует, Magento создает ее, используя
store_id
иincrement_prefix
of0
.Это должно работать для любого типа объекта с использованием
eav/entity_increment_numeric
модели, какorder
,invoice
,shipment
иcreditmemo
.Имейте в виду, что я не смог найти никакой официальной документации
increment_per_store
. И что в бэкэнде Magento нет опции, позволяющей вам это настроить.Это может означать, а может и не означать, что оно не используется официально.
Используйте на свой риск. Если ваши изменения причиняют ущерб, не вините меня. Вы были предупреждены ^^
источник
Это не поддерживается "из коробки". Я также хотел сделать это один раз, чтобы иметь второе представление хранилища для общего ресурса A / B Test с таким же increment_id от исходного хранилища.
Я пытался сопоставить эти 2 числа простым способом, когда
checkout_submit_all_after
его увольняли, но мне было очень неловко, поэтому я бросил его. Я предполагаю, что с большим количеством просмотров магазинов и большим трафиком это может привести к настоящей неразберихе, так что вам придется углубиться в логику Magentos.источник
Решение:
Различный диапазон номеров заказа / счета-фактуры / кредита и т. Д. ... довольно хорош для разных стран, что чаще всего означает на уровне группы магазинов.
Но иметь разные диапазоны номеров на уровне представления магазина - это плохо, если вы используете представления магазина для разных языков, что может быть сделано в 90% случаев.
К счастью, это не так сложно, как предлагается в этой теме:
Что мы собираемся сделать, это получить идентификатор представления магазина по умолчанию вместо использования идентификатора представления магазина, с которым вызывается метод . Мы делаем это путем разрешения группы хранилищ для текущего представления хранилища и извлечения идентификатора представления хранилища по умолчанию. Затем в каждом представлении магазина определенной группы магазинов используется один и тот же формат диапазона номеров (тот, который используется в представлении магазина по умолчанию).
Создайте этот класс:
Добавьте это переписать в config.xml вашего модуля:
Если у вас есть более хороший способ, без переписывания распространяйте знания. Веселиться. Не взламывайте ядро.
источник
Используйте на magento2 ... SELECT * FROM
sales_sequence_meta
Все строки sequence_table используются в одной и той же таблице приращений. Пример 'sequence_order_1' пример: UPDATE
sales_sequence_meta
SETsequence_table
= 'sequence_order_1'. где meta_id = ?? ()Примечание. Очистите все предыдущие строки, связанные с квотами и счетами, ИЛИ Используйте в самой высокой таблице sequence_value в этих таблицах (sequence_order_1, sequence_order_0, sequence_order_2)
источник