К статье
Практический материал

Разработка и Конфигурация · 10 мин

Перечисление «Да/Нет» в 1С 8: где искать и как использовать

Где в 1С 8 находится перечисление «Да/Нет», как создать своё, чем заменить его типом Булево и как вывести значения в форме, запросе и отчёте.

Вопрос «где в 1С 8 перечисление Да/Нет» возникает у разработчиков и внедренцев регулярно: в типовом языке платформы 1С:Предприятие 8 нет встроенного системного перечисления с предопределёнными значениями «Да» и «Нет». Платформа предоставляет тип «Булево» со значениями Истина и Ложь, а перечисления всегда создаются на уровне конкретной конфигурации. Поэтому искать «ДаНет» нужно не в платформе, а в дереве объектов конфигуратора конкретной базы.

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

Если вы работаете в конфигураторе и не находите такой объект — значит, в вашей конфигурации его просто нет, и есть три пути: найти аналог, создать собственное перечисление или использовать тип Булево. Ниже разобраны все три сценария с конкретными действиями.

Где искать перечисление «Да/Нет» в конфигураторе

Откройте конфигуратор и разверните дерево конфигурации: раздел «Общие» → «Перечисления». Пролистайте список или воспользуйтесь поиском по дереву (Ctrl+F в окне конфигурации), введя «Да». В типовых решениях объект, если он есть, обычно называется «ДаНет» или близко к этому.

Если конфигурация большая, удобнее глобальный поиск: меню «Правка» → «Глобальный поиск по конфигурации» (Ctrl+Shift+F), строка поиска — «ДаНет». Так вы найдёте не только сам объект, но и все места, где он используется: реквизиты справочников, документов, ресурсы регистров.

Ещё один способ — поиск по синониму. Откройте перечисления по очереди и смотрите список значений: если среди значений есть «Да» и «Нет», это и есть нужный объект, даже если его имя отличается (например, «ПризнакДаНет»).

Как найти объект в конфигурации
  1. 1
    Откройте конфигуратор и дерево конфигурации
  2. 2
    Разверните Общие → Перечисления и проверьте наличие объекта «ДаНет»
  3. 3
    Если не нашли — выполните глобальный поиск (Ctrl+Shift+F) по строке «ДаНет»
  4. 4
    Проверьте значения найденных перечислений: ищите пару «Да»/«Нет»
  5. 5
    Если объекта нет — переходите к созданию собственного или используйте Булево

Как создать собственное перечисление «Да/Нет»

Если конфигурация дорабатывается и перечисление нужно, создайте его за пару минут. В дереве конфигурации нажмите правой кнопкой на ветке «Перечисления» → «Добавить». Задайте имя, например, «ДаНет», синоним — «Да/Нет».

Перейдите на вкладку «Данные» и добавьте два значения перечисления: «Да» и «Нет». Имена значений будут использоваться в коде: Перечисления.ДаНет.Да. Сохраните конфигурацию и обновите конфигурацию базы данных (F7), чтобы объект стал доступен в режиме предприятия.

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

Чем заменить перечисление: тип Булево

В большинстве случаев отдельное перечисление «Да/Нет» вообще не нужно — достаточно реквизита типа «Булево». В коде он принимает значения Истина и Ложь, в запросах сравнивается с ИСТИНА/ЛОЖЬ, а в форме отображается флажком.

Главное отличие от перечисления — представление в интерфейсе и число состояний. Булево имеет строго два значения и не бывает «пустым» в смысле неопределённости: незаполненный булев реквизит равен Ложь. Перечисление же может быть не заполнено (пустая ссылка), что даёт фактически третье состояние — «не указано».

Выбирайте Булево, когда вопрос бинарный: «активен/не активен», «включать в расчёт/не включать». Выбирайте перечисление, когда важно отличать «не ответили» от ответа «Нет», либо когда пользователи должны видеть в списках и отчётах именно слова «Да» и «Нет», а не флажки.

Булево или перечисление

Тип Булево

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

Перечисление ДаНет

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

Перечисление с тремя значениями

Вариант «Да/Нет/Не указано» — когда неопределённость нужно хранить явно и участвует в логике расчётов.

Как использовать значения в коде и запросах

В модуле обращение к значению перечисления выглядит так: Перечисления.ДаНет.Да. Типичная проверка: Если Реквизит = Перечисления.ДаНет.Да Тогда … КонецЕсли. Для проверки на незаполненность используйте ЗначениеЗаполнено(Реквизит) или сравнение с Перечисления.ДаНет.ПустаяСсылка().

В запросе сравнение записывается через параметр или литерал: ГДЕ Таблица.Признак = ЗНАЧЕНИЕ(Перечисление.ДаНет.Да). Проверка на пустое значение: ГДЕ Таблица.Признак = ЗНАЧЕНИЕ(Перечисление.ДаНет.ПустаяСсылка).

Если вместо перечисления используется Булево, в коде сравнение обычно избыточно: достаточно Если Реквизит Тогда. В запросе: ГДЕ Таблица.Признак = ИСТИНА. Распространённая ошибка — сравнивать булево со строкой «Истина»: типы не совпадут, и условие никогда не выполнится.

bsl
Если Объект.Согласовано = Перечисления.ДаНет.Да Тогда
    Статус = "Согласовано";
ИначеЕсли Не ЗначениеЗаполнено(Объект.Согласовано) Тогда
    Статус = "Не указано";
КонецЕсли;

Отображение «Да» и «Нет» в формах и отчётах

Если реквизит имеет тип Булево, но в отчёте нужно выводить слова «Да»/«Нет», это делается без создания перечисления. В запросе используйте конструкцию ВЫБОР: ВЫБОР КОГДА Таблица.Признак ТОГДА "Да" ИНАЧЕ "Нет" КОНЕЦ КАК ПризнакТекстом.

В форме списка булев реквизит можно показать текстом: добавьте колонку с типом «Поле надписи» и формулой через событие «ПриПолученииДанных» либо используйте условное оформление динамического списка с форматом поля. В свойствах поля доступен параметр «Формат», где для булева можно задать строку вида «БЛ=Нет; БИ=Да».

Для перечисления отображение настраивается через синонимы значений: откройте перечисление, у значения «Да» синоним по умолчанию «Да» — его можно изменить, например, на «Подтверждено», и это отразится во всех формах и отчётах без изменения кода.

Типичные ошибки
01
Сравнение булева реквизита со строкой «Истина» — условие никогда не срабатывает из-за несовпадения типов
02
Создание перечисления ради двух значений там, где достаточно Булево — лишний объект метаданных и усложнение обновлений
03
Игнорирование пустой ссылки перечисления: логика «не Да = Нет» неверна, если значение может быть не заполнено
04
Изменение состава значений существующего перечисления без проверки данных — старые записи могут ссылаться на удалённое значение

Риски при изменении существующего перечисления

Если перечисление «ДаНет» уже используется в базе, не удаляйте и не переименовывайте его значения без анализа. Удаление значения, на которое ссылаются записи, приведёт к битым ссылкам вида «Объект не найден» в реквизитах документов и регистров.

Перед изменением выполните поиск всех ссылок на объект: правой кнопкой на перечислении → «Поиск ссылок на объект». Проверьте, где значения участвуют в коде и запросах, через глобальный поиск по имени перечисления.

Любые изменения структуры выполняйте на копии базы и только после резервного копирования рабочей. Обновление конфигурации базы данных с реструктуризацией на больших объёмах данных может занять продолжительное время — планируйте его на нерабочие часы.

Проверка результата после настройки

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

Во-вторых, выполните тестовый запрос в консоли запросов с отбором по новому значению — убедитесь, что литерал ЗНАЧЕНИЕ(Перечисление.ДаНет.Да) распознаётся и возвращает записи. В-третьих, проверьте отчёты и печатные формы, где реквизит выводится: там не должно быть пустых строк там, где ожидается «Да» или «Нет».

Контрольные точки

Как проверить результат

Выбор значения в форме
Норма

Список предлагает «Да» и «Нет», значение сохраняется после записи

Тревожный признак

Поле пустое, недоступно или значение сбрасывается после записи

Запрос с отбором
Норма

Отбор по ЗНАЧЕНИЕ(Перечисление.ДаНет.Да) возвращает ожидаемые записи

Тревожный признак

Ошибка «Поле не найдено» или пустой результат при наличии данных

Отображение в отчётах
Норма

В колонке видны «Да»/«Нет» или понятный текст

Тревожный признак

Пустые ячейки, «Объект не найден» или технические представления ссылок

Часто задаваемые вопросы

Почему в платформе 1С нет встроенного перечисления «Да/Нет»?

Потому что для бинарной логики платформа предоставляет тип Булево, а перечисления считаются прикладными объектами: их состав и названия зависят от предметной области, поэтому их создают разработчики конфигурации.

Как в запросе вывести «Да»/«Нет» для булева реквизита?

Используйте конструкцию ВЫБОР: ВЫБОР КОГДА Таблица.Признак ТОГДА "Да" ИНАЧЕ "Нет" КОНЕЦ. Поле вернёт строку, которую можно вывести в отчёт или СКД.

Можно ли перечислению «ДаНет» добавить третье значение позже?

Да, добавление нового значения безопаснее удаления: существующие данные не пострадают. Но проверьте код с конструкциями «Иначе» — логика, рассчитанная на два значения, может начать работать иначе.

Чем пустая ссылка перечисления отличается от значения «Нет»?

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

Как в управляемой форме показать булев реквизит переключателем «Да/Нет»?

Измените вид поля формы на «Поле переключателя» или задайте форматную строку «БЛ=Нет; БИ=Да» в свойствах поля. Альтернатива — заменить тип реквизита на перечисление, но это требует реструктуризации данных.

Нужно ли перечисление «ДаНет» при разработке с нуля?

Обычно нет: начинайте с Булево и добавляйте перечисление только тогда, когда появляется потребность в состоянии «не указано» или в текстовом представлении в интерфейсе и отчётах.

Итог

Что важно запомнить

Системного перечисления «Да/Нет» в платформе 1С 8 нет — ищите его в ветке «Перечисления» своей конфигурации или создавайте сами. Для простых флагов достаточно типа Булево, а перечисление оправдано, когда нужны слова «Да»/«Нет» в интерфейсе или состояние «не указано». Перед изменением существующего перечисления делайте резервную копию и проверяйте ссылки на его значения.