Создание множественного дополнительного реквизита. Управление торговлей 11
Создание механизма множественного дополнительного реквизита для выгрузки в битрикс.
- Описание
- Подробнее
Описание
Здравствуйте, уважаемые читатели!
Хочу поделиться своей реализацией множественного выбора дополнительного реквизита в Управлении торговлей 11 (проверено на 11.4.1.261) для последующей выгрузки его в интернет-магазин под управлением 1С битрикс. Для чего это потребовалось? В определенный момент менеджер интернет-магазина мне сказал: хочу увидеть весь ассортимент выбранного товара (условно назовем его Товар№1) красного, синего и зеленого цветов, как?. Сразу оговорюсь, что по ряду внутренних причин характеристики мы не используем, возможно, с ними будет совсем другая история, но поскольку данный вопрос возникает периодически, я решил написать эту статью. Так вот, в УТ цвет это у нас дополнительный реквизит и соответственно он может принимать только одно значение. На сайте это выглядит как выбор из списка, а требуется чтобы можно было отмечать галочкой несколько значений.
з.ы. это моя первая публикация (не только на ИС, но и вообще), не судите строго 🙂
Итак, начнем. Весь процесс доработки можно разделить на 3 этапа:
- Доработка механизма создания и вывода на форму дополнительных реквизитов.
- Доработка xsd схемы.
- Доработка выгрузки на сайт.
1. Доработка механизма создания и вывода на форму дополнительных реквизитов.
Перед выводом доп. реквизитов на форму создается таблица значений содержащая нужные нам реквизиты и их значения (далее будем называть их свойствами, по скольку везде в коде они так и именуются). Но она содержит только уникальные свойства и каждое представлено одной строкой. Поэтому необходимо позаботиться о копировании нашего свойства.
Чтобы получать ссылку на нужный элемент ПВХ, я добавил функцию в модуль УправлениеСвойствамиСлужебный
Функция ПолучитьУИДМножественногоСвойства() Экспорт
Возврат "859484ef-7e0a-11e7-8111-3863bb43122b";
КонецФункциивозвращающую уникальный идентификатор. Затем, в этом же модуле, находим функцию ЗначенияСвойств, которая и формирует вышеописанную таблицу дополнительных реквизитов для вывода на форму. В самом ее конце есть цикл, который выглядит вот так:

Перед ним добавим следующий код:
лУИД = Новый УникальныйИдентификатор(ПолучитьУИДМножественногоСвойства());
МножественноеСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(лУИД);
ЭтоПервый = Истина;А в теле цикла будем отлавливать наше свойство следующим образом:
Если Строка.Свойство = МножественноеСвойство Тогда
Если ЭтоПервый Тогда
ЭтоПервый = Ложь;
Иначе
фКэшОписания = ОписаниеСвойства;
ОписаниеСвойства = ОписаниеСвойств.Добавить();
ЗаполнитьЗначенияСвойств(ОписаниеСвойства, фКэшОписания);
КонецЕсли;
КонецЕсли;В итоге должна получится следующая картина:

После этого переходим к созданию элементов на форме. Тут логика следующая, каждый дополнительный реквизит в своем наименовании имеет уникальный идентификатор и тем самым обеспечивается уникальность (простите за тавтологию) имен элементов формы. Поэтому нам необходимо пронумеровать наш реквизит в момент создания. За это отвечает процедура ЗаполнитьДополнительныеРеквизитыВФорме общего модуля УправлениеСвойствами.
Находим в ней строку
Для каждого ОписаниеСвойства Из ОписаниеСвойств ЦиклПеред началом этого цикла вставим счетчик, например:
СчСвойств = 1;А в теле цикла, после строки
ОписаниеСвойства.ИмяУникальнаяЧасть = ...добавим наш код:
Если СтрНайти(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор()), УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) > 0 Тогда
ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть +"_"+ Строка(СчСвойств);
СчСвойств = СчСвойств + 1;
КонецЕсли;Получается такая картина:

Дальше, чтобы не заморачиваться с формой при обновлении, добавляем ее в расширение. Добавляем событие ПриСозданииНаСервере с типом вызова "После", в нем создаем кнопку для копирования и заполним технические реквизиты. На форму потребуется добавить 2 реквизита:
1. МножВыборИмя — тип строка, хранит имя дополнительного реквизита без индекса
2. СчСвойств — тип число, хранит текущий индекс дополнительного реквизита.
