Разработка и Конфигурация · 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' Тогда
Сообщить("Дата отгрузки не указана");
КонецЕсли;
Булевы и специальные значения
Булевы литералы — это ключевые слова Истина и Ложь. Они пишутся без кавычек; запись "Истина" — это уже строка, а не булево значение, и сравнение Флаг = "Истина" не сработает так, как ожидается.
Кроме булевых, в языке есть специальные значения, которые формально не всегда называют литералами, но используются аналогично:
Неопределено— значение по умолчанию для неинициализированных данных, часто возвращается функциями при отсутствии результата;NULL— значение из запросов, обозначающее отсутствие данных при соединении таблиц; сравнивать с ним нужно черезЕСТЬ NULLв запросе или функциюЕстьNULL();- Пустые ссылки на объекты — получаются не литералом, а методом
ПустаяСсылка()соответствующего менеджера.
Различие между NULL и Неопределено принципиально: NULL живёт только в результатах запросов, Неопределено — во встроенном языке. Путаница между ними — частый источник ошибок при обработке выборок.
Как проверить код с литералами до запуска
Конфигуратор выполняет синтаксическую проверку модуля без запуска базы: меню «Конфигурация» → «Проверка конфигурации» или клавиша Ctrl+F7 в модуле. Эта проверка ловит незакрытые кавычки, неверные разделители и неправильный формат литералов.
Логические ошибки синтаксическая проверка не найдёт. Для них полезны отладка с остановкой на строке сравнения и вывод типов значений через ТипЗнч(). Если сравнение ведёт себя странно, первым делом проверьте, совпадают ли типы обеих сторон.
- 1Откройте модуль и выполните синтаксическую проверку (Ctrl+F7) — исправьте все ошибки компиляции
- 2Найдите все сравнения с литералами и убедитесь, что тип литерала совпадает с типом проверяемого значения
- 3Проверьте даты: формат должен быть 'ГГГГММДД', без зависимости от региональных настроек
- 4В отладчике остановитесь на строке сравнения и посмотрите фактические значения и типы через ТипЗнч()
- 5Прогоните сценарий на копии базы с граничными значениями: пустая дата, ноль, пустая строка
Когда литералы заменить настройками
Литералы уместны для значений, которые не меняются никогда: количество месяцев в году, признак «да/нет», форматные строки. Всё, что может измениться по решению бизнеса — ставки, лимиты, сроки, реквизиты, — в коде литералами оставлять опасно: для изменения такого значения придётся править конфигурацию и обновлять базу.
Правильные альтернативы: константы для одиночных значений, регистры сведений для значений с разрезами (по организации, по периоду), дополнительные реквизиты и сведения для пользовательских настроек. Тогда изменение ставки выполняет пользователь через интерфейс, а не программист через код.
Сравнение вариантов хранения значений
Подходит для неизменных величин. Минус: любое изменение требует правки конфигурации и обновления
Одно значение на всю базу (ставка, реквизит). Меняется пользователем без доработок
Значения с разрезами или историей (курсы, ставки по периодам). Требует чуть больше кода для чтения
Включение-выключение поведения. Подходит для переключателей, но не для вычисляемых величин
Как проверить результат
Проверка конфигурации завершается без ошибок
Сообщения о незакрытых кавычках или неверном формате даты
ТипЗнч() слева и справа даёт одинаковый тип
Сравниваются Строка и Число или Дата и Строка
Пустая дата, ноль и пустая строка обрабатываются корректно
Код «падает» или пропускает записи с пустыми значениями
Часто задаваемые вопросы
Чем литерал отличается от константы в 1С?
Литерал — это значение прямо в коде, оно существует только внутри модуля. Константа — объект конфигурации, значение которой хранится в базе данных и может меняться пользователем через интерфейс без правки кода. Для изменяемых настроек используйте константы, для неизменных величин достаточно литералов.
Почему сравнение с датой '01.02.2026' работает неправильно?
Формат с разделителями может интерпретироваться неоднозначно в зависимости от настроек. Надёжный формат литерала даты — ГГГГММДД: запись '20260201' однозначно означает 1 февраля 2026 года и не зависит от региональных параметров.
Как записать кавычку внутри строкового литерала?
Удвоить её: "ООО ""Вектор""" даст строку ООО "Вектор". Одиночная кавычка внутри строки завершит литерал раньше времени и вызовет синтаксическую ошибку.
Чем NULL отличается от Неопределено?
NULL возникает только в результатах запросов при отсутствии сопоставленных данных (например, при левом соединении). Неопределено — значение встроенного языка для неинициализированных данных. В запросе NULL проверяют конструкцией «ЕСТЬ NULL», в коде Неопределено сравнивают напрямую.
Можно ли писать дробное число через запятую?
Нет. Разделитель дробной части в литералах 1С — только точка: 0.25. Запятая используется как разделитель аргументов, поэтому запись 0,25 вызовет синтаксическую ошибку при проверке модуля.
Как проверить, что строка пустая, а не содержит пробелы?
Используйте функцию ПустаяСтрока(Значение): она возвращает Истина и для пустой строки, и для строки из пробелов и непечатных символов. Сравнение с литералом "" такие случаи не отловит.
Что важно запомнить
Литерал — это значение, записанное прямо в коде: число с точкой, строка в двойных кавычках, дата в апострофах в формате ГГГГММДД, Истина/Ложь без кавычек. Тип литерала определяется формой записи, поэтому большинство ошибок — это неверный разделитель или кавычки. Изменяемые бизнесом значения выносите в константы и регистры, а доработки проверяйте на копии базы.