1с запрос получить длину строки

Как узнать длину строки в запросе 1С:Предприятие 8? Разбираем функцию ДЛИНАСТРОКИ, нюансы файлового и клиент-серверного режимов и живые примеры.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

При работе с языком запросов 1С:Предприятие 8 нередко возникает задача определить длину строкового значения — например, для проверки корректности заполнения реквизитов, фильтрации данных или поиска аномалий в справочниках. В этой статье подробно разберём, какие инструменты для этого существуют, как они работают в файловом и клиент-серверном вариантах, а также рассмотрим практические примеры.

Функция ДЛИНАСТРОКИ

Основной и самый правильный способ получить длину строки в запросе 1С — использовать встроенную функцию языка запросов ДЛИНАСТРОКИ (в английском синтаксисе — LENGTH).

Синтаксис

Функция принимает один параметр, строковое выражение, и возвращает число, количество символов в строке:

ДЛИНАСТРОКИ(<СтроковоеВыражение>)

Пример использования

Допустим, нужно выбрать всех контрагентов и узнать длину их наименования:

ВЫБРАТЬ
 Контрагенты.Наименование КАК Наименование,
 ДЛИНАСТРОКИ(Контрагенты.Наименование) КАК ДлинаНаименования
ИЗ
 Справочник.Контрагенты КАК Контрагенты

Функцию можно использовать не только в списке выборки, но и в условиях. Например, найдём контрагентов, у которых наименование подозрительно короткое (возможно, заполнено некорректно):

ВЫБРАТЬ
 Контрагенты.Ссылка КАК Контрагент,
 Контрагенты.Наименование КАК Наименование
ИЗ
 Справочник.Контрагенты КАК Контрагенты
ГДЕ

 ДЛИНАСТРОКИ(Контрагенты.Наименование) < 3

Особенности работы функции
  • Пробелы учитываются. Функция считает все символы, включая пробелы в начале, середине и конце строки. Если нужно исключить крайние пробелы, предварительно применяйте функцию СОКРЛП: ДЛИНАСТРОКИ(СОКРЛП(Поле)).
  • NULL-значения. Если строковое выражение равно NULL, результат функции также будет NULL. При необходимости используйте ЕСТЬNULL.
  • Строки неограниченной длины. Функция корректно работает и с реквизитами типа «Строка» неограниченной длины.

Альтернативный способ: функция ПОДСТРОКА

В старых версиях платформы (до появления ДЛИНАСТРОКИ) длину строки иногда определяли косвенно через функцию ПОДСТРОКА. Однако у этого подхода есть важная особенность в клиент-серверном варианте работы: функция ПОДСТРОКА выполняется на стороне СУБД, и её поведение может отличаться в зависимости от используемой базы данных (MS SQL Server, PostgreSQL, Oracle, IBM DB2). В частности, известны особенности с обработкой конечных пробелов и ограничения на типы данных, к которым функция применима.

Поэтому для определения длины строки рекомендуеться использовать именно ДЛИНАСТРОКИ — она работает единообразно во всех вариантах работы и на всех поддерживаемых СУБД.

Практические примеры

Поиск дублей по ИНН с неверной длиной
ВЫБРАТЬ
 Контрагенты.Наименование КАК Наименование,
 Контрагенты.ИНН КАК ИНН
ИЗ
 Справочник.Контрагенты КАК Контрагенты
ГДЕ
 НЕ ДЛИНАСТРОКИ(СОКРЛП(Контрагенты.ИНН)) В (10, 12)
 И Контрагенты.ИНН <> ""

Сортировка по длине строки
ВЫБРАТЬ
 Товары.Наименование КАК Наименование
ИЗ
 Справочник.Номенклатура КАК Товары
УПОРЯДОЧИТЬ ПО
 ДЛИНАСТРОКИ(Товары.Наименование) УБЫВ

Длина строки во встроенном языке

Не путайте функцию языка запросов с функцией встроенного языка СтрДлина, которая применяеться в коде модулей:

Длина = СтрДлина("Пример строки"); // вернёт 14

Функция СтрДлина работает только в коде и не может использоваться внутри текста запроса.

Для получения длины строки в запросе 1С используйте функцию ДЛИНАСТРОКИ. Она проста в применении, работает в секциях ВЫБРАТЬ, ГДЕ, УПОРЯДОЧИТЬ ПО и корректно функционирует как в файловом, так и в клиент-серверном варианте работы. Не забывайте про особенности учёта пробелов и NULL-значений — это поможет избежать ошибок при анализе данных.