This commit is contained in:
wakadakawaka 2025-07-31 00:00:45 +05:00
parent 5fec042cbc
commit a530729b4b
5 changed files with 197 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,74 @@
---
title: Подключение к подсистеме Настройка порядка элементов
slug: общие-бсп-стандартные-подсистемы-настройка-порядка-элементов/подключение-к-подсистеме-настройка-порядка-элементов
---
# Описание
Подсистема позволяет устанавливать пользовательский порядок элементов в динамических списках:
- Справочников
- Планов видов характеристик
- Планов видов расчета
![Изображение](/bsp-nastroika-poryadka-elementov/1.png)
## Подключение к подсистеме
Для подключения этой подсистемы нужно:
1. Создать в нужном объекте числовой реквизит `РеквизитДопУпорядочивания` *(Число(5,0))*. Установить для него свойство `Индексировать` в `Индексировать с доп. упорядочиванием`
2. Добавить объект в определяемый тип `ОбъектСНастраиваемымПорядком`
3. Создать форму списка, подключить к подсистеме `Подключаемые команды`
4. В динамическом списке настроить упорядочивание по реквизиту `РеквизитДопУпорядочивания`. Установить в свойствах элемента пользовательских настроек режим редактирвоания `Недоступный`
![Изображение](/bsp-nastroika-poryadka-elementov/2.png)
## Настройка данных выбора
Чтобы сохранить порядок элементов при выборе из выпадающего списка в поле ввода нужно:
1. Для поля ввода реквизита определить обработчик `АвтоПодбор`
```bsl
&НаКлиенте
Процедура СтатусАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПолучитьДанныеВыбора(Тип("СправочникСсылка.СтатусыЗаказовКлиента"), ПараметрыПолученияДанных);
КонецПроцедуры
```
2. В модуле менеджера спраовчника переопределяем
```bsl
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
СтрокаПоиска = Параметры.СтрокаПоиска;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 5
| СтатусыЗаказовКлиента.Ссылка КАК Ссылка,
| СтатусыЗаказовКлиента.Представление КАК Представление
|ИЗ
| Справочник.СтатусыЗаказовКлиента КАК СтатусыЗаказовКлиента
|ГДЕ
| НЕ СтатусыЗаказовКлиента.ПометкаУдаления И %%%ТекстДопУсловия%%%
|
|УПОРЯДОЧИТЬ ПО
| СтатусыЗаказовКлиента.РеквизитДопУпорядочивания";
ПодстрокаЗамены = "ИСТИНА";
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
ПодстрокаЗамены = "ВРЕГ(СтатусыЗаказовКлиента.Наименование) ПОДОБНО """ + ВРег(СтрокаПоиска) + "%""";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%%%ТекстДопУсловия%%%", ПодстрокаЗамены);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Представление);
КонецЦикла;
КонецПроцедуры
```
> Если после всех манипуляций что-то не работает - ПЕРЕЗАПУСТИ КОНФИГУРАТОР

View File

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

View File

@ -2,6 +2,9 @@
title: Подключение к подсистеме Подключаемые команды title: Подключение к подсистеме Подключаемые команды
slug: общие-бсп-стандартные-подсистемы-подключаемые-команды/подключение-к-подсистеме-подключаемые-команды slug: общие-бсп-стандартные-подсистемы-подключаемые-команды/подключение-к-подсистеме-подключаемые-команды
--- ---
> Чтобы форма открывалась быстрее, нужно добавить реквизит формы `ПараметрыПодключаемыхКоманд` с типом `Произвольный`
## Форма объекта ## Форма объекта
```bsl ```bsl
@ -62,6 +65,9 @@ slug: общие-бсп-стандартные-подсистемы-подклю
``` ```
## Форма списка ## Форма списка
> ВАЖНО. Для реквизита `Ссылка` динамического списка нужно установить флаг `Использовать всегда`
```bsl ```bsl
&НаСервере &НаСервере