add
This commit is contained in:
parent
f81c8d265b
commit
7733f6ff5d
BIN
public/skd/proizvolnie-otbory/1.png
Normal file
BIN
public/skd/proizvolnie-otbory/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
public/skd/proizvolnie-otbory/2.png
Normal file
BIN
public/skd/proizvolnie-otbory/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
BIN
public/skd/proizvolnie-otbory/3.png
Normal file
BIN
public/skd/proizvolnie-otbory/3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
public/skd/proizvolnie-otbory/4.png
Normal file
BIN
public/skd/proizvolnie-otbory/4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
public/skd/proizvolnie-otbory/5.png
Normal file
BIN
public/skd/proizvolnie-otbory/5.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 84 KiB |
BIN
public/skd/proizvolnie-otbory/6.gif
Normal file
BIN
public/skd/proizvolnie-otbory/6.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 851 KiB |
@ -0,0 +1,187 @@
|
||||
---
|
||||
title: Реализация произвольных отборов на форме
|
||||
slug: общие-скд-и-отчеты/реализация-произвольных-отборов-на-форме
|
||||
---
|
||||
|
||||
Для того, чтобы у пользователя была возомжность управлять выборкой с помощью `произвольных отборов` (например, для загрузки в табличную часть всей номенклатуры, отвечающей некоторым условиям) необходимо сделать следующее:
|
||||
|
||||
## Шаг 1. Создать схему компоновки данных
|
||||
|
||||
Макет типа `Схема компоновки данных` может распологаться в любом месте конфигурации. Главное, чтобы его можно было получить в коде.
|
||||
|
||||
В схеме компоновки данных определяем запрос любого вида (соединения, отборы и пр.)
|
||||

|
||||
|
||||
На вкладке `Настройки` определяем состав полей, которые будут выгружены в коллекцию значений (`таблицу` или `дерево`, в зависимости от настроенных группировок)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
На вкладке `Отбор` настраиваем те отборы, которые будут устанавливаться по умолчанию:
|
||||
|
||||

|
||||
|
||||
## Шаг 2. Настроить форму
|
||||
|
||||
Для того, чтобы у пользователя была возможность управлять настройками определенной схемы компоновки данных необходимо:
|
||||
1. Создать реквизит формы с типом `КомпоновщикНастроекКомпоновкиДанных` (в примере имя реквизита - `КомпоновщикНастроек`). Вывести из него элемент `Отбор` коллекции `НастройкиКомпоновкиДанных`
|
||||
|
||||

|
||||
|
||||
2. В обработчике `ПриСозданииНаСервере` формы загружаем настройки созданной ранее схемы в компоновщик настроек
|
||||
```bsl
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
// Получаем схему
|
||||
СхемаКомпоновкиДанных = Справочники.Контрагенты.ПолучитьМакет("ДанныеКонтрагентов");
|
||||
|
||||
// Помещаем в ВХ для извлечения настроек
|
||||
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
|
||||
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
|
||||
|
||||
// инициализируем реквизит формы с типом КомпоновщикНастроекКомпоновкиДанных
|
||||
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
|
||||
|
||||
// загружаем настройки из созданной схемы в реквизит формы
|
||||
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
3. В требуемый обработчик прописать выполнение нужной схемы компоновки данных с теми настройками, которые установит пользователь. Например, при изменении отборов компоновщика или при нажатии на кнопку.
|
||||
|
||||
```bsl
|
||||
&НаКлиенте
|
||||
Процедура КомпоновщикНастроекНастройкиОтборПриИзменении(Элемент)
|
||||
НайтиПоОтборамНаСервере();
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура НайтиПоОтборамНаСервере()
|
||||
|
||||
// получаем схему
|
||||
СхемаКомпоновкиДанных = Справочники.Контрагенты.ПолучитьМакет("ДанныеКонтрагентов");
|
||||
|
||||
// из реквизита формы получаем настройки, которые установил пользователь
|
||||
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
|
||||
|
||||
// Выполняем схему компоновки с нужными настройками
|
||||
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
|
||||
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
|
||||
Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
|
||||
|
||||
// Обязательно ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
|
||||
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
|
||||
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
|
||||
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
|
||||
|
||||
ТаблицаРезультат = Новый ТаблицаЗначений; // или дерево значений, в зависимости от настроек СКД
|
||||
|
||||
// Заполняем таблицу/дерево
|
||||
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
|
||||
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
|
||||
|
||||
// Обрабатываем
|
||||
Для Каждого Строка Из ТаблицаРезультат Цикл
|
||||
...
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||

|
||||
|
||||
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
|
||||
<summary style="font-weight: bold; cursor: pointer;">Весь модуль формы</summary>
|
||||
|
||||
```bsl
|
||||
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
СхемаКомпоновкиДанных = Справочники.Контрагенты.ПолучитьМакет("ДанныеКонтрагентов");
|
||||
|
||||
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
|
||||
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы);
|
||||
|
||||
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
|
||||
|
||||
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура КомпоновщикНастроекНастройкиОтборПриИзменении(Элемент)
|
||||
НайтиПоОтборамНаСервере();
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиКомандФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура НайтиПоОтборам(Команда)
|
||||
НайтиПоОтборамНаСервере();
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПодобратьИЗакрыть(Команда)
|
||||
|
||||
СписокВыбранных = Новый Массив;
|
||||
Для Каждого Строка Из ВыбранныеКонтрагенты Цикл
|
||||
СписокВыбранных.Добавить(Строка.Контрагент);
|
||||
КонецЦикла;
|
||||
|
||||
Закрыть(СписокВыбранных);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура НайтиПоОтборамНаСервере()
|
||||
|
||||
СхемаКомпоновкиДанных = Справочники.Контрагенты.ПолучитьМакет("ДанныеКонтрагентов");
|
||||
|
||||
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
|
||||
|
||||
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
|
||||
|
||||
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
|
||||
Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
|
||||
|
||||
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
|
||||
|
||||
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
|
||||
|
||||
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
|
||||
|
||||
ТаблицаРезультат = Новый ТаблицаЗначений;
|
||||
|
||||
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
|
||||
|
||||
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
|
||||
|
||||
ВыбранныеКонтрагенты.Очистить();
|
||||
Для Каждого Строка Из ТаблицаРезультат Цикл
|
||||
ВыбранныеКонтрагенты.Добавить().Контрагент = Строка.Ссылка;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
```
|
||||
|
||||
</details>
|
Loading…
x
Reference in New Issue
Block a user