При разработке периодически возникает потребность настроить средствами СКД нужный отбор/сортировку для промежуточных данных. К примеру, была обработка, которая для сотрудников Call-центра собирала огромный список клиентов к обзвону по разным направлениям и спецификам. Для каждого сотрудника Call-центра был сложный отбор - кто кого обзванивает. При решении данной задачи пришлось реализовывать форму отбора с различными полями и постоянно «навешивать» что-то новое, когда условия отбора менялись. А для похожей задачи, пришлось создавать уже другую форму отбора для новых потребностей. А хотелось одной сущности, куда можно послать данные, сформировать нужный отбор/сортировку (по возможности сохранить, чтобы не выбирать пять раз одно и тоже) и вернуть результат для дальнейшей обработки (вывода пользователю в виде отчета или чего-то еще).
Дополнительная обработка «Отбор и сортировка средствами СКД»
Обработка «Отбор и сортировка средствами СКД» предоставляет следующие возможности:
-
Для любых переданных данных (посредством запроса или таблицы значений) установка отбора/сортировки средствами системы компоновки данных;
-
Сохранения вариантов отбора/сортировки.
Рассмотрим принцип работы дополнительной обработки. В основную форму обработки передаются данные либо посредством таблицы значений (адрес временного хранилища, куда помещена данная таблица), либо текст и массив параметров запроса. По переданным данным динамически формируется схема компоновки данных, на базе которой в основной форме дополнительной обработки и предоставляется возможность установки различного рода отборов и сортировок. После нажатия на кнопку «ОК» вышеописанной формы обработки, результат применяемых отборов/сортировок в виде таблицы значений (адрес временного хранилища, куда помещена данная таблица) передается обратно в источник, который вызвал форму «Отбор и сортировка средствами СКД».
В основной форме обработки «Отбор и сортировка средствами СКД» для работы с отборами и сортировкой используется поле «Настройка СКД». Результат установленных отборов/сортировок показывается на вкладке «Таблица результата» (данные этой таблицы передаются в источник, который вызвал форму «Отбор и сортировка средствами СКД»).

Для установки интересующих отборов и сортировок следует кликнуть в поле «Настройка СКД» по значку с изображением лупы.

В открывшемся форме «Настройка СКД» необходимо указать интересующие отборы/сортировки и нажать на кнопку «Применить».


После чего, представление поля «Настройка СКД» и данные таблицы результата автоматически измениться согласно выбранным отборам и сортировкам. При необходимости можно очистить указанные отборы, нажав на кнопку с изображением крестика в поле «Настройка СКД».

Выбранную настройку СКД возможно сохранить в вариант настройки. Для этого используется кнопка с изображением дискеты напротив поля «Настройка СКД».

При нажатии на вышеописанную кнопку система предложит пользователю указать имя варианта настройки для сохранения и после щелчка по кнопке «ОК» выбранная настройка СКД под указанным именем для текущего пользователя будет успешно сохранена.

Таким образом, пользователю представляется возможность сохранять различные варианты отборов/сортировок, которыми он может оперировать, путем выбора того или иного варианта. Для этого в поле «Настройка СКД» используется кнопка с изображением троеточия.

По щелчку на вышеописанной кнопке открываться форма выбора сохраненных вариантов настроек. Для загрузки интересующего варианта настройки следует щелкнуть по нему и нажать на кнопку «Выбрать» или использовать двойной клик по строке с нужным вариантом настройки. Удалить заведенный вариант можно путем выбора интересующей строки варианта настройки и щелчка по кнопке «Удалить».

Для передачи результирующих данных, согласно установленным отборам/сортировкам, в основной форме обработки «Отбор и сортировка средствами СКД» следует нажать на кнопку «ОК».

Для быстрого встраивания вышеописанной обработки добавлена форма отладки, в которой реализованы процедуры передачи таблица значений, текста/параметров запроса и обработка получения результирующей таблицы.


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