Налаштування двосторонньої синхронізації 1С і 1С-Бітрікс
Двостороння синхронізація — технічно найскладніша схема обміну: зміни в будь-якій із систем повинні потрапити в іншу без втрати даних і без конфліктів версій. Стандартний CommerceML частково покриває це завдання (каталог із 1С + замовлення в 1С), але повноцінний двосторонній обмін вимагає чіткого визначення правил пріоритету.
Правила пріоритету — фундамент двостороннього обміну
До початку розробки відповісти на питання:
| Поле | Майстер-система | Обґрунтування |
|---|---|---|
| Ціна | 1С | Фінансовий облік у 1С |
| Залишки | 1С | Складський облік у 1С |
| Опис товару | Сайт | SEO-контент пишеться на сайті |
| Фото товару | Сайт | Фотографії завантажуються в медіатеку сайту |
| Статус замовлення | 1С | Замовлення виконується в 1С |
| Адреса доставки | Сайт | Покупець вводить на сайті |
| Реквізити покупця | 1С | Юридично значимі дані в 1С |
Порушення цих правил призводить до «мерехтіння» даних: 1С перезаписує опис → редактор виправляє → 1С знову перезаписує.
Реалізація через обробники подій
На стороні сайту — контроль полів при імпорті з 1С:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'iblock',
'OnIBlockElementBeforeUpdate',
function(\Bitrix\Main\Event $event) {
$fields = $event->getParameter('fields');
$elementId = $event->getParameter('id');
// Отримати список захищених полів для цього елемента
$protected = getProtectedFields($elementId);
foreach ($protected as $fieldCode) {
unset($fields[$fieldCode]);
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
['fields' => $fields]
);
}
);
Виявлення конфліктів
Конфлікт версій виникає, коли одне поле змінилося в обох системах між сеансами обміну. Виявлення через timestamp останньої зміни:
// Зберігати в доп. полі елемента час останнього оновлення з сайту
$lastSiteUpdate = $element['UF_LAST_SITE_UPDATE']; // timestamp
$lastExchangeUpdate = $element['UF_LAST_EXCHANGE_UPDATE']; // timestamp із 1С
if ($lastSiteUpdate > $lastExchangeUpdate) {
// Поле змінювалося на сайті після останнього обміну — не перезаписувати
}
Кейс: двостороння синхронізація для дистриб'ютора
Компанія-дистриб'ютор, 15 000 SKU. 1С веде ціни та залишки, сайт — описи та SEO. Двічі на рік — переоцінка в 1С: змінюються ціни на 80% асортименту. До налаштування двостороннього обміну при переоцінці ціни оновлювалися, але одночасно перезаписувалися SEO-описи, написані копірайтерами.
Рішення: поле DETAIL_TEXT внесено до «захищеного списку» через користувацьку властивість UF_PROTECT_DESCRIPTION. При обміні обробник перевіряє прапор і пропускає перезапис опису, але застосовує оновлення ціни. Після впровадження — жодного випадку втрати SEO-контенту за 8 місяців експлуатації.
Синхронізація зображень
Зображення — окрема складність у двосторонньому обміні. Якщо 1С передає зображення через CommerceML (<Картинки>), а сайт має додаткову галерею з ретушованими фото:
- Основне зображення (
PREVIEW_PICTURE) — захистити, якщо є прапор «оброблено фотографом» - Додаткові зображення з 1С — додавати, але не видаляти фото з сайту
Терміни налаштування
| Завдання | Термін |
|---|---|
| Двосторонній обмін із правилами пріоритету | 2–4 дні |
| + виявлення конфліктів версій | +1–2 дні |
| + двостороння синхронізація користувачів | +1–2 дні |







