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

Комментариев нет :
Отправить комментарий