Отбор в отчете по значению ячейки (как в списке документов, к примеру)

22.12.15

Разработка - СКД

В данной статье описано, как реализовать отбор в отчете по значению в выделенной ячейке. Такой вариант отбора очень удобен, так как уменьшает время на установление отбора стандартными способами. Данное решение было реализовано в обычном приложении, отчет СКД.

Принцип данного решения довольно прост. Создается две кнопки: первая – отбор по значению колонки, вторая – сброс всех отборов. При нажатии на кнопку «Отбор по значению в колонке» (Рисунок 1) выполняется код, в котором сначала определяется номер расшифровки ячейки, потом по этому номеру находится имя отбора и значение отбора, затем элементы отбора обходятся в цикле, где устанавливается соответственный отбор и перезапускается отчет.

Для того, чтобы пользователь видел, нажимая на ячейки отчета, по значению какой колонки у него установлен отбор (Рисунок 2-3), используется стандартная процедура «ПриАктивизацииОбласти», в которой проверяется, установлен ли по данной колонке отбор, и если он установлен, то кнопка «Отбор по значению в колонке» отображается нажатой. Повторное нажатие снимает отбор и перезапускает отчет.

Для сброса всех отборов используется кнопка «Сброс отборов»(Рисунок 4), при нажатии которой элементы отбора обходятся в цикле, и для каждого элемента отбора параметр «Использование» устанавливается в значение «Ложь».

Ниже предоставлен код с краткими комментариями.

 

Модуль формы

 

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

 Процедура ДействияФормыОтборПоКолонке(Кнопка)

            ОбрабатываемаяОбласть = ЭлементыФормы.Результат.Область(ЭлементыФормы.Результат.ТекущаяОбласть.Имя);

            Расшифровка = ОбрабатываемаяОбласть.Расшифровка; //в этой строке получаем номер расшифровки выделенной области

            Поле = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];

            Отбор = Поле.Значение; //значение отбора

                 

            //В данном цикле построчно обходим все строки отбора, находим нужную нам строку и устанавливаем в ней отбор(при повторном нажатии этот отбор сбрасывается)

            Для Каждого ИмяОтбор Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

                           Если Строка(ИмяОтбор.ЛевоеЗначение) = Поле.Поле Тогда

                                           ИмяОтбор.Использование = Не ИмяОтбор.Использование;

                                           ИмяОтбор.ПравоеЗначение = Отбор;

                                           ИмяОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

                                           Прервать;

                           КонецЕсли;     

            КонецЦикла;

            Кнопка.Пометка = Не Кнопка.Пометка;

            ПриКомпоновкеРезультата(ЭлементыФормы.Результат, ДанныеРасшифровки, );

 КонецПроцедуры

 

 //Данная процедура(стандартная), при активизации области проверяет установлен ли по ней отбор и если установлен то устанавливает кнопку отбора в позицию ИСТИНА 

 Процедура РезультатПриАктивизацииОбласти(Элемент)

                 

                 //Через попытку сделано, что бы не выскакивала ошибка при нажатии на область у которой нет расшифровки

                 Попытка

                           ЭлементыФормы.ДействияФормы.Кнопки.ОтборПоКолонке.Пометка = Ложь;

                           ОбрабатываемаяОбласть = ЭлементыФормы.Результат.Область(ЭлементыФормы.Результат.ТекущаяОбласть.Имя);

                           Расшифровка = ОбрабатываемаяОбласть.Расшифровка;

                                

                           Если Расшифровка <> Неопределено Тогда

                                           Поле = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];

                                           Отбор = Поле.Значение;

                                           Для Каждого ИмяОтбор Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

                                                           Если Строка(ИмяОтбор.ЛевоеЗначение) = Поле.Поле Тогда

                                                                          Если ИмяОтбор.Использование Тогда

                                                                                          ЭлементыФормы.ДействияФормы.Кнопки.ОтборПоКолонке.Пометка = Истина;

                                                                          Иначе

                                                                                          Прервать;

                                                                          КонецЕсли;

                                                           КонецЕсли;     

                                           КонецЦикла; 

                           КонецЕсли;

            Исключение

            КонецПопытки;

                 

 КонецПроцедуры

 

 //Данная процедура сбрасывает все отборы и перезапускает отчет

 Процедура ДействияФормыСбросОтборов(Кнопка)

                 Для Каждого ИмяОтбор Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

                                ИмяОтбор.Использование = Ложь;  

                 КонецЦикла;

                 ПриКомпоновкеРезультата(ЭлементыФормы.Результат, ДанныеРасшифровки, );

 КонецПроцедуры

 

Единственное, что я не смог сделать – это чтобы при перезапуске отчета, после нажатия на кнопку «Отбор по значению в колонке», выделенной оставалась именно та ячейка, по значением которой был совершен отбор. Если кто-то сможет подсказать, как это сделать – буду благодарен. 

Вступайте в нашу телеграмм-группу Инфостарт

Отчет отбор отбор по значению ячейки Кнопка отбора

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    247946    1373    421    

1134

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5362    296    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    16422    ovetgana    112    

106

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9495    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8696    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15731    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13309    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9829    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. husky 6 23.12.15 11:49 Сейчас в теме
А если выделить в колонке 2 ячейки, то отбор сработает?
3. elephantor 13 23.12.15 13:13 Сейчас в теме
(1) husky, По первому вопросу - нет, работает только с одной ячейкой, но идея хорошая надо будет такое сделать.
По второму - сделай процедуру ПриКомпоновкеРезультата в модуле объекта Экспортной + СтандартнаяОбработка = Ложь; и руками прописать вывод отчета.
4. husky 6 23.12.15 13:53 Сейчас в теме
(3) когда будет готов код для нескольких ячеек?
5. elephantor 13 23.12.15 14:33 Сейчас в теме
(4) husky, Пока не знаю, как свободное время появится
2. husky 6 23.12.15 12:43 Сейчас в теме
{Форма.ФормаОтчета.Форма(425,13)}: Процедура или функция с указанным именем не определена (ПриКомпоновкеРезультата)
<<?>>ПриКомпоновкеРезультата(ЭлементыФормы.Результат, ДанныеРасшифровки, ); (Проверка: Толстый клиент (обычное приложение))
6. Fragster 1166 25.12.15 12:52 Сейчас в теме
а стандартные обработки расшифровки почему не устраивают?
7. elephantor 13 25.12.15 13:32 Сейчас в теме
(6) Fragster, Так быстрее и удобней делать отбор как по мне.
8. chmv 12.01.16 14:25 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация