回答:
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は、すでに使用されているインクリメントIDを誤って設定しないように注意する必要があります。
より大きな増分がnext_increment
すでに使用されている場合は、3つのエンティティタイプすべての最後の増分数を同じに設定するだけです。
安全レバーについてはわかりませんが、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";
エンティティタイプコードを「invoice」または「shipping」に置き換えて、残りについても同じようにします。
デフォルトのMagento増分ではなく、増分IDにカスタム番号範囲またはフォーマットを使用する場合は、カスタム増分モデルを割り当てることもできます。
例えば:
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();
以前にすでに使用されていたインクリメントIDを返さないようにしてください!
注文番号を変更する最良の[magentoにとって最も安全な]方法は、前の注文番号ではなく次の注文番号を変更することです。これは、単純なデータベースクエリで実行できます。これらは私のサイトで使用したもので、ほぼ1年間問題なく動作しています。
注文:
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ストアの次の増分IDを変更します。注:Xを必要な次のIDに置き換えます。
機能する場合は、回答を受け入れます。
注文インクリメントIDとプレフィックス
すべてのストアで注文増分IDを変更する
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';