Очень многие считают, что Битрикс и 1С совместимы из коробки, и никакой дополнительной настройки для их совместной работы не требуется. Об этом нас также убеждает и производитель этих продуктов. Однако, на деле всё происходит далеко не так просто.
Как правило, разработка интернет-магазина начинается без чёткой структуры каталога, максимум имеется только список основных разделов и свойств. И будет просто прекрасно, если данная структура совпадет со структурой данных в 1С. Тогда можно будет обойтись минимальной настройкой Битрикс. В противном же случае, танцев с бубнами не избежать - либо придется переделывать каталог и типы свойств под структуру 1С, либо переделывать базу в 1С под нужную заказчику структуру в Битрикс, либо писать кастомные сценарии выгрузки, что влечёт очень большие трудозатраты.
В рамках данной статьи рассмотрим простейший вариант - когда структура каталога в 1С и в нашем сайте на Битрикс совпадают.
Прежде всего, нам будет нужно связаться со специалистом по 1С заказчика и получить от него архив с полной выгрузкой. Выглядит он примерно так:
Разберем структуру файлов в нём. В этом нам поможет официальная документация:
import.xml - самый важный файл для импорта. В нем может содержаться информация о структуре каталога, товарах, свойствах, типах цен, складах и единицах измерения. Случайные символы перед расширением .xml указываются по рекомендации Битрикс с целью безопасности при передаче данных.
В нашем примере база выгрузки довольно большая, и информация о свойствах товаров вынесена в отдельный файл в папке properties.
offers.xml - там хранятся торговые предложения и их свойства.
prices.xml - там находятся цены
rests.xml - информация об остатках на складах.
Примеры самих файлов можно посмотреть в документации Битрикс.
Перейдем к настройкам Битрикс.
Первым делом, нужно выставить отображение внешнего кода в свойствах инфоблоков для выставления соответствий ID в базе 1С и в базе Битрикс. Для этого в настройках модуля "Информационные блоки" ставим галочку "Показывать код загрузки из внешних источников" и сохраняем:
Далее корректируем параметры импорта в специальном разделе Магазин->Настройки->Интеграция с 1С:
Здесь можно все настройки оставить по умолчанию. Заслуживает внимания только поведение магазина с товарами, которых нет в выгрузке. Доступны варианты: Удалить, Деактивировать, Ничего не делать.
Далее уже можно проставлять соответствия ID в базе 1С и в базе сайта, чтобы выгрузка проходила в нужные инфоблоки.
Открываем первый файл import.xml и находим в нем ИД каталога товаров:
Это значение находится в самом начале файла. У нас оно такое: 325137da-52e4-4f2b-aeeb-7bd5c1d1ac7e.
Копируем значение, переходим в настройки инфоблока Каталог и вставляем это значение в поле "Внешний код":
Ищем в этом же файле import.xml сущности "ТипыЦен" и "ЕдиницыИзмерения":
Нужно будет аналогичным образом проставить соответствия в разделах админки Битрикс:
Магазин->Настройки->Цены->Типы цен и
Магазин->Настройки->Единицы измерения
Во втором случае поле Код ставится в соответствие.
Следующий этап - настройка свойств. У меня их настройки хранятся в файле properties/offers.xml, у вас может быть немного по-другому. Идем в меню Битрикс Магазин->Каталог->Свойства товаров и Магазин->Каталог->Свойства торговых предложений и выставляем соответствия ID:
Обязательно удостоверьтесь, что типы свойств совпадают в выгрузке и в Битрикс (список, строка, справочник). Если каких-то свойств в Битрикс нет, они создадутся самостоятельно при импорте.
Далее уже можно приступить к импорту. Рекомендуется перед этим создать в Битрикс пользователя с ограниченными правами, который будет иметь доступ только к модулю Торговый каталог.
Если у вас сайт уже в открытом доступе и есть возможность сразу же проверить работоспособность выгрузки, то настраиваем 1С на адрес http://сайт/bitrix/admin/1c_exchange.php, указываем в ней логин-пароль юзера с правами только на каталог, и запускаем процесс на стороне 1С.
Если же такой возможности нет, то есть альтернативный способ - провести импорт из файлов выгрузки вручную.
Для этого распаковываем архив в папку на сервере upload/1c_catalog и переходим под админом по следующему адресу в броузере: http://сайт/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml
Вместо import.xml нужно подставить имя своего файла.
У меня получился такой адрес: http://сайт/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import___41b266bc-f41c-4614-83c0-f924743da292.xml
Если Битрикс ругается таким образом:
Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента,
то переходим в командную строку PHP Битрикс и выполняем:
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y"); COption::SetOptionString("sale", "secure_1c_exchange", "N");
В процессе импорта каждого файла будет довольно много шагов. Каждый из них запускается перезагрузкой данной страницы. Примерный вид шага вот такой:
И так мы обновляем страницу до тех пор, пока не высветится надпись progress: success. В этом случае импорт будет завершен для этого файла, нужно будет импортировать другой.
В моем случае последовательность импорта такова:
import.xml
properties/offers.xml
goods/import.xml
goods/offers.xml
goods/prices.xml
goods/rests.xml
Процедура ручного импорта занимает довольно много времени, зато позволяет отстроить интеграцию без участия 1С.
По итогам, в Битрикс должен быть импортирован весь каталог из 1С вместе со свойствами и торговыми предложениями.