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

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

1С: как проверить строку на пустоту

Как в 1С проверить строку на пустоту: функция ПустаяСтрока, СокрЛП, СтрДлина, проверка пробелов и незаполненных реквизитов. Примеры кода и типичные ошибки.

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

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

Ниже разобраны основные способы проверки, их отличия, работа с реквизитами объектов и запросами, а также типичные ошибки и готовые фрагменты кода, которые можно переносить в свою конфигурацию.

Функция ПустаяСтрока: основной способ проверки

Функция ПустаяСтрока(<Строка>) принимает один параметр — проверяемое строковое значение — и возвращает булево значение. Логика работы: перед проверкой платформа удаляет из строки незначащие символы (пробелы, табуляции, переводы строк), и если после этого ничего не осталось, результат — Истина.

Строка1 = "";

Строка2 = " ";

Строка3 = "Текст";

ПустаяСтрока(Строка1); // Истина

ПустаяСтрока(Строка2); // Истина — только пробелы

ПустаяСтрока(Строка3); // Ложь

Типичное применение — проверка перед записью или выводом сообщения пользователю:

Если ПустаяСтрока(Наименование) Тогда

Сообщить("Не заполнено наименование!");

Возврат;

КонецЕсли;

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

Начинающие разработчики часто пишут Если Строка = "" Тогда. Такая проверка формально работает, но только для строк строго нулевой длины. Если пользователь ввёл в поле несколько пробелов, сравнение вернёт Ложь, и программа воспримет пустое по смыслу значение как заполненное.

СпособСтрока ""Строка " " (пробелы)Когда применять
ПустаяСтрока(Строка)ИстинаИстинаУниверсальная проверка значащего содержимого
Строка = ""ИстинаЛожьСтрогая проверка нулевой длины
СтрДлина(СокрЛП(Строка)) = 0ИстинаИстинаАналог ПустаяСтрока, избыточен в большинстве случаев

Из таблицы видно, что ПустаяСтрока покрывает оба сценария и является предпочтительным вариантом. Конструкция СтрДлина(СокрЛП(Строка)) = 0 даёт тот же результат, но длиннее, медленнее читается и не даёт преимуществ.

Типичные ошибки
01
Сравнение Строка = "" вместо ПустаяСтрока — строка из пробелов проходит проверку как заполненная
02
Применение ПустаяСтрока к значению Неопределено или NULL без предварительной проверки типа — возможна ошибка исполнения в строгих контекстах
03
Проверка числового реквизита функцией ПустаяСтрока вместо ЗначениеЗаполнено — смешение семантики типов

Проверка с очисткой пробелов: СокрЛП и СокрЛ

Иногда недостаточно проверить строку — нужно ещё и нормализовать её перед сохранением. Для этого служат функции СокрЛП() (удаляет пробелы слева и справа), СокрЛ() (только слева) и СокрП() (только справа).

Комментарий = СокрЛП(Комментарий);

Если ПустаяСтрока(Комментарий) Тогда

Комментарий = "Не указан";

КонецЕсли;

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

Обратный сценарий — когда пробелы значимы. Например, в паролях или кодах маркировки ведущие и хвостовые символы нельзя трогать. В таких случаях применяйте только ПустаяСтрока для проверки и не вызывайте СокрЛП без необходимости.

Проверка реквизитов объектов: ЗначениеЗаполнено

Если нужно проверить не строку, а реквизит произвольного типа (ссылку, число, дату), правильный инструмент — ЗначениеЗаполнено(). Она возвращает Ложь для пустых ссылок, нулевых дат, значения Неопределено и пустых строк.

Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда

Сообщить("Не выбран контрагент!");

КонецЕсли;

Для строковых реквизитов обе функции во многом взаимозаменимы, но есть различие: ЗначениеЗаполнено для строки из одних пробелов может вернуть Истина, так как формально значение задано. Если важно именно содержимое строки, надёжнее ПустаяСтрока или связка с СокрЛП.

Маршрут решения

Как выбрать функцию

Проверяется строковая переменная или строковый реквизитИспользуйте ПустаяСтрока — она учитывает пробельные строки
Проверяется ссылка, число, дата или реквизит составного типаИспользуйте ЗначениеЗаполнено
Значение может быть Неопределено или NULL из запросаСначала проверьте тип, затем применяйте соответствующую функцию
Проверка выполняется в тексте запросаИспользуйте сравнение с "" или ПОДОБНО в условии ГДЕ

Проверка пустой строки в запросах

В языке запросов 1С функции ПустаяСтрока нет. Проверка выполняется сравнением с литералом пустой строки или через оператор ПОДОБНО:

ВЫБРАТЬ

Номенклатура.Ссылка

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.Артикул = ""

Учитывайте важную особенность строковых реквизитов неограниченной длины и полей типа ХранилищеЗначения: сравнение для них в запросе может работать иначе, а строки неограниченной длины в условиях лучше проверять через ПОДОБНО или предварительно приводить к фиксированной длине функцией ВЫРАЗИТЬ.

Ещё одна ловушка — NULL в левых соединениях. Сравнение Поле = "" не сработает для NULL, поэтому комбинируйте условия:

ГДЕ

Таблица.Поле ЕСТЬ NULL

ИЛИ Таблица.Поле = ""

Практический пример: валидация формы перед записью

Типовая задача — перед записью элемента справочника проверить обязательные строковые поля и собрать все ошибки в одно сообщение, а не прерываться на первой:

Ошибки = "";

Если ПустаяСтрока(Объект.Наименование) Тогда

Ошибки = Ошибки + "- не заполнено наименование;" + Символы.ПС;

КонецЕсли;

Если ПустаяСтрока(СокрЛП(Объект.Адрес)) Тогда

Ошибки = Ошибки + "- не указан адрес;" + Символы.ПС;

КонецЕсли;

Если Не ПустаяСтрока(Ошибки) Тогда

Сообщить("Заполните обязательные поля:" + Символы.ПС + Ошибки);

Отказ = Истина;

КонецЕсли;

Обратите внимание: переменная Ошибки сама проверяется через ПустаяСтрока — это удобный приём накопления сообщений. Если строка осталась пустой, значит, ошибок не было.

Порядок действий при проверке строки
  1. 1
    Определите тип проверяемого значения: строка, ссылка, число или результат запроса
  2. 2
    Для строки вызовите ПустаяСтрока(Значение) в условии Если
  3. 3
    При необходимости предварительно очистите строку функцией СокрЛП
  4. 4
    Для нетроковых типов используйте ЗначениеЗаполнено
  5. 5
    В запросах замените проверку сравнением с "" и обработкой NULL
  6. 6
    Протестируйте на трёх случаях: пустая строка, строка из пробелов, заполненная строка

Проверка значений Неопределено и NULL

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

Если Параметр = Неопределено

Или ПустаяСтрока(Параметр) Тогда

Параметр = "Значение по умолчанию";

КонецЕсли;

Порядок условий важен: сначала проверка на Неопределено, затем проверка содержимого. Для значений из запроса, где возможен NULL, применяйте функцию ЕСТЬNULL(Поле, "") прямо в тексте запроса — тогда на уровень кода придёт уже гарантированная строка.

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

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

Строка "" проходит проверку
Норма

ПустаяСтрока возвращает Истина

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

Возвращает Ложь — проверьте, какая функция используется

Строка из пробелов " "
Норма

ПустаяСтрока возвращает Истина

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

Используется сравнение с "" — замените на ПустаяСтроку

Значение NULL из запроса
Норма

Обработано через ЕСТЬNULL или ЕСТЬ NULL

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

Проверка молча пропускает такие записи

Производительность и читаемость кода

С точки зрения производительности разница между ПустаяСтрока и сравнением с пустой строкой несущественна для обычных сценариев. Выбирать способ следует по смыслу: ПустаяСтрока читается однозначно и сразу сообщает другому разработчику намерение проверить именно содержимое.

Для массовых обработок, где проверка выполняется в цикле по сотням тысяч записей, лучше выносить фильтрацию на уровень запроса: отобрать записи с непустыми полями условием ГДЕ дешевле, чем перебирать всё в коде и проверять каждую строку отдельно.

Итог

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

Для строк используйте ПустаяСтрока — она ловит и пустые строки, и строки из пробелов. Для ссылок, чисел и дат — ЗначениеЗаполнено. В запросах проверяйте сравнением с "" и не забывайте про NULL. Сравнение Строка = "" надёжно только для строго нулевой длины.

Частые вопросы

Чем ПустаяСтрока отличается от ЗначениеЗаполнено?

ПустаяСтрока работает только со строками и считает пустой строку из пробелов. ЗначениеЗаполнено универсальна: проверяет ссылки, числа, даты, Неопределено, но для строки из пробелов может вернуть Истина, так как формально значение задано.

Почему проверка Строка = "" не срабатывает для поля, введённого пользователем?

Скорее всего, пользователь ввёл пробелы. Такая строка не равна пустой, поэтому сравнение возвращает Ложь. Замените проверку на ПустаяСтрока(Строка) — она отсекает незначащие символы.

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

Прямое сравнение с "" может быть недоступно или работать некорректно. Используйте оператор ПОДОБНО с шаблоном или приведите поле к фиксированной длине через ВЫРАЗИТЬ(Поле КАК Строка(1)) и сравните результат.

Можно ли применять ПустаяСтрока к числу или дате?

Это бессмысленно: функция предназначена для строк. Для чисел, дат и ссылок используйте ЗначениеЗаполнено, которая корректно интерпретирует пустые значения каждого типа.

Как проверить, что строка состоит только из пробелов и переносов?

Достаточно вызвать ПустаяСтрока(Строка): она игнорирует пробелы, табуляции и переводы строк и вернёт Истина, если других символов нет. Отдельная проверка не требуется.

Что вернёт ПустаяСтрока для значения Неопределено?

Поведение зависит от контекста исполнения, поэтому полагаться на него не стоит. Надёжный шаблон — сначала проверить Значение = Неопределено, и только затем вызывать ПустаяСтрока для содержимого.