вторник, 11 октября 2016 г.

Интеграция Битрикс и 1С: с какого бока подойти к ней, если каталог исторически наполняется на стороне сайта.

Многие клиенты обращаются ко мне с такой проблемой: Есть интернет-магазин с довольно большой базой товаров, 1С УТ раньше не использовали, но теперь хотят начать использовать ее, чтобы вести складской учет и управлять ценами на номенклатуру. При этом описания товаров, картинки и прочие свойства хотят продолжать вести на сайте, так как там уже есть штат контент-менеджеров, которых на 1С пересаживать не удобно.

Раньше я убеждала клиентов в том, что каталог необходимо единоразово импортировать с сайта в 1С со всеми картинками и свойствами, на стороне 1С УТ причесать каталог, привести его в порядок при необходимости, и вдальнейшем вести каталог только на стороне 1С.

Сейчас я изменила свою точку зрения на эту проблему, и думаю, что все не так однозначно. Есть кейсы для которых использовать 1С УТ как единственный источник данных о номенклатуре, действительно, крайне неудобно. Это неудобно в частности для интернет-магазинов одежды, где для каждого торгового предложения существуют свои картинки. Да, на стороне 1С сейчас тоже можно добавлять картинки для характеристик товаров, но удобство интерфейса для контент-менеджера - страдает, не говоря уже о том, как проблематично становится при необходимости перезагрузить весь каталог с картинками из 1С на сайт на объемных базах.

Я нашла для себя решение задачи настройки интеграции интернет-магазинов товаров с торговыми предложениями и 1С УТ с возможностью вести картинки и описательные свойства товаров на стороне сайта с минимальными модификациями стандартного модуля обмена. Решение это не является единственным, но на мой взгляд оно самое простое:

1) На сайте назначаем (скриптом) всем разделам XML_ID равное ID_раздела, товарам XML_ID равное ID_товара,  а торговым предложениям XML_ID, равный ID_товара#ID_торгового_предложения.

2) Допиливаем экспорт каталога с сайта в 1С (на стороне Битрикс) так чтобы вместо XML_ID в 1С уходило ID торгового предложения (это проверенный рецепт: обратно из 1С XML_ID торговых предложений будут приходить в виде ID_товара#ID_торгового_предложения, поэтому если мы хотим когда либо повторно использовать помощник импорта товаров с сайта в 1С, надо в 1С отправлять просто ID предложения, а обратно ждать его через решеточку с ID товара).

3) На стороне 1С отключаем галочку "Контроль уникальности рабочего наименования характеристик и номенклатуры".

4) На стороне 1С создаем тип товара с индивидуальными характеристиками. Реквизиты для характеристик не заводим.

5) Если на стороне сайта есть такие разделы, где имеются одновременно и товары с предложениями (SKU), и простые товары, то на стороне 1С дописываем в процедуру СоздатьТовары следующий код:

    Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
|ГДЕ
| ХарактеристикиНоменклатуры.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец",Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
обном=Номенклатура.ПолучитьОбъект();
обном.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
//обном.ВидНоменклатуры=Объект.ВидНоменклатуры;
обном.Записать();
КонецЕсли;

Этот код вставляем после вызова функции СоздаватьХарактеристикиНоменклатуры

6) Проводим импорт номенклатуры с сайта в созданный нами на стороне 1С тип товаров при помощи помощника импорта.

7) Настраиваем на стороне 1С узел обмена для товаров, помечая к выгрузке все, кроме свойств и картинок. Не ставим флажок "Деактивировать товары, не вошедшие в выгрузку", ставим отбор по наличию остатка на складах.

8) Вводим документы поступления на склад для тех товаров, к-е будем пробовать выгружать обратно на сайт. Делаем импорт товаров из 1С в каталог на диске на каком-то маленьком разделе, выписываем внешние коды каталога, инфоблока торговых предложений, внешний код цены, складов, вписываем эти внешние коды в соответствующие поля на сайте. Следим за тем, чтобы названия складов на стороне 1С и на стороне сайта совпадали, а то 1С перезапишет их названия на стороне сайта.

9) На стороне сайта в настройках обмена ставим галочки "не импортировать верхний уровень группы товаров, если он единственный", "Не менять код (название) типа цены, если используется внешний код (XML_ID)".

10) Запускаем импорт товаров из 1С на сайт, если все сделали внимательно, все ляжет именно туда, куда нужно.

Такой способ настройки интеграции позволит клиентам:
- обновлять остатки и цены на стороне 1С УТ для старых товаров и торговых предложений, которые изначально были заведены на стороне Битрикс;
- заводить на стороне 1С новые товары, импортировать их на сайт и дозаполнять уже там, а впоследствии актуализировать их цены и остатки на стороне 1С;
- заводить новые товары на стороне сайта и отправлять их в 1С повторным запуском помощника импорта номенклатуры;

Комментариев нет: