Как в 1С преобразовать логическое значение (истина/ложь) в число (1/0)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Способ 1: Использование встроенной функции Число()

Самый простой и «чистый» с точки зрения стиля программирования способ — это явное приведение типов. В 1С встроенная функция Число() умеет работать с логическими значениями. Если передать ей Истина, она вернет 1, если Ложь — вернет 0.

Рассмотрим пример кода:


МояПеременная = Истина;
Результат = Число(МояПеременная);
// Результат будет равен 1

Этот метод считается best practice, так как любой программист, читающий ваш код, сразу поймет намерение — вы осознанно превращаете логику в число. Это исключает двусмысленность и делает код более поддерживаемым.

Способ 2: Неявное преобразование через арифметические операции

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

Проанализируем, как это выглядит на практике:


МоеБулево = Ложь;
Результат = 0 + МоеБулево;
// Результат будет равен 0

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

Способ 3: Тернарный оператор «?»

Если вам нужно не просто получить 0 или 1, а реализовать более сложную логику или вы хотите явно прописать условия, идеально подойдет тернарный оператор. Он универсален и позволяет четко задать возвращаемое значение для каждого случая.

Разберем пример:


МоеБулево = Истина;
Результат = ?(МоеБулево, 1, 0);
// Если истина — вернет 1, если ложь — 0

Этот способ незаменим, когда вместо стандартных 0 и 1 вам нужно вернуть другие числовые константы (например, 100 и -100) в зависимости от условия.

Способ 4: Функция Формат() и визуальное представление

Иногда задача стоит не в преобразовании данных для расчетов, а именно в их выводе на экран или в печатную форму. В этом случае удобно использовать функцию Формат().

Посмотрим на строку формата:


РезультатСтрока = Формат(Истина, "БЛ=0; БИ=1");
// РезультатСтрока будет содержать "1"

Важное замечание: Функция Формат() всегда возвращает строку. Если ваша цель — передать число в математическую функцию, этот метод не подойдет. Однако для формирования текстовых сообщений или выгрузок в CSV это отличное решение.

Почему иногда вместо «1» выводится «true» или «Истина»?

Часто разработчики сталкиваются с ситуацией, когда код преобразования написан верно, но в итоговом документе или интерфейсе все равно отображается «true». Выясним основные причины этой проблемы:

  1. Тип поля в форме или макете: Если вы выводите результат в ячейку табличного документа или в реквизит формы, у которого установлен тип Булево, платформа автоматически преобразует вашу единицу обратно в «Истина». Проверьте свойства элемента управления и убедитесь, что тип установлен в Число.
  2. Сериализация в JSON/XML: При передаче данных на сайт через ЗаписьJSON, значения типа Булево всегда превращаются в true/false по стандартам формата. Чтобы сайт получил цифру, вы должны выполнить Число(Значение) непосредственно перед добавлением в структуру обмена.
  3. Веб-клиент: В веб-клиенте настройки локализации браузера могут переопределять стандартное отображение, если не задана жесткая форматная строка.

Преобразование в запросах 1С

В языке запросов 1С нельзя использовать арифметическое сложение логических полей с числами или функцию Число(). Единственный способ преобразовать Булево в число внутри запроса — это конструкция ВЫБОР.

Рассмотрим пример запроса:


ВЫБРАТЬ
    ВЫБОР 
        КОГДА Продажи.Проведено = ИСТИНА ТОГДА 1 
        ИНАЧЕ 0 
    КОНЕЦ КАК СтатусЧислом
ИЗ
    РегистрНакопления.Продажи КАК Продажи

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

Работа в Системе компоновки данных (СКД)

Если вам нужно изменить отображение в отчете без изменения самого запроса, в СКД есть два мощных инструмента:

Подведение итогов по производительности

Проанализируем ситуацию с точки зрения ресурсов системы:

  1. 0 + МояПеременная — максимально быстро, используется для циклов с большим количеством итераций.
  2. Число(МояПеременная) — универсальный стандарт, рекомендуется для большинства задач.
  3. ?(МояПеременная, 1, 0) — гибкий инструмент для сложных условий.
  4. ВЫБОР...КОНЕЦ — единственный вариант для запросов.

Выбор конкретного метода зависит от контекста вашей задачи. Если вы работаете с интерфейсом — используйте Формат или свойства элементов формы. Если передаете данные во внешнюю систему — используйте явное приведение через Число(), чтобы гарантировать правильную сериализацию типа данных.

← На главную