Ответы:
Если я хочу продолжить использовать тип приращения Magento по умолчанию и просто хочу изменить следующий номер приращения, это то, что я использую.
Обязательно используйте только номера приращений, которые больше уже используемых!
SET @next_increment='310000000';
SELECT @entity_types:=GROUP_CONCAT(`entity_type_id`) FROM `eav_entity_type`
WHERE `entity_type_code` IN ('order', 'invoice', 'shipment');
SELECT @new_last_increment:=GREATEST((@next_increment -1),
(SELECT MAX(`increment_last_id`) FROM `eav_entity_store`
WHERE FIND_IN_SET(`entity_type_id`, @entity_types)));
UPDATE `eav_entity_store` SET `increment_last_id`=@new_last_increment
WHERE FIND_IN_SET(`entity_type_id`, @entity_types);
Этот SQL должен позаботиться о том, чтобы случайно не установить идентификатор приращения, который уже использовался.
Если больший прирост, чем next_increment
уже был использован, он просто устанавливает последний номер приращения для всех трех типов сущностей одинаковым.
Не уверен насчет рычага безопасности, но я делаю это, изменяя значения в DB напрямую:
UPDATE `eav_entity_store` s
INNER JOIN `eav_entity_type` t ON t.`entity_type_id` = s.`entity_type_id`
SET s.`increment_last_id` = 'your_increment_here'
WHERE t.entity_type_code = "order";
Замените код типа объекта «счет-фактура» или «доставка», чтобы сделать то же самое для остальных.
Если вы хотите использовать пользовательские диапазоны номеров или форматы для идентификаторов приращения вместо приращений Magento по умолчанию, вы также можете назначить пользовательскую модель приращения.
Например:
class My_Shop_Model_Entity_Increment_Erp
extends Mage_Eav_Model_Entity_Increment_Abstract
{
public function getNextId()
{
$last = $this->getLastId();
$entity = $this->getEntityTypeId();
$store = $this->getStoreId()
$next = Mage::helper('my_shop/api')->getNextIncrementFromErp($last, $entity, $store);
// If you want to apply pad char and length, otherwise simply return $next
return $this->format($next);
}
}
Затем обновите модель приращения для сущностей в сценарии установки:
$installer = Mage::getModel('eav/entity_setup', 'core_setup');
$installer->startSetup();
$installer->updateEntityType('order', 'increment_model', 'my_shop/entity_increment_erp');
$installer->updateEntityType('invoice', 'increment_model', 'my_shop/entity_increment_erp');
$installer->updateEntityType('shipment', 'increment_model', 'my_shop/entity_increment_erp');
$installer->endSetup();
Не возвращайте идентификаторы приращения, которые уже использовались ранее!
Лучший [самый безопасный для magento] способ изменить номер заказа - это изменить номера следующего заказа, а не предыдущие. Это можно сделать с помощью простого запроса к базе данных. Это те, которые я использовал на своем сайте, и он работает без проблем уже почти год.
Порядок:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='order';
Выставленный счет:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='invoice';
Пересылка:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='shipment';
Эти запросы изменят следующие идентификаторы для вашего магазина magento. ПРИМЕЧАНИЕ. Замените X следующим идентификатором, который вы хотите.
Примите ответ, если он работает.
Идентификатор приращения заказа и префикс
Измените идентификатор приращения заказа во всех магазинах
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='order';
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='XXXXXXXXXX'
WHERE eav_entity_type.entity_type_code='invoice';