Интеграция 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=»Характеристика»;
ТзнПредложений=СравнитьДанные(ТзнПредложений,ТнзСегмента,КолонкиДляСравнения,Ложь);

И импорт заработал так, как нужно было на данном проекте, кстати, он в такой модификации – абсолютно универсален для фильтрации по какому угодно сегменту.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *