Разработка и Конфигурация · 10 мин
Что такое литерал в 1С и как его использовать
Литерал в 1С — это фиксированное значение в коде. Разбираем типы литералов: строки, числа, даты, булево, NULL. Синтаксис, примеры и типичные ошибки.
Литерал — это значение, записанное непосредственно в тексте программного модуля на встроенном языке 1С. Когда разработчик пишет Цена = 1500; или Сообщить("Операция выполнена");, число 1500 и строка «Операция выполнена» — это литералы. В отличие от переменной, литерал не хранится в памяти под именем: он представляет само значение, зафиксированное прямо в коде.
Понимание литералов важно, потому что каждый тип данных в 1С имеет собственный синтаксис записи. Ошибка в оформлении литерала — лишняя кавычка, неправильный разделитель в дате, точка вместо запятой в составе строки — приводит либо к синтаксической ошибке при проверке модуля, либо к неочевидному поведению программы. При этом сами по себе литералы — одна из самых простых конструкций языка.
Основные типы литералов во встроенном языке 1С: числовые, строковые, даты, булевы значения и специальное значение NULL. Ниже разобран синтаксис каждого типа, типичные ошибки и практические рекомендации, когда литерал уместен, а когда лучше вынести значение в константу, параметр или настройку.
Числовые литералы: целые и дробные числа
Числовой литерал записывается цифрами без кавычек. Целая часть отделяется от дробной точкой, а не запятой — это частая ошибка у тех, кто привык к русской типографике. Примеры корректной записи: Количество = 10;, Ставка = 0.2;, Сумма = 15250.75;.
Числа могут быть положительными и отрицательными, знак минус ставится перед числом: Разница = -35.5;. Пробелы внутри числа и разделители разрядов (типа 1 000 000) не допускаются — такая запись вызовет синтаксическую ошибку.
Платформа 1С работает с числами ограниченной разрядности: по умолчанию точность составляет до 38 значащих цифр, из них на дробную часть может приходиться до 10 знаков (в зависимости от контекста и версии платформы). Для обычных учётных задач этого достаточно, но при расчётах с высокой точностью стоит помнить об округлении промежуточных результатов.
Строковые литералы: кавычки, переносы и спецсимволы
Строковый литерал заключается в двойные кавычки: Имя = "Иван";. Если внутри строки нужна сама двойная кавычка, её удваивают: Текст = "Документ ""Реализация"" проведён";. Это стандартный приём экранирования во встроенном языке 1С.
Многострочный текст можно записывать двумя способами. Первый — конкатенация через символ «|» (вертикальная черта) в начале каждой следующей строки:
Текст = "Первая строка
|Вторая строка
|Третья строка";
Второй способ — оператор конкатенации «+» между отдельными строковыми литералами. Символ «|» удобен тем, что сохраняет перевод строки автоматически, тогда как при склейке через «+» перевод нужно добавлять явно через Символы.ПС.
Одинарные кавычки для строк не используются — они зарезервированы под литералы даты. Это принципиальное отличие от многих других языков, где одинарные и двойные кавычки взаимозаменяемы.
Литералы даты: формат и подводные камни
Литерал даты записывается в одинарных кавычках в формате ГГГГММДД, к которому можно добавить время ЧЧММСС: ДатаНачала = '20260115'; или Момент = '20260115143000'; — 15 января 2026 года, 14:30:00. Порядок строго фиксирован: сначала год, потом месяц, день, часы, минуты, секунды.
Разделители (точки, дефисы, пробелы) внутри литерала даты не допускаются. Запись '15.01.2026' вызовет ошибку — это наиболее частая проблема у начинающих, привыкших к привычному отображению дат в интерфейсе.
Если нужна пустая дата (дата без значения), используется литерал '00010101' — первое января первого года. Сравнение переменной с этим литералом — стандартный способ проверить, заполнена ли дата: Если Документ.Дата = '00010101' Тогда ....
// Примеры литералов даты
ДатаОтчета = '20260301'; // 1 марта 2026
НачалоДня = '20260301000000'; // с указанием времени
ПустаяДата = '00010101'; // незаполненная дата
Если Заказ.ДатаОтгрузки = '00010101' Тогда
Сообщить("Дата отгрузки не указана");
КонецЕсли;Булевы литералы и значение NULL
Булевы значения записываются ключевыми словами Истина и Ложь (в английском синтаксисе — True и False). Они не требуют кавычек: ФлагАктивности = Истина;. Запись "Истина" в кавычках — это уже строка, и сравнение её с булевым значением даст ложь или ошибку приведения типов.
Значение NULL обозначает отсутствие значения и применяется в основном при работе с запросами: поле, не заполненное в результате соединения таблиц, возвращает NULL. Проверка на NULL выполняется через функцию ЗначениеЗаполнено() не всегда корректно — надёжнее сравнение Если Поле = NULL Тогда или оператор ЕСТЬ NULL в языке запросов.
Отдельно стоит упомянуть Неопределено — это не литерал в строгом смысле, а специальное значение типа «Неопределено», которое возвращают функции без возврата значения и которое присваивается незаполненным реквизитам составного типа. В коде оно записывается ключевым словом Неопределено и часто используется как признак «значение не задано».
NULL, Неопределено и пустые значения
Результат работы запросов и СКД. Проверяется сравнением с NULL или оператором ЕСТЬ NULL
Значение незаполненных реквизитов составного типа и функций без возврата. Проверяется сравнением с Неопределено
Пустая строка "", ноль, дата '00010101' — обычные значения своих типов, проверяются сравнением или ЗначениеЗаполнено()
Где литералы встречаются на практике
Чаще всего литералы используются в инициализации переменных, условиях, сообщениях пользователю и параметрах методов. Типичный фрагмент: Если СуммаДокумента > 100000 Тогда Сообщить("Требуется согласование"); — здесь число и строка являются литералами.
В языке запросов 1С литералы тоже присутствуют: ГДЕ Дата >= &НачалоПериода обычно использует параметры, но можно встретить ГДЕ СтавкаНДС = 20 или ВЫБРАТЬ "Реализация" КАК ТипОперации. В запросах действуют похожие правила записи, однако литералы дат в запросах чаще передают через параметры — это и надёжнее, и позволяет оптимизатору повторно использовать план запроса.
Литералы неизбежны в тестовых и отладочных фрагментах, при формировании текстов сообщений и в простых проверках. Проблемы начинаются, когда литералы размножаются по коду и превращаются в «магические числа» — значения без объяснения, зашитые в десятки мест.
Когда литерал стоит заменить
Если одно и то же значение встречается в коде больше двух раз или его смысл неочевиден из контекста, литерал лучше вынести. Варианты: константа в конфигурации, функция, возвращающая значение, параметр сеанса, настройка в справочнике или регистре сведений.
Особенно это касается ставок налогов, лимитов, адресов сервисов, текстов длинных сообщений и шаблонов. Изменение ставки, зашитой литералом в пятьдесят модулей, превращается в рискованную операцию поиска и замены; изменение константы — в одно действие в режиме предприятия.
Строковые литералы, видимые пользователю, в многоязычных конфигурациях принято оформлять через функцию НСтр(), чтобы поддерживать перевод интерфейса. Даже если локализация не планируется, такой стиль упрощает будущую доработку.
Литерал или отдельная настройка
Как проверить корректность литералов
Первый уровень контроля — синтаксическая проверка модуля в конфигураторе (команда «Проверка модуля» в контекстном меню или через меню «Текст»). Она выявит незакрытые кавычки, неверный формат даты, запятую вместо точки в числе.
Второй уровень — типизация в месте использования. Литерал правильного синтаксиса может не подходить по типу: присвоение строки числовому реквизиту пройдёт без ошибки компиляции, но даст неожиданный результат или исключение в момент выполнения. Проверяйте типы через ТипЗнч() в отладчике при сомнениях.
Третий уровень — расширенная проверка конфигурации, которая находит часть логических проблем, включая подозрительные приведения типов. Для серверного кода полезно прогонять типовые сценарии в отладке, наблюдая фактические значения переменных.
Как проверить результат
Проверка модуля завершается без ошибок
Сообщения о незакрытых кавычках, неверном формате даты
ТипЗнч() показывает ожидаемый тип (Число, Строка, Дата)
Строка вместо даты или числа из-за лишних кавычек
Сравнение с '00010101' корректно выявляет пустую дату
Сравнение с "01.01.0001" строкой всегда даёт ложь
Часто задаваемые вопросы
Чем литерал отличается от константы в 1С?
Литерал — это значение, записанное прямо в коде модуля (например, 100 или "Текст"). Константа — объект метаданных конфигурации, значение которого хранится в базе данных и может меняться пользователем в режиме предприятия без изменения кода. Литерал меняется только редактированием модуля, константа — через интерфейс.
Почему запись '15.01.2026' вызывает ошибку?
Литерал даты в 1С не допускает разделителей и требует строгий порядок: год, месяц, день. Правильная запись — '20260115'. При необходимости добавляется время: '20260115143000'. Формат с точками используется только для отображения дат в интерфейсе, но не в коде.
Как вставить кавычки внутрь строкового литерала?
Двойная кавычка внутри строки удваивается: "Он сказал ""привет""" — в результате получится строка: Он сказал "привет". Это единственный механизм экранирования кавычек во встроенном языке, обратного слэша для этой цели нет.
Можно ли использовать литералы в запросах 1С?
Да, в тексте запроса допустимы числовые, строковые и булевы литералы, а также значения перечислений через ЗНАЧЕНИЕ(). Однако для дат и изменяемых значений рекомендуется использовать параметры запроса (&Параметр) — это безопаснее и позволяет СУБД эффективнее кэшировать план запроса.
Что такое '00010101' и зачем она нужна?
Это литерал пустой даты — первое января первого года. Незаполненные реквизиты типа «Дата» хранят именно это значение. Сравнение с '00010101' — стандартный способ проверить, задана ли дата, хотя для универсальной проверки заполненности чаще используют функцию ЗначениеЗаполнено().
Чем NULL отличается от Неопределено?
NULL возникает при работе с запросами, когда поле не имеет значения (например, при левом соединении без совпадений). Неопределено — значение незаполненных реквизитов составного типа и результат функций без возврата. Это разные значения разных типов, и сравнение NULL = Неопределено даст ложь.
Что важно запомнить
Литерал — это значение прямо в коде: числа с точкой, строки в двойных кавычках, даты в одинарных кавычках формата ГГГГММДД, Истина/Ложь и NULL. Проверяйте модули синтаксической проверкой, а повторяющиеся или изменяемые значения выносите в константы и настройки.