При разработке конфигураций на платформе 1С часто возникает задача анализа заполненности данных. Например, у вас есть справочник, в котором содержится ряд реквизитов с типом Булево (галочки), и вам необходимо понять, какой процент из этих флагов установлен в значение Истина. Поскольку 1С — это строго типизированная система, прямая математическая операция сложения логических значений невозможна, но задачу можно элегантно решить несколькими способами.
Самый надежный и быстрый способ для формирования отчетов или выборок — это приведение булевых значений к числовому виду прямо на уровне СУБД. Система не позволяет складывать Истина + Истина, так как ожидает числовой тип данных. Чтобы обойти это ограничение, мы преобразуем каждое логическое значение в 1 (если выбрано) или 0 (если не выбрано).
Рассмотрим пример кода для девяти реквизитов:
ВЫБРАТЬ
Справочник.Наименование,
(ВЫБОР КОГДА Справочник.Флаг1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг2 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг3 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг4 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг5 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг6 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг7 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг8 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
ВЫБОР КОГДА Справочник.Флаг9 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КоличествоИстина,
((ВЫБОР КОГДА Справочник.Флаг1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ + ...) / 9 * 100) КАК ПроцентЗаполнения
ИЗ
Справочник.ИмяВашегоСправочника КАК Справочник
Этот метод хорош тем, что он выполняется на сервере и не нагружает клиентскую часть приложения.
Если ваша задача — вывести этот процент в отчете, лучше использовать СКД. Это позволит избежать громоздких текстов запросов и упростит дальнейшее обслуживание системы. В настройках отчета вы можете добавить вычисляемое поле.
ПроцентГалочек.ВЫБОР КОГДА.Если вы понимаете, что количество реквизитов типа Булево в справочнике будет расти, текущая структура «плоской таблицы» (много отдельных колонок) становится неудобной для отчетности и поддержки кода. В профессиональной разработке 1С мы рекомендуем рассмотреть перенос признаков в Табличную часть или отдельный регистр сведений.
Когда все флаги хранятся в строках табличной части, задача расчета превращается в тривиальную операцию:
Истина.Такой подход делает ваше решение масштабируемым: вы сможете добавлять любое количество флагов, не меняя при этом код запросов или метаданные справочника.
Подводя итог, для быстрого решения текущей задачи используйте конструкцию ВЫБОР КОГДА внутри вашего запроса. Это самый простой способ «обмануть» типизацию платформы и получить корректное число для дальнейшего расчета процентов. Если же вы проектируете систему с нуля, задумайтесь о выносе этих реквизитов в табличную часть — это избавит вас от проблем с поддержкой кода в будущем.