Интеграция 1С-Битрикс и 1С Предприятия УТ – о фильтрации импорта по сегментам номенклатуры

Недавно столкнулась с интересным и необычным вариантом организации номенклатурного учета в 1С Предприятии УТ. Необычным, но допустимым в системе и абсолютно корректным.

Предприятие – реализует одежду, которую заказывает непосредственно на фабрике производителя. Специфика документооборота с производителем такова, что товаром считается лекало, фасон платья или другой одежды, а материал, размер, цвет, принадлежность к коллекции – это все реквизиты характеристики (свойства торгового предложения).



Импортировать же товар в интернет-магазин было решено именно в разрезе коллекций. На стороне 1С Предприятия коллекции были реализованы, как сегменты номенклатуры. Сегмент номенклатуры в 1С УТ – это по сути результат работы отбора по номенклатуре, который возможен, как по реквизитам номенклатуры, так и по реквизитам характеристик. На рисунке ниже - пример содержимого сегмента, сформированного с отбором по реквизиту характеристики.



Модуль же обмена УТ, как стандартный, так и из битриксовского дополнения оказался не приспособленным к импорту в интернет-магазин товара, учтенного таким способом.



Фильтрация выгрузки по сегментам – предусмотрена в модуле импорта, но не учитывает того, что у сегмента бывает отбор по реквизиту характеристики. В оригинальном варианте модуля импорта (Управление торговлей, редакция 11.1 (11.1.9.70), версия модуля 4.0.5.2) при фильтрации по такому сегменту выбиралась та номенклатура, которая нужна, но выгружались все ее характеристики, а не только те, реквизиты которых соответствовали настройкам отбора сегмента.

Поэтому я решила кастомизировать битриксовский модуль обмена на стороне 1С.

Очевидным и самым простым вариантом решения данной задачи было бы исправление запроса на выборку номенклатуры с характеристиками в функции СформироватьВременныеТаблицыПоИнформацииОТоварахПакет. Но я посмотрела-посмотрела на этот километровый запрос, и поняла, что вклиниваться в него боюсь, тем более, что данный запрос битриксоиды видоизменяют с выходом новых обновлений версий УТ и модуля обмена, и поддерживать каждый раз его модификацию было бы для меня слишком трудоемко. (А вот если бы сами битриксоиды допилили его – было бы круто).

Поэтому я решила реализовать менее оптимальный, но простой в поддержке способ решения поставленной задачи - вклиниться в процедуру ВыгрузитьПредложения, в то место, где уже сформирована ТаблицаЗначений с предложениями, предназначенными для импорта на сайт и непосредственно перед импортом профильтровать эту таблицу по характеристикам сегмента.
Для начала я снова вычленила, по какому сегменту происходит фильтрация в настройках обмена.

ИспользуетсяОтборПоСегментуНоменклатуры = Ложь;
Отбор = КомпоновщикНастроек.Настройки.Отбор;
ПолеСегмент = Новый ПолеКомпоновкиДанных("СегментНоменклатуры" );

Для Каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = ПолеСегмент Тогда
Если ЭлементОтбора.Использование Тогда
СсылкаСегмент=ЭлементОтбора.ПравоеЗначение.Ссылка;
КодСегмента=ЭлементОтбора.ПравоеЗначение.Код;
НаименованиеСегмента=ЭлементОтбора.ПравоеЗначение.Наименование;
ИспользуетсяОтборПоСегментуНоменклатуры = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Затем я выбрала номенклатуру и характеристики сегмента во вспомогательную таблицу значений, воспользовавшись функцией из ядра УТ.

ТнзСегмента=СегментыСервер.ТаблицаЗначений(СсылкаСегмент);

После этого я нашла пересечение этих двух таблиц, воспользовавшись функцией от сюда>>

Спасибо 1С-нику Кириллову Роману (его можно найти на 1clancer.ru, и он там, кстати, №1) за консультацию по этому вопросу.

ТнзСегмента=СегментыСервер.ТаблицаЗначений(СсылкаСегмент);
КолонкиДляСравнения= Новый ТаблицаЗначений;
КолонкиДляСравнения.Колонки.Добавить("Колонки1" );
КолонкиДляСравнения.Колонки.Добавить("Колонки2" );
Стр=КолонкиДляСравнения.Добавить();
Стр.Колонки1="Номенклатура";
Стр.Колонки2="Номенклатура";
Стр=КолонкиДляСравнения.Добавить();
Стр.Колонки1="Характеристика";
Стр.Колонки2="Характеристика";
ТзнПредложений=СравнитьДанные(ТзнПредложений,ТнзСегмента,КолонкиДляСравнения,Ложь);
И импорт заработал так, как нужно было на данном проекте, кстати, он в такой модификации – абсолютно универсален для фильтрации по какому угодно сегменту.


0
Константин
03.03.2016 10:23:11
Интересная задачка, я с таким еще не сталкивался.
Ответить Ссылка 0
0
Ирина
03.03.2016 10:26:47
А почему модуль обмена УТ стандартный не приспособлен к импорту импорту в интернет-магазин товара, учтенного нужным способом? Я думала, что он относительно универсален...
Ответить Ссылка 0
0
Марина
03.03.2016 10:27:54
Читаю вот уже 5 статью из этого блога и понимаю, что нет не решаемых задач:)
Ответить Ссылка 0
0
Петров Антон
03.03.2016 10:28:56
Простое и хорошее решение...
Ответить Ссылка 0