Разработка и Конфигурация · 11 мин
Булево, число, строка, дата: что это за значения в 1С
Что такое булево, число, строка и дата в 1С: примитивные типы значений, примеры кода, преобразование типов, проверка типа и типичные ошибки разработчиков.
Когда в языке запросов, встроенном языке 1С или в настройках конфигурации встречаются слова «Булево», «Число», «Строка», «Дата» — речь идёт о примитивных типах значений. Это базовые «строительные блоки» платформы: любой реквизит справочника, колонка табличной части, переменная в коде или поле запроса имеет определённый тип, и чаще всего это один из этих четырёх. Понимание того, как устроены эти типы, как они преобразуются друг в друга и где возникают типичные ошибки, — фундамент для разработки и доработки любой конфигурации 1С.
Значение в 1С — это конкретная единица данных: число 150, строка «Иванов И.И.», дата 01.03.2026, логическое значение Истина. Каждое значение принадлежит какому-либо типу, и платформа строго контролирует операции над ним: нельзя сложить строку с датой или сравнить булево с числом без явного преобразования. Именно поэтому разработчику важно понимать, какой тип у данных в каждом конкретном месте кода.
Ниже разобраны основные примитивные типы, способы их задания в коде, проверка и преобразование типов, а также ситуации, в которых неправильная работа с типами приводит к ошибкам в расчётах и отчётах.
Что такое значение и тип значения в 1С
В терминологии платформы 1С «значение» — это экземпляр данных, с которым работает программа. У каждого значения есть тип, описывающий его природу: примитивные типы (число, строка, дата, булево, неопределено, null) и ссылочные типы (ссылки на справочники, документы, перечисления, объекты данных). Примитивные типы не хранятся в базе как самостоятельные сущности — они существуют только как значения реквизитов, переменных или параметров.
Тип значения задаётся при описании реквизита в конфигураторе: например, реквизит «Сумма» документа обычно имеет тип «Число», реквизит «Комментарий» — «Строка», «ДатаОтгрузки» — «Дата». Во встроенном языке тип переменной определяется автоматически в момент присваивания: если вы записали Х = 100;, переменная получила числовое значение.
Булево: логические значения Истина и Ложь
Тип «Булево» принимает только два значения: Истина и Ложь. Он используется для признаков и флагов: «Проведён», «Активен», «ЭтоГруппа», «ИспользоватьСкидку». В коде такие значения участвуют в условиях и логических операциях.
Если Документ.Проведен Тогда
Сообщить("Документ уже проведён");
КонецЕсли;
ЭтоОпт = (Количество >= 100) И (Сумма > 50000);
Частая ошибка — сравнивать булево значение с числом или строкой. Конструкция Если Флаг = 1 Тогда работает не так, как ожидает разработчик: в 1С булево не равно числу 1, такое сравнение даст Ложь или ошибку в зависимости от контекста. Правильно — сравнивать с Истина или использовать значение напрямую в условии.
Число: работа с количеством, суммами и итогами
Числовой тип в 1С хранит целые и дробные значения. При описании реквизита в конфигураторе задаётся длина и точность: например, Число(15,2) — до 15 знаков всего, из них 2 после запятой. Это критично для денежных сумм и количеств: если точности не хватает, значения округляются при записи в базу, и итоги в отчётах начинают «не сходиться».
Цена = 1250.50;
Количество = 3;
Сумма = Цена * Количество; // 3751.50
Для разделителя дробной части в коде используется точка, а не запятая. При вводе пользователем в поле формы разделитель зависит от региональных настроек. Ещё один нюанс — деление на ноль вызывает ошибку времени выполнения, поэтому перед делением стоит проверять знаменатель: Если Количество <> 0 Тогда ....
Строка: текстовые данные и их ограничения
Строковый тип хранит текст. В конфигураторе для строкового реквизита задаётся длина: фиксированная (например, Строка(50)) или неограниченная. Неограниченные строки удобны для комментариев и длинных описаний, но имеют ограничение: по ним нельзя строить индексы и использовать в некоторых операциях сравнения в запросах без приведения типа через ВЫРАЗИТЬ.
ФИО = "Иванов Сергей Петрович";
Адрес = "г. Москва, ул. Примерная, д. 1";
ТекстСПереносом = "Первая строка
|Вторая строка";
Полезные функции работы со строками: СтрДлина() — длина, СокрЛП() — удаление пробелов по краям, Лев(), Прав(), Сред() — получение подстроки, СтрНайти() — поиск вхождения, ВРег() и НРег() — смена регистра. Сравнение строк в запросах по умолчанию регистронезависимое, но чувствительно к пробелам в конце — поэтому «лишние» пробелы в данных частая причина «ненайденных» записей.
Дата: хранение моментов времени
Тип «Дата» хранит календарную дату и время с точностью до секунды. Литерал даты в коде записывается в одинарных кавычках в формате ГГГГММДД: '20260315' или со временем '20260315143000'. Пустая дата — '00010101' — часто используется как признак «дата не заполнена», и её нужно проверять явно.
ДатаОтгрузки = '20260315';
Сейчас = ТекущаяДата();
Если ДатаОтгрузки = '00010101' Тогда
Сообщить("Дата не указана");
КонецЕсли;
Для арифметики с датами применяются функции ДобавитьМесяц(), а разность дат в секундах получается обычным вычитанием. Чтобы получить начало или конец дня, месяца, года, используются НачалоДня(), КонецМесяца() и аналогичные функции. В запросах для вычислений с датами есть конструкция ДОБАВИТЬКДАТЕ и РАЗНОСТЬДАТ.
Проверка и преобразование типов
Когда тип значения заранее неизвестен (например, данные пришли из обмена или из реквизита составного типа), его проверяют функцией ТипЗнч() в связке с Тип():
Если ТипЗнч(Значение) = Тип("Число") Тогда
Итог = Итог + Значение;
ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
Сообщить("Получена строка: " + Значение);
КонецЕсли;
Явное преобразование выполняется функциями Число(), Строка(), Дата(), Булево(). Важно понимать: Число("abc") вызовет ошибку, поэтому перед преобразованием строк из внешних источников стоит убедиться, что строка действительно содержит число. Функция Строка() для даты вернёт текст в формате по умолчанию; для управления форматом используйте Формат().
- 1Откройте конфигуратор и найдите объект (справочник, документ) в дереве конфигурации
- 2Перейдите на закладку «Данные» и выделите нужный реквизит
- 3Откройте палитру свойств — тип указан в поле «Тип», для числа дополнительно видны длина и точность
- 4Если тип составной — проверьте, какие типы входят в состав, и учтите это в коде проверками ТипЗнч()
Составные типы и значения Неопределено, Null
Реквизит может иметь составной тип — например, «Число и Строка» или «Строка и ссылка на справочник». Это удобно для универсальных полей, но усложняет обработку: перед операцией нужно определять фактический тип значения через ТипЗнч(). Составные типы также замедляют запросы и мешают индексации, поэтому злоупотреблять ими не стоит.
Особые значения Неопределено и Null означают отсутствие значения. Неопределено возникает в переменных и параметрах, Null — в результатах запросов при левом соединении, когда записи не нашлось. Проверка на Null в коде выполняется так: Если Значение = Null Тогда, а в запросах — через ЕСТЬ NULL. Пропуск таких проверок — частая причина ошибки «Значение не является значением объектного типа».
Как проверить корректность работы с типами
Итоги сходятся с данными документов без расхождений в копейках
Расхождения на округления — проверьте точность числовых реквизитов
Записи за период выбираются полностью, включая граничные даты
Записи последнего дня теряются — вероятно, дата сравнивается без учёта времени
Запись находится по точному значению
Запись не находится — проверьте пробелы в конце строки и регистр
Где знание типов применяется на практике
Типы значений встречаются разработчику повсюду: при описании реквизитов объектов, в параметрах методов, в языке запросов, в СКД (системе компоновки данных), при загрузке данных из Excel и обменах. Например, в запросе приведение типов через ВЫРАЗИТЬ(Поле КАК Число(15,2)) позволяет отсечь лишние типы составного поля и ускорить выборку.
При загрузке данных из внешних файлов почти всегда приходится преобразовывать строки в числа и даты, потому что из Excel всё приходит текстом. Здесь важно учитывать формат дат в файле и разделитель дробной части — неверное предположение о формате даёт ошибки преобразования или, что хуже, молча неверные данные (дата 03.04 может стать 4 марта вместо 3 апреля).
Ещё одна практическая зона — формирование печатных форм и сообщений. Числа и даты вставляются в текст через Формат() с указанием форматной строки, иначе пользователь увидит техническое представление значения. Например, Формат(Сумма, "ЧДЦ=2") гарантирует два знака после запятой, а Формат(ДатаДок, "ДЛФ=D") выведет дату в привычном виде.
Что важно запомнить
Булево, число, строка и дата — примитивные типы значений 1С. Тип определяет допустимые операции и способ хранения. Проверяйте тип через ТипЗнч(), преобразуйте явно, контролируйте точность чисел и пустые даты — это убережёт от большинства ошибок в расчётах и отчётах.
Частые вопросы
Чем отличается Неопределено от Null в 1С?
Неопределено — значение переменной или параметра, которому ничего не присвоено, встречается во встроенном языке. Null появляется в результатах запросов, когда при соединении таблиц для записи не нашлось пары. Проверяются они по-разному: Неопределено — прямым сравнением, Null — сравнением с Null в коде или конструкцией ЕСТЬ NULL в запросе.
Как проверить, что строка содержит число, перед преобразованием?
Универсальной встроенной функции нет. На практике строку очищают от пробелов и проверяют посимвольно, что она состоит только из цифр, точки и знака минус, либо используют попытку преобразования внутри конструкции Попытка...Исключение с обработкой ошибки.
Почему сравнение двух дат даёт неожиданный результат?
Дата в 1С всегда содержит время. Если одна дата получена как 15.03.2026 00:00:00, а другая — 15.03.2026 14:30:00, то сравнение на равенство даст Ложь. Для сравнения только календарных дат приводите значения функцией НачалоДня() к обеим сторонам сравнения.
Можно ли изменить тип реквизита в рабочей базе без потери данных?
Расширение типа (увеличение длины строки, добавление типа в составной, увеличение точности числа) обычно безопасно. Сужение — уменьшение длины, удаление типа из составного, смена типа на несовместимый — приведёт к потере или обрезанию данных при реструктуризации. Перед такими изменениями обязательно делайте резервную копию.
Как в запросе отобрать документы с незаполненной датой?
Пустая дата сравнивается с литералом ДАТАВРЕМЯ(1,1,1): условие выглядит как ГДЕ Документ.ДатаОтгрузки = ДАТАВРЕМЯ(1,1,1). Аналогично в коде пустая дата — это '00010101'.
Что такое составной тип и когда его использовать?
Составной тип позволяет реквизиту хранить значения нескольких типов, например строку или ссылку на справочник. Он оправдан для универсальных полей вроде «Владелец» или «Аналитика», но усложняет запросы и замедляет выборки. Если тип значения известен заранее, лучше использовать конкретный одиночный тип.