Несколько баз и организаций - разведение заказов при обмене
Разводим заказы между несколькими учётными базами и организациями, чтобы каждая забирала только свои документы.
Решение
Заводим отдельного пользователя обмена на каждую базу:
$user = new CUser();$user->Add([ 'LOGIN' => 'exchange_ut', // вторая база - второй пользователь 'PASSWORD' => $password, 'CONFIRM_PASSWORD' => $password, 'EMAIL' => 'exchange_ut@example.com', 'GROUP_ID' => [$exchangeGroupId], 'ACTIVE' => 'Y',]);Разные учётные записи разводят обмены в журнале и позволяют отключить один из них, не трогая второй. Общий пользователь на все базы превращает разбор любого сбоя в гадание.
Отмечаем организацию в самом заказе:
use Bitrix\Sale\Internals\OrderPropsTable;
OrderPropsTable::add([ 'PERSON_TYPE_ID' => 1, 'NAME' => 'Организация-исполнитель', 'TYPE' => 'ENUM', 'CODE' => 'COMPANY', 'UTIL' => 'Y', // служебное: покупателю показывать не нужно]);Признак организации живёт свойством заказа и уезжает вместе с ним. Учётная система разбирает документ и понимает, к какой организации он относится, без дополнительных договорённостей.
Настраиваем отбор заказов на стороне каждой базы:
// признак ставится при оформлении: по разделу каталога, складу или сайту$order->getPropertyCollection()->getItemByOrderPropertyCode('COMPANY') ->setValue($companyCode);$order->save();Отбор по этому свойству настраивают в узле обмена каждой базы. Без отбора все базы забирают все заказы, и один и тот же документ появляется в трёх местах.
Разделяем заказы по складам отгрузки:
$shipment = $order->getShipmentCollection()->getNotSystemItems()->current();foreach ($shipment->getShipmentItemCollection() as $item) { // склад отгрузки хранится у позиции отгрузки, а не у заказа целиком printf("позиция=%s склад=%s\n", $item->getBasketItem()->getProductId(), $shipment->getStoreId());}Склад отгрузки определяет исполнителя точнее, чем организация. На магазинах с самовывозом из разных точек именно он и становится признаком разделения.
Два сайта в одной базе - зеркальная задача. Там разводить нужно уже не заказы, а сайты: у каждого свой узел обмена и свой префикс номеров, иначе документы с одинаковыми номерами перетирают друг друга.
Схему разделения выбирают по тому, что реально различает заказы. Организация подходит там, где юрлица разные, склад - там, где отгружают из разных точек, узел обмена - там, где базы вообще не связаны между собой. Смешивать два признака в одном отборе не стоит: разбирать такую настройку через год будет некому.
Общий каталог при нескольких базах требует одного источника. Каталог ведут в одной базе, остальные только принимают заказы, иначе внешние коды товаров разъезжаются и заказы приезжают с неизвестными позициями.
Типичные проблемы
Один заказ появился в двух базах.
В узлах обмена не настроен отбор. Без него каждая база забирает все доступные документы.
Заказ уехал не в ту организацию.
Признак организации не проставлен при оформлении. Пустое свойство отбор не различает.
Заказы двух сайтов перепутались.
Совпали номера заказов. Каждому сайту задают свой префикс нумерации или разводят их по узлам.
В заказе позиции с неизвестными кодами.
Каталог ведётся в нескольких базах сразу. Внешние коды товаров разъехались между ними.
Обмен второй базы отключает первую.
Обе работают под одним пользователем и мешают друг другу в служебных данных обмена.
Частые вопросы
Можно ли обойтись одним узлом на две организации?
Только если обе живут в одной базе: тогда организация - это поле документа. Разные базы всегда требуют разных узлов.
Как задать префикс номера заказа для второго сайта?
Настройкой нумерации в модуле продаж: у каждого сайта свой шаблон номера. Это дешевле, чем разбирать пересечения потом.
Что делать, если товар продают обе организации?
Каталог остаётся общим, а разделение идёт на уровне заказа. Дублировать товары под каждую организацию не нужно.
Как проверить настройку до запуска?
Тестовым заказом с каждым значением признака: он должен появиться ровно в одной базе. Проверяют до того, как пойдут реальные продажи.
Смежное
- Обмен заказами с 1С - оглавление подтемы
- Обмен заказами с 1С: выгрузка на сайт и возврат статусов - устройство обмена целиком
- Настройка обмена с 1С: точка обмена, доступ, порядок шагов - узлы и доступы
- Обмен с 1С и HTTP - устройство интеграций целиком
- Обмен каталогом с несколькими сайтами и конфигурациями - то же разведение для каталога