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

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

Литералы в 1С: что это и как их использовать

Литералы в 1С: что это такое, виды литералов (числа, строки, даты, булево), правила записи, типичные ошибки и примеры кода на встроенном языке.

Литерал в 1С — это значение, записанное прямо в тексте программного кода, а не вычисленное в процессе выполнения. Когда разработчик пишет Цена = 1500;, число 1500 — это литерал. Когда пишет Имя = "Иван";, строка в кавычках — тоже литерал. Понимание того, как платформа интерпретирует такие записи, критично: неправильно записанный литерал приводит либо к синтаксической ошибке, либо к тихой логической ошибке, которую трудно отловить.

Тема актуальна и для начинающих разработчиков, и для администраторов, которые изредка правят код в расширениях или внешних обработках. Ошибки в литералах дат и чисел — одна из самых частых причин неверных расчётов в самописных доработках.

Ниже разобраны все виды литералов встроенного языка 1С, правила их записи, типичные ошибки и способы проверить корректность кода до запуска в рабочей базе.

Что такое литерал и чем он отличается от переменной

Литерал — это константное значение, «зашитое» в исходный код. Оно не меняется при выполнении программы: сколько раз ни запускай процедуру, литерал 100 останется числом 100. Переменная, напротив, — это именованная область, значение которой может меняться в ходе работы программы.

Ключевое отличие в том, как платформа получает значение. Для литерала значение известно уже на этапе компиляции модуля. Для переменной — только в момент выполнения. Поэтому конструкция НДС = 20; всегда даст число 20, а НДС = ПолучитьСтавкуНДС(); зависит от того, что вернёт функция.

На практике литералы используют для задания начальных значений, сравнений, формирования текстов сообщений и установки дат. Злоупотреблять ими не стоит: значения, которые могут измениться (ставки налогов, номера счетов, реквизиты организации), лучше выносить в константы, регистры сведений или настройки, а не «зашивать» литералами в код.

Числовые литералы: целые и дробные числа

Числовой литерал записывается как обычное число без кавычек. Целая часть от дробной отделяется точкой, а не запятой — это частая ошибка у тех, кто привык к русской записи чисел. Правильно: Ставка = 0.2;. Запись 0,2 вызовет синтаксическую ошибку, потому что запятая в языке 1С — разделитель параметров.

Допускаются отрицательные числа со знаком минус: Дельта = -15;. Пробелы внутри числа и разделители разрядов не используются: 1 000 000 — ошибка, нужно писать 1000000.

Пример типичного кода:

Сумма = 15000.50;

Количество = 3;

Скидка = -500;

Важно помнить об ограничениях точности. Платформа 1С работает с числами ограниченной разрядности, и при операциях с дробными значениями возможны ошибки округления. Для денежных расчётов сравнение дробных чисел на строгое равенство (Если Сумма = 0.3 Тогда) ненадёжно — корректнее сравнивать с допуском или использовать округление через Окр().

Строковые литералы и переносы строк

Строковый литерал заключается в двойные кавычки: Текст = "Накладная № 15";. Если внутри строки нужна сама кавычка, её удваивают: "Фирма ""Ромашка""" — в результате получится строка Фирма "Ромашка".

Многострочные строковые литералы записываются с помощью символа вертикальной черты | в начале каждой следующей строки:

ТекстПисьма = "Уважаемый клиент!

|Ваш заказ сформирован.

|Ожидайте доставку.";

Без вертикальной черты перенос строки внутри литерала вызовет синтаксическую ошибку. Альтернатива — конкатенация с символом переноса: "Строка1" + Символы.ПС + "Строка2". Этот вариант нагляднее, когда текст собирается из частей.

Отдельный случай — пустая строка "". Она не равна Неопределено и не равна строке из пробелов. Проверку на пустоту корректно выполнять функцией ПустаяСтрока(), которая считает пустой и строку из одних пробельных символов.

Литералы даты: формат и подводные камни

Литерал даты записывается в одинарных кавычках (апострофах) в формате ГГГГММДД: '20260115' — 15 января 2026 года. Можно добавить время: '20260115143000' — 14 часов 30 минут 00 секунд. Допустимы разделители: '2026-01-15' или '15.01.2026' — платформа распознает оба варианта, но каноническим считается формат без разделителей или с ними в порядке год-месяц-день.

Главная ловушка — порядок дня и месяца. Запись '01.02.2026' может быть воспринята не так, как ожидал разработчик, если он мыслил в формате «день.месяц», а платформа интерпретировала иначе. Надёжнее всегда использовать формат ГГГГММДД — он однозначен и не зависит от региональных настроек.

Пустая дата записывается как '00010101' — это аналог «нулевого» значения для типа Дата. Сравнение реквизита с пустой датой — стандартный приём проверки, заполнено ли поле:

Если Документ.ДатаОтгрузки = '00010101' Тогда

Сообщить("Дата отгрузки не указана");

КонецЕсли;

Типичные ошибки
01
Запись дробного числа через запятую (0,2) — синтаксическая ошибка, запятая воспринимается как разделитель параметров
02
Дата в неоднозначном формате ('01.02.2026') — риск перепутать день и месяц; используйте '20260201'
03
Одинарная кавычка внутри строки вместо удвоенной двойной — строка обрывается раньше времени
04
Сравнение строки с числом без преобразования типов — неявное приведение даёт неожиданный результат
05
Использование Неопределено там, где нужна пустая строка или пустая дата — сравнение не срабатывает

Булевы и специальные значения

Булевы литералы — это ключевые слова Истина и Ложь. Они пишутся без кавычек; запись "Истина" — это уже строка, а не булево значение, и сравнение Флаг = "Истина" не сработает так, как ожидается.

Кроме булевых, в языке есть специальные значения, которые формально не всегда называют литералами, но используются аналогично:

  • Неопределено — значение по умолчанию для неинициализированных данных, часто возвращается функциями при отсутствии результата;
  • NULL — значение из запросов, обозначающее отсутствие данных при соединении таблиц; сравнивать с ним нужно через ЕСТЬ NULL в запросе или функцию ЕстьNULL();
  • Пустые ссылки на объекты — получаются не литералом, а методом ПустаяСсылка() соответствующего менеджера.

Различие между NULL и Неопределено принципиально: NULL живёт только в результатах запросов, Неопределено — во встроенном языке. Путаница между ними — частый источник ошибок при обработке выборок.

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

Конфигуратор выполняет синтаксическую проверку модуля без запуска базы: меню «Конфигурация» → «Проверка конфигурации» или клавиша Ctrl+F7 в модуле. Эта проверка ловит незакрытые кавычки, неверные разделители и неправильный формат литералов.

Логические ошибки синтаксическая проверка не найдёт. Для них полезны отладка с остановкой на строке сравнения и вывод типов значений через ТипЗнч(). Если сравнение ведёт себя странно, первым делом проверьте, совпадают ли типы обеих сторон.

Порядок проверки литералов в коде
  1. 1
    Откройте модуль и выполните синтаксическую проверку (Ctrl+F7) — исправьте все ошибки компиляции
  2. 2
    Найдите все сравнения с литералами и убедитесь, что тип литерала совпадает с типом проверяемого значения
  3. 3
    Проверьте даты: формат должен быть 'ГГГГММДД', без зависимости от региональных настроек
  4. 4
    В отладчике остановитесь на строке сравнения и посмотрите фактические значения и типы через ТипЗнч()
  5. 5
    Прогоните сценарий на копии базы с граничными значениями: пустая дата, ноль, пустая строка

Когда литералы заменить настройками

Литералы уместны для значений, которые не меняются никогда: количество месяцев в году, признак «да/нет», форматные строки. Всё, что может измениться по решению бизнеса — ставки, лимиты, сроки, реквизиты, — в коде литералами оставлять опасно: для изменения такого значения придётся править конфигурацию и обновлять базу.

Правильные альтернативы: константы для одиночных значений, регистры сведений для значений с разрезами (по организации, по периоду), дополнительные реквизиты и сведения для пользовательских настроек. Тогда изменение ставки выполняет пользователь через интерфейс, а не программист через код.

Сравнение вариантов хранения значений

Литерал в коде

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

Константа

Одно значение на всю базу (ставка, реквизит). Меняется пользователем без доработок

Регистр сведений

Значения с разрезами или историей (курсы, ставки по периодам). Требует чуть больше кода для чтения

Функциональная опция / настройки

Включение-выключение поведения. Подходит для переключателей, но не для вычисляемых величин

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

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

Синтаксис модуля
Норма

Проверка конфигурации завершается без ошибок

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

Сообщения о незакрытых кавычках или неверном формате даты

Типы в сравнениях
Норма

ТипЗнч() слева и справа даёт одинаковый тип

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

Сравниваются Строка и Число или Дата и Строка

Поведение на граничных данных
Норма

Пустая дата, ноль и пустая строка обрабатываются корректно

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

Код «падает» или пропускает записи с пустыми значениями

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

Чем литерал отличается от константы в 1С?

Литерал — это значение прямо в коде, оно существует только внутри модуля. Константа — объект конфигурации, значение которой хранится в базе данных и может меняться пользователем через интерфейс без правки кода. Для изменяемых настроек используйте константы, для неизменных величин достаточно литералов.

Почему сравнение с датой '01.02.2026' работает неправильно?

Формат с разделителями может интерпретироваться неоднозначно в зависимости от настроек. Надёжный формат литерала даты — ГГГГММДД: запись '20260201' однозначно означает 1 февраля 2026 года и не зависит от региональных параметров.

Как записать кавычку внутри строкового литерала?

Удвоить её: "ООО ""Вектор""" даст строку ООО "Вектор". Одиночная кавычка внутри строки завершит литерал раньше времени и вызовет синтаксическую ошибку.

Чем NULL отличается от Неопределено?

NULL возникает только в результатах запросов при отсутствии сопоставленных данных (например, при левом соединении). Неопределено — значение встроенного языка для неинициализированных данных. В запросе NULL проверяют конструкцией «ЕСТЬ NULL», в коде Неопределено сравнивают напрямую.

Можно ли писать дробное число через запятую?

Нет. Разделитель дробной части в литералах 1С — только точка: 0.25. Запятая используется как разделитель аргументов, поэтому запись 0,25 вызовет синтаксическую ошибку при проверке модуля.

Как проверить, что строка пустая, а не содержит пробелы?

Используйте функцию ПустаяСтрока(Значение): она возвращает Истина и для пустой строки, и для строки из пробелов и непечатных символов. Сравнение с литералом "" такие случаи не отловит.

Итог

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

Литерал — это значение, записанное прямо в коде: число с точкой, строка в двойных кавычках, дата в апострофах в формате ГГГГММДД, Истина/Ложь без кавычек. Тип литерала определяется формой записи, поэтому большинство ошибок — это неверный разделитель или кавычки. Изменяемые бизнесом значения выносите в константы и регистры, а доработки проверяйте на копии базы.