Налаштування вивантаження додаткових реквізитів з 1С у 1С-Бітрікс
Додаткові реквізити номенклатури в 1С — це розширення картки товару: технічні характеристики, сертифікати, параметри застосування. На сайті вони стають фільтрами, табличними даними в картці, ключовими словами для пошуку. Налаштування їх коректної передачі та відображення займає значну частину робіт з інтеграції.
Типи додаткових реквізитів у 1С
У 1С:УТ 11 додаткові реквізити та відомості зберігаються в двох місцях:
Реквізити об'єкта (ДодатковіРеквізити) — зберігаються безпосередньо в елементі довідника. Вивантажуються при кожному обміні.
Відомості об'єкта (ДодатковіВідомості) — зберігаються в окремому регістрі відомостей, прив'язаному до об'єкта. Вивантажуються аналогічно, але потребують окремого увімкнення в налаштуваннях вузла.
Типи значень реквізитів:
- Рядок, Число, Дата, Булево
- Посилання на довідник (значення — GUID елемента)
- Рядок з варіантами (перерахування)
Останній тип — посилальний — створює найбільші проблеми при обміні (докладніше нижче).
Як реквізити передаються в XML
Додаткові реквізити потрапляють у XML всередині <Товар>:
<ЗначенняРеквізитів>
<ЗначенняРеквізиту>
<Найменування>Потужність</Найменування>
<Значення>2500</Значення>
</ЗначенняРеквізиту>
<ЗначенняРеквізиту>
<Найменування>ОдиницяПотужності</Найменування>
<Значення>Вт</Значення>
</ЗначенняРеквізиту>
<ЗначенняРеквізиту>
<Найменування>ГарантійнийСтрок</Найменування>
<Значення>24</Значення>
</ЗначенняРеквізиту>
</ЗначенняРеквізитів>
Бітрікс при імпорті створює властивості інфоблока з такими ж найменуваннями і заповнює їх значеннями.
Автоматично створювані властивості: проблема кодів
При першому імпорті Бітрікс створює властивості інфоблока з кодами виду CML2_ATTR_001, CML2_ATTR_002. Це нечитабельні машинні коди, з якими незручно працювати в шаблонах.
Правильна практика: перед першим реальним імпортом пройти цикл тестових імпортів на копії, після чого вручну перейменувати коди властивостей у читабельні (POWER_WATT, WARRANTY_MONTHS). Після цього при наступних імпортах коди вже не зміняться (Бітрікс шукає властивість за збігом найменування, а не коду).
Або — написати обробник OnIBlockPropertyAdd, який при створенні властивості через обмін задає правильний код на основі найменування (транслітерація):
AddEventHandler('iblock', 'OnIBlockPropertyAdd',
'setReadablePropertyCode');
function setReadablePropertyCode(&$arFields) {
if (empty($arFields['CODE'])) {
$arFields['CODE'] = CUtil::translit(
$arFields['NAME'],
'ru',
['change_case' => 'U', 'replace_space' => '_']
);
}
}
Посилальні реквізити: підміна GUID на значення
Якщо реквізит у 1С — посилання на довідник, у XML прийде GUID, а не текст:
<ЗначенняРеквізиту>
<Найменування>Виробник</Найменування>
<Значення>f3a2b1c0-1234-5678-abcd-ef0123456789</Значення>
</ЗначенняРеквізиту>
На сайті в картці товару буде показаний GUID замість «Bosch». Це потрібно виправити або:
-
На стороні 1С: перед формуванням XML підміняти GUID на рядкове значення (найменування елемента довідника). Це правильніше — не потрібна додаткова логіка на стороні Бітрікс.
-
На стороні Бітрікс: в обробнику імпорту зберігати таблицю маппінгу «GUID → значення» (формується з первинного обміну або окремого вивантаження довідників) і підставляти значення при записі властивості.
Множинні значення одного реквізиту
У 1С реквізит може мати кілька значень (якщо налаштований як «допускається кілька значень»). У XML вони передаються кількома тегами з однаковим найменуванням.
На стороні Бітрікс властивість має бути налаштована як «Множинне». Обробник імпорту має збирати всі значення в масив:
// При імпорті збираємо множинні значення
$multiValues = [];
foreach ($arXML['ADDITIONAL_REQUISITES'] as $req) {
if ($req['NAME'] === 'Застосовність') {
$multiValues[] = $req['VALUE'];
}
}
$arProps['APPLICABILITY'] = $multiValues;
Кейс: промисловий каталог з 60+ атрибутами
Завод насосного обладнання: кожен виріб описується 60–80 технічними параметрами (робочий тиск, температурний діапазон, матеріал корпусу, клас захисту тощо). У 1С всі вони зберігаються як додаткові реквізити.
При першому імпорті в Бітрікс створилося 78 властивостей інфоблока з нечитабельними кодами. Витратили день на перейменування кодів та налаштування типів (числові — як «Число», з одиницями виміру; рядкові — як «Список» для фільтра).
Після налаштування: компонент розумного фільтра Бітрікс автоматично пропонує фільтрацію по всіх числових та списочних властивостях. Покупець фільтрує насоси за тиском, температурою та матеріалом — без додаткової розробки.
Інкрементальне оновлення атрибутів (при зміні значень у 1С) — 4 хвилини на весь каталог з 2300 позицій.







