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

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

Как определить строку в 1С

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

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

Строковые значения в 1С заключаются в двойные кавычки. Если внутри строки нужна кавычка, она удваивается. Многострочные литералы оформляются через вертикальную черту в начале каждой строки. Эти правила синтаксиса — первое, что нужно знать, чтобы корректно определить строку в модуле.

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

Как объявить строковую переменную в коде

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

НаименованиеКлиента = "ООО Ромашка";

ПустаяСтрока = "";

ТекстСКавычкой = "Организация ""Вектор"" зарегистрирована";

В третьем примере видно правило экранирования: двойная кавычка внутри строки пишется дважды. Если написать одну кавычку, компилятор выдаст синтаксическую ошибку, так как посчитает строку завершённой.

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

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

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

|С уважением, менеджер";

Строки складываются оператором «+» (конкатенация). При этом если одно из слагаемых — число или дата, 1С попытается выполнить преобразование, но надёжнее явно использовать функцию Строка() или форматирование через СтрШаблон.

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

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

Если ТипЗнч(ЗначениеРеквизита) = Тип("Строка") Тогда

// обработка строки

КонецЕсли;

Такая проверка обязательна перед вызовом строковых функций: если передать в СокрЛП число или ссылку, возникнет ошибка исполнения. Это особенно актуально при обмене данными, где тип поля в файле может не совпадать с ожидаемым.

Основные функции работы со строками

Встроенный язык предоставляет набор функций для анализа и преобразования строк. Ниже — те, что применяются чаще всего.

ФункцияНазначениеПример результата
СтрДлина(Строка)Длина строки в символахСтрДлина("АБВ") = 3
СокрЛП(Строка)Удаление пробелов слева и справаСокрЛП(" текст ") = "текст"
Лев(Строка, N)Первые N символовЛев("Артикул", 3) = "Арт"
Прав(Строка, N)Последние N символовПрав("Артикул", 3) = "кул"
Найти(Строка, Подстрока)Позиция подстроки (0 — не найдено)Найти("1С:Предприятие", "Пред") = 4
СтрЗаменить(Строка, Что, НаЧто)Замена всех вхожденийзамена запятых на точки
ВРег / НРегВерхний / нижний регистрВРег("абв") = "АБВ"
СтрШаблон(Шаблон, П1, П2...)Подстановка параметров в шаблонСтрШаблон("Заказ №%1", Номер)

Обратите внимание на функцию Найти: она возвращает позицию начиная с единицы, а значение 0 означает, что подстрока не найдена. Проверка «Если Найти(...) Тогда» сработает корректно, поскольку 0 приводится к Ложь, но для читаемости лучше писать явное сравнение «> 0».

bsl
СтрокаАртикула = СокрЛП(СтрокаДанных);
Если СтрДлина(СтрокаАртикула) > 0 И Найти(СтрокаАртикула, "-") > 0 Тогда
    Префикс = Лев(СтрокаАртикула, Найти(СтрокаАртикула, "-") - 1);
КонецЕсли;

Строки в реквизитах объектов конфигурации

В справочниках и документах строковые реквизиты настраиваются в конфигураторе через свойство «Тип» → «Строка» с указанием длины. Длина может быть фиксированной или переменной, ограниченной или неограниченной.

Фиксированная длина означает, что значение дополняется пробелами справа до указанного размера. Это влияет на сравнение и поиск: строка фиксированной длины 10 со значением "АБВ" фактически хранит "АБВ" плюс семь пробелов. Поэтому перед сравнением таких значений применяют СокрЛП.

Неограниченная строка (длина 0) удобна для многострочных полей — комментариев, описаний. Ограничение: неограниченные строки нельзя использовать в индексах и в некоторых сравнениях запросов без приведения через ВЫРАЗИТЬ.

Определение строки в запросах

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

ВЫБРАТЬ

Номенклатура.Наименование

ИЗ

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

ГДЕ

Номенклатура.Наименование ПОДОБНО "%кабель%";

Символ «%» в шаблоне означает любую последовательность символов, «_» — ровно один символ. Поиск с ПОДОБНО по началу строки работает быстрее, чем с ведущим процентом, так как может использовать индекс.

Для приведения неограниченной строки к ограниченной в запросе используется ВЫРАЗИТЬ(Поле КАК Строка(100)). Это необходимо, например, при группировке или соединении по строковому полю неограниченной длины.

Преобразование других типов в строку и обратно

Любое значение можно превратить в строку функцией Строка(Значение). Для чисел и дат результат зависит от региональных настроек сеанса, поэтому для формирования машиночитаемых строк (в файлах обмена, URL) применяйте Формат с явной строкой формата.

Обратное преобразование выполняется через функции Число() и Дата(), но они генерируют ошибку при некорректном входном значении. Безопасный шаблон — проверка через попытку или предварительный анализ содержимого строки.

Порядок безопасного преобразования строки в число
  1. 1
    Очистите строку от пробелов функцией СокрЛП
  2. 2
    Проверьте, что строка не пустая: СтрДлина > 0
  3. 3
    Убедитесь, что в строке только цифры и разделитель (например, через СтрЗаменить и проверку)
  4. 4
    Выполните преобразование внутри конструкции Попытка...Исключение
  5. 5
    Проверьте результат на допустимый диапазон значений

Типичные ошибки при работе со строками

Большинство проблем со строками в 1С связаны не с синтаксисом, а с невнимательностью к типам и форматам данных.

Типичные ошибки
01
Сравнение строк без СокрЛП — значения с пробелами считаются разными, поиск «не находит» существующие данные
02
Конкатенация строки с числом без явного преобразования — в результат попадают разделители групп или пробелы из региональных настроек
03
Использование одинарной кавычки внутри строки вместо удвоенной двойной — синтаксическая ошибка модуля
04
Сокращение длины строкового реквизита без проверки данных — потеря окончаний значений при реструктуризации
05
Поиск ПОДОБНО с ведущим «%» по большой таблице — полное сканирование и медленный запрос

Отдельная группа ошибок — работа с многострочными строками. Переносы строк в значениях реквизитов при выгрузке в файлы могут ломать формат обмена, поэтому перед выгрузкой переносы заменяют на пробелы или специальные маркеры через СтрЗаменить с Символы.ПС.

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

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

Значение строковой переменной
Норма

В отладчике тип значения отображается как «Строка»

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

Тип «Число» или «Неопределено» — присваивание выполнено неправильно

Сравнение двух строк
Норма

Строки после СокрЛП и приведения регистра совпадают

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

Визуально одинаковые строки не равны — есть скрытые пробелы или разный регистр

Длина значения в реквизите
Норма

Фактическая длина не превышает длину реквизита

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

Значения обрезаны — длина реквизита меньше реальных данных

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

Чем отличается Строка(Значение) от Формат(Значение)?

Строка() возвращает стандартное представление значения с учётом региональных настроек сеанса, а Формат() позволяет задать точную строку формата — например, вывести дату как «ГГГГММДД» или число без разделителей групп. Для обмена данными предпочтителен Формат, так как результат предсказуем.

Как проверить, что строка пустая?

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

Можно ли изменить символ внутри строки по индексу?

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

Как разбить строку на части по разделителю?

Используйте функцию СтрРазделить(Строка, Разделитель) — она возвращает массив подстрок. Обратная операция — СтрСоединить(Массив, Разделитель). В старых версиях платформы, где этих функций нет, применяют цикл с Найти и Лев.

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

В запросах сравнение может учитывать настройки сортировки базы данных и дополнительные пробелы фиксированных строк, а в коде сравнение идёт посимвольно. Приведите оба значения через СокрЛП и один регистр, а в запросе — через ВЫРАЗИТЬ к одинаковой длине.

Есть ли ограничение на длину строки в переменной?

Для переменных встроенного языка практическое ограничение длины строки очень велико и в обычных задачах не достигается. Ограничения актуальны для реквизитов объектов, где длина задаётся явно, и для строковых литералов в коде, которые разумно разбивать на части для читаемости.

Итог

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

Строка в 1С объявляется литералом в двойных кавычках, тип проверяется через ТипЗнч и Тип("Строка"), а обработка ведётся встроенными функциями СтрДлина, СокрЛП, Найти, СтрЗаменить и СтрШаблон. Перед сравнением строк убирайте пробелы и выравнивайте регистр, а при изменении длины строковых реквизитов в базе сначала делайте копию и проверяйте данные.