Порядок групп для сайта в УТ 11.4
Клиент попросил сделать, чтобы можно было настраивать порядок групп для сайта.
Создал отдельную форму списка номенклатуры.
Добавил в нее кнопки смещения групп. Реализовал простой алгоритм смещения групп. Пришлось повозиться с порядком в списке и отбором.
Добавил кнопку «Элементы», которая показывает элементы.
Код получился такой:
&НаКлиенте Процедура ГруппаВниз(Команда) ПереместитьГруппу(1); КонецПроцедуры &НаКлиенте Процедура ГруппаВверх(Команда) ПереместитьГруппу(-1); КонецПроцедуры &НаКлиенте Процедура ПереместитьГруппу(Смещение) ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; ОбновитьГруппы(ТекущиеДанные.Ссылка, Смещение); Элементы.Список.Обновить(); //ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Список); КонецПроцедуры Процедура ОбновитьГруппы(Ссылка, Смещение) Если НЕ Ссылка.ЭтоГруппа Тогда Возврат; КонецЕсли; З = Новый Запрос( "ВЫБРАТЬ | Т.Ссылка КАК Ссылка, | Т.дор_ПорядокГрупп КАК дор_ПорядокГрупп |ИЗ | Справочник.Номенклатура КАК Т |ГДЕ | Т.Родитель = &Родитель | И Т.ЭтоГруппа | |УПОРЯДОЧИТЬ ПО | дор_ПорядокГрупп, | Т.Наименование"); З.УстановитьПараметр("Родитель", Ссылка.Родитель); ТЗ = З.Выполнить().Выгрузить(); ИскСтрока = ТЗ.Найти(Ссылка, "Ссылка"); Попытка ТЗ.Сдвинуть(ИскСтрока, Смещение); Исключение ВОзврат; КонецПопытки; Порядок = 0; Для Каждого Строка ИЗ ТЗ Цикл Порядок = Порядок + 1; Если Строка.дор_ПорядокГрупп <> Порядок Тогда О = Строка.Ссылка.ПолучитьОбъект(); О.дор_ПорядокГрупп = Порядок; О.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ВыводитьЭлементы(Команда) Элементы.дор_ФормаВыводитьЭлементы.Пометка = Не Элементы.дор_ФормаВыводитьЭлементы.Пометка; ОбновитьФильтрыЭлемент(); КонецПроцедуры Процедура ОбновитьФильтрыЭлемент() Экспорт //Осипов 2020-03-13 добавил отбор ЭлементОтбора = ПолучитьОтборДинамическогоСписка(Список.Отбор, "ЭтоГруппа"); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); ЭлементОтбора.ПравоеЗначение = Истина; ЭлементОтбора.Использование = НЕ Элементы.дор_ФормаВыводитьЭлементы.Пометка; КонецПроцедуры Функция ПолучитьОтборДинамическогоСписка(Отбор, Представление) Экспорт Для Каждого ЭлементОтбора ИЗ Отбор.Элементы Цикл Если ЭлементОтбора.Представление = Представление Тогда Возврат ЭлементОтбора; КонецЕсли; КонецЦикла; ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.Представление = Представление; ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = ложь; Возврат ЭлементОтбора; КонецФункции &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбновитьФильтрыЭлемент(); КонецПроцедуры &НаСервере Процедура НастроитьПорядок() Порядок = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Список.Порядок.ИдентификаторПользовательскойНастройки); Порядок.Элементы.Очистить(); НовыйПорядок = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); НовыйПорядок.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; НовыйПорядок.Поле = Новый ПолеКомпоновкиДанных("дор_ПорядокГрупп"); НовыйПорядок.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; НовыйПорядок.Использование = Истина; НовыйПорядок = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); НовыйПорядок.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; НовыйПорядок.Поле = Новый ПолеКомпоновкиДанных("Наименование"); НовыйПорядок.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; НовыйПорядок.Использование = Истина; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) НастроитьПорядок(); КонецПроцедуры
Код настройки порядка перенес в ПриОткрытии, чтобы он замещал настройки пользователя.
Можно было бы использовать порядок с шагом 100 и как-то размещать посередине новую позицию, но это вышло бы за рамки бюджета, так что нумерую группы последовательно, перезаписывая порядок, если он не соответствует заданному.
Теперь этот реквизит можно передать на сайт и по нему программист сайта сделает упорядочивание.
Среда: УТ 11.4.13.46. Объем 2 час.
Свежие комментарии