Как сделать отбор в отчёте СКД по колонке типа булево без "да/нет" (только галочка)

26.02.26

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

Иногда в отчёте СКД возникает потребность сделать отбор по колонке типа булево, который нужно только включать и отключать. При снятой галочке отбора отбор должен быть отключен, а при включённом отбираются только те записи, у которых в колонке отбора значение - истина, при этом поле ввода значения булево (да/нет) - лишнее, на панели отборов, и его нужно скрыть. Данная публикация рассматривает возможные способы сделать это.

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

Нулевой вариант.

Данный вариант самый простой в реализации, и я о нём узнал в ходе обсуждения первой версии данной публикации в комментариях. Там же было замечено, что на платформе 8.5 в настоящий момент он не работает.
В таблице настройки отборов необходимо ввести любой текст в колонку "Представление", как показано на скриншоте ниже:

Получаем вот такой результат на форме отчёта:

 

Первый вариант.

Необходимо изменить тип данных колонки отчёта с булево на множественный и изменить её логику заполнения, чтобы вместо "Истина" / "Ложь", было "Истина" / "Неопределено" тогда в СКД можно будет использовать вид сравнения отбора "Заполнено":



Если отчёт по таблице значений, то тип значения колонки необходимо определить следующим кодом:

	МассивТипов = Новый Массив();
	МассивТипов.Добавить(Тип("NULL"));
	МассивТипов.Добавить(Тип("Булево"));
	
	тзДанныеОтчёта = Новый ТаблицаЗначений();
	тзДанныеОтчёта.Колонки.Добавить("ЕстьПереплаты", Новый ОписаниеТипов(МассивТипов));


Получаем вот такой результат на форме отчёта:

 


Второй вариант.

В этом варианте тип данных колонки отчёта и логика её заполнения остаётся без изменений, то есть только "булево" (Истина/Ложь).

Для реализации используется механизм событий модуля объекта отчёта, использующего общую форму отчёта из БСП.

В модуле объекта отчёта необходимо создать ряд процедур, которые логика общей формы отчёта вызовет автоматически, а именно:

1) В событии "ОпределитьНастройкиФормы", сконфигурировать форму отчёта на вызов события "ПослеЗаполненияПанелиБыстрыхНастроек".

2) В обработчике события "ПослеЗаполненияПанелиБыстрыхНастроек" реализовать вызов процедуры, которая скроет поля ввода у отборов по колонкам отчёта типа булево.

Важно, обязательно в настройках колонок отчёта СКД необходимо задать колонке отбора тип булево!

 

 

Конфигурация отборов СКД:


 

В модуль объекта отчёта необходимо добавить следующий код:

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

    Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
	
КонецПроцедуры //  ОпределитьНастройкиФормы	


Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
	
	МодифицироватьЭлементыБулевыхОтборов(Форма);
	
КонецПроцедуры //  ПослеЗаполненияПанелиБыстрыхНастроек


Процедура МодифицироватьЭлементыБулевыхОтборов(Форма)
	
	Перем	ЭлементыФормы, Элем, ОписаниеТипа_Булево, 
			ДоступныеТипы, ЭлемФлажок;
	
	ЭлементыФормы = Форма.Элементы;
	
	ОписаниеТипа_Булево = Новый ОписаниеТипов("Булево");
	
	Для Каждого Элем Из ЭлементыФормы Цикл
		
		Если ТипЗнч(Элем) <> Тип("ПолеФормы") Тогда 
			Продолжить;
		КонецЕсли;
		
		Если Элем.Вид = ВидПоляФормы.ПолеФлажка Тогда
			
			ЭлемФлажок = Элем;
			Продолжить;
		КонецЕсли;
		
		Попытка

			ДоступныеТипы = Элем.ДоступныеТипы;
		Исключение
			
			Продолжить;
		КонецПопытки;
		
		Если ДоступныеТипы = ОписаниеТипа_Булево Тогда
			
			Элем.Видимость = Ложь;
			
			ЭлементыФормы.Переместить(ЭлемФлажок, Элем.Родитель, Элем);
			ЭлемФлажок.Заголовок = Сред(ЭлемФлажок.Заголовок, 1, СтрДлина(ЭлемФлажок.Заголовок) - 1);
			ЭлемФлажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
			ЭлемФлажок.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Лево;
		КонецЕсли;
      
	КонецЦикла;
	
КонецПроцедуры //  МодифицироватьЭлементыБулевыхОтборов

Получаем вот такой результат на форме отчёта:

 


Третий вариант.

В этом варианте тип данных колонки отчёта и логика её заполнения остаётся без изменений, то есть только "булево" (Истина/Ложь).

Реализация осуществляется при помощи дополнительных (виртуальных) отборов. В СКД добавляется ещё один набор данных "ВиртуальныеОтборы", никак не связанный с основным набором данных, в этот набор добавляются поля виртуальных отборов. В начало процедуры "ПриКомпоновкеРезультата", добавляется вызов процедуры "УстановитьОтборыПоВиртуальнымОтборам", в которой анализируется использование виртуальных отборов и по результатам анализа применяются реальные отборы по колонкам отчёта, типа булево, которые скрыты от глаз пользователя (исключены из настроек пользователя и сделаны недоступными).

Настройки СКД для третьего варианта имеют вот такой вид:



 

Виртуальный набор включён в параметры пользователя:


 

Реальный отбор исключён из настроек пользователя и сделан недоступным для редактирования:

 



Ниже приведён листинг процедуры "УстановитьОтборыПоВиртуальнымОтборам" и вызываемых ей процедур:
 

Процедура УстановитьОтборыПоВиртуальнымОтборам()
	
	Если УстановленПользовательскийОтборСКД("ЕстьПереплатыВО") Тогда
		ИспользоватьОтборСКД("ЕстьПереплаты", Истина);
	Иначе
		ИспользоватьОтборСКД("ЕстьПереплаты", Ложь);	
	КонецЕсли;
	
	Если УстановленПользовательскийОтборСКД("ЕстьПоступленияВО") Тогда
		ИспользоватьОтборСКД("ЕстьПоступления", Истина);
	Иначе
		ИспользоватьОтборСКД("ЕстьПоступления", Ложь);	
	КонецЕсли;
	
КонецПроцедуры //  УстановитьОтборыПоВиртуальнымОтборам


Функция УстановленПользовательскийОтборСКД(ИмяОтбора)
	
	Перем	ПолеКД, Элем, ЭлементОтбора, Настройки, 
			ПользовательскиеНастройки, ПользовательскийОтбор;
			
	Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
	
	ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
	
	Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
		
		Если Элем.ЛевоеЗначение = ПолеКД Тогда
			ЭлементОтбора = Элем;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если ЭлементОтбора = Неопределено Тогда
		
		Возврат Ложь;		
	КонецЕсли;		
	
	Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
		
		ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
 		ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
		
		Если ПользовательскийОтбор <> Неопределено Тогда
			
			Возврат ПользовательскийОтбор.Использование;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции //  УстановленПользовательскийОтборСКД


Процедура ИспользоватьОтборСКД(ИмяОтбора, Использование)
	
	Перем Настройки, ПолеКД, Элем, ЭлементОтбора;
	
	Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
	
	ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
	
	Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
		
		Если Элем.ЛевоеЗначение = ПолеКД Тогда
			ЭлементОтбора = Элем;
			ЭлементОтбора.Использование = Использование;
			Возврат;
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры //  ИспользоватьОтборСКД


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

Код тестировался на платформе 1С 8.3.27.1936, конфигурация 1С: БП 3.0.175.24.

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

отбор в отчёте СКД без "да/нет" отбор в отчёте СКД только галочка отбор СКД без "да/нет" отбор СКД только галочка убрать "да/нет" в отборе по колонке типа булево убрать "да/нет" в отборе СКД виртуальный отбор в СКД виртуальные отборы СКД

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

16500 руб.

02.09.2020    257887    1426    421    

1163

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

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

29.01.2026    6725    346    shapa_pro    27    

69

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

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

29.10.2025    19458    ovetgana    112    

112

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

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

01.07.2025    11249    krasnoshchekovpavel    7    

68

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

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

10.04.2025    10779    Neti    0    

41

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

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

27.02.2025    16704    ovetgana    50    

93

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

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

24.12.2024    14377    Akcium    17    

46

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

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

20.08.2024    11254    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот МАКС МАКС бот Сортировка: Древо развёрнутое
Свернуть все
1. Avatarzorro 73 26.02.26 09:13 Сейчас в теме
на скоряк выглядит сомнительно.

А если я захочу отобрать только где значение = ложь? Если я правильно понимаю твою логику, то на этом моменте отборы будут не корректными. Проверять мне лень.

Да и столько действий ради ничего. Начальство за такое не погладит по головке
2. Eugen-S 443 26.02.26 09:19 Сейчас в теме
(1)
на скоряк выглядит сомнительно.

Сомневаетесь - не пользуйтесь.

(1)
А если я захочу отобрать только где значение = ложь?

Если у вас есть интеллект - попробуйте им воспользоваться ©
7. Avatarzorro 73 26.02.26 09:46 Сейчас в теме
(2) фу как грубо. Кто тебя так обидел?
3. user-z99999 78 26.02.26 09:20 Сейчас в теме
В отборе установи Включать в пользовательские настройки, и представление укажи.
Будет галочка на форме.

Зачем столько у вас действий, не понял.
user1539913; TMV; pscorp; Avatarzorro; ixijixi; +5 Ответить
4. Eugen-S 443 26.02.26 09:22 Сейчас в теме
(3)
Зачем столько у вас действий, не понял.

Затем, что предложенный Вами рецепт - не работает.
5. ixijixi 2148 26.02.26 09:38 Сейчас в теме
(4) Всё работает, проверьте внимательнее
6. Eugen-S 443 26.02.26 09:44 Сейчас в теме
(5) Для тех, кто в танке, если вид сравнения в отборе СКД установлен "равно", то прицепом отображается поле ввода значения "Да/Нет". Изменение в реквизите "Представление" никак не влияет на видимость поля ввода значения "Да/Нет".

Если бы "рецепт", за который Вы топите, работал, и всё было бы так просто, то эта публикация не появилась бы.
8. ixijixi 2148 26.02.26 10:43 Сейчас в теме
(6) Специально для тебя проверил. Все работает, танкист))

UPD: при разработке на 8.5 нифига не работает, но если сконфигурировать на 8.3, а открыть на 8.5 - то работает. Так что скорее всего косяк платформы 8.5.
Прикрепленные файлы:
ОтчетДляТанкистов.erf
10. Eugen-S 443 26.02.26 11:40 Сейчас в теме
(8) Один пример - лучше тысячи слов.
Правы и Вы, и я.
Есть два реквизита "Представление" один в окошке настроек пользовательского отбора (под галочкой "Включать в пользовательские настройки"), а другой в таблице настройки отборов (последняя колонка).
Тот, который в окошке пользовательского отбора, меняет только название отбора.
Логично предположить, что реквизит на окне настроек отборов - дублёр реквизита "Представление" пользовательского отбора, только для отборов, которые не включены в пользовательские настройки.
Но неисповедимы пути настроек СКД!
Действительно если в реквизит "Представление" (последняя колонка таблицы отборов) записать любой текст, то поле ввода значения отбора не будет выводиться на панель отборов.

А теперь вернёмся к:
В отборе установи Включать в пользовательские настройки, и представление укажи.
Будет галочка на форме.



Посмотрите на приложенную картинку.
Ставим галочку, заполняем "Представление" , которое под этой галочкой и не работает )
Прикрепленные файлы:
Прикрепленные файлы:
11. ixijixi 2148 26.02.26 11:57 Сейчас в теме
(10) Я в курсе этой фичи.
12. IT_CCM 26.02.26 13:58 Сейчас в теме
как вариант еще сделать свою форму с параметрами такого вида как вам захочется хоть с галкой хоть с Да\Нет как захотите, вам всего то понадобится создать кнопку Сформировать и програмно это сделать там строк кода получится не больше 50, в таком случае у вас еще появляется возможность пост обработки результата отчета СКД если там не получилось что то реализовать. Я так сто раз делал по тому что да управлять параметрами скд бывает не так просто как хотелось бы а с своей формой ты про это все забываешь, так что советую обдумать и такой вариант при следующем создании отчета с скд, сейчас решение уже подсказали выше.
Прикрепленные файлы:
Пример отчёта (стандартный СКД) (Быстрые отборы) (Программное формирование) (Пост обработка) (Упр. прил.).erf
Для отправки сообщения требуется регистрация/авторизация