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

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

Как вернуть строку в 1С: функции, процедуры и работа с текстом

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

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

Основной инструмент возврата значения — оператор Возврат внутри функции. Функция в 1С всегда должна вернуть значение, иначе выполнение завершится с ошибкой. Процедура значения не возвращает, но может «отдать» строку наружу через параметр, объявленный с ключевым словом Знач отключено — то есть переданный по ссылке.

Для переноса строк внутри текста используется символ Символы.ПС (перевод строки) или комбинация Символы.ПС + Символы.ВК в зависимости от того, где строка будет отображаться или сохраняться. Ниже разберём все варианты с примерами кода, проверкой результата и типичными ошибками.

Как вернуть строку из функции оператором Возврат

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

bsl
Функция ПолучитьПредставлениеКонтрагента(Наименование, ИНН)
	Результат = Наименование + " (ИНН " + ИНН + ")";
	Возврат Результат;
КонецФункции

// Вызов:
СтрокаПредставления = ПолучитьПредставлениеКонтрагента("ООО Ромашка", "7701234567");

Обратите внимание: после выполнения Возврат функция завершает работу немедленно. Код, написанный ниже оператора, не выполнится. Если в функции есть ветвления, проверьте, что каждая ветка либо содержит свой Возврат, либо гарантированно приводит к общему возврату в конце тела функции.

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

Как вернуть строку из процедуры через параметр

Процедура не имеет возвращаемого значения — оператор Возврат в ней используется только для досрочного выхода без значения. Однако строку можно «вернуть» через параметр, если не указывать перед ним ключевое слово Знач. Тогда параметр передаётся по ссылке, и изменения внутри процедуры видны снаружи.

bsl
Процедура СформироватьАдрес(Контрагент, СтрокаАдреса)
	Если Контрагент = Неопределено Тогда
		СтрокаАдреса = "";
		Возврат;
	КонецЕсли;
	СтрокаАдреса = Контрагент.ЮридическийАдрес;
КонецПроцедуры

// Вызов:
Адрес = "";
СформироватьАдрес(ТекущийКонтрагент, Адрес);

Такой подход оправдан, когда нужно вернуть несколько значений сразу или когда код исторически построен на процедурах. Но если результат один, предпочтительнее функция — она читается естественнее и допускает использование в выражениях: Сообщить(ПолучитьАдрес(Контрагент)).

Типичные ошибки
01
Объявление параметра со словом Знач: изменения внутри процедуры не сохранятся во внешней переменной
02
Передача в параметр по ссылке литерала или выражения — платформа выдаст ошибку, нужна именно переменная
03
Отсутствие Возврата в одной из веток функции: ошибка возникает только при попадании выполнения в эту ветку
04
Склеивание строк без проверки на Неопределено: результатом становится исключение, а не пустая строка

Как вернуть перенос строки в тексте

Под «вернуть строку» иногда понимают вставку перевода строки в формируемый текст. Во встроенном языке для этого служит системный набор Символы: Символы.ПС — перевод строки, Символы.ВК — возврат каретки, Символы.Таб — табуляция.

bsl
ТекстСообщения = "Операция завершена." + Символы.ПС + "Обработано документов: " + Количество;

// Многострочный литерал через вертикальную черту:
Адрес = "ООО Ромашка
|г. Москва, ул. Примерная, д. 1
|ИНН 7701234567";

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

Учитывайте контекст использования. В полях ввода и сообщениях пользователю достаточно Символы.ПС. При выгрузке в текстовые файлы для Windows-программ иногда требуется пара ВК + ПС. При формировании HTML переносы в строке игнорируются — там нужен тег разрыва, а не символ перевода строки.

Нужен результат из функцииОператор Возврат

Проверьте, что Возврат есть во всех ветках выполнения

Нужно несколько результатовПараметры по ссылке или структура

Структура с полями часто читабельнее набора параметров

Нужен перенос в текстеСимволы.ПС

Для HTML и некоторых форматов обмена потребуется другой подход

Строка собирается в циклеКонкатенация или СтрШаблон

При большом числе итераций следите за производительностью склейки

Формирование строки перед возвратом: полезные функции

Прежде чем вернуть строку, её часто нужно собрать из частей. Базовый способ — оператор +, но при смешивании типов он требует явного приведения через Строка() или Формат(). Число, дата или булево не склеятся со строкой автоматически в нужном представлении.

Функция СтрШаблон("Покупатель: %1, сумма: %2", Имя, Сумма) делает шаблон читабельным и сама приводит подставляемые значения к строке. Для обрезки неразрывных пробелов и служебных символов по краям используйте СокрЛП() — типичная причина «битых» сравнений строк после выгрузок.

Для объединения массива строк с разделителем применяйте СтрСоединить(Массив, ", ") — это короче и быстрее ручного цикла. Обратная задача решается через СтрРазделить().

bsl
Функция ПредставлениеЗаказа(Номер, Дата, Сумма)
	Возврат СтрШаблон("Заказ №%1 от %2 на сумму %3 руб.",
		Номер, Формат(Дата, "ДЛФ=D"), Формат(Сумма, "ЧДЦ=2"));
КонецФункции

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

Простейшая проверка — вывести результат через Сообщить() или посмотреть значение переменной в отладчике (точка останова, табло). В отладчике видны и невидимые символы: лишние пробелы, переносы, неразрывные пробелы, которые визуально в сообщении неотличимы от обычных.

Проверяйте граничные случаи: пустые входные данные, отсутствующий элемент справочника, строки с кавычками и спецсимволами. Кавычка внутри строкового литерала удваивается ("ООО ""Ромашка"""), и забытое удвоение приводит к синтаксической ошибке.

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

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

Длина возвращённой строки
Норма

Соответствует ожидаемому тексту

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

Строка пустая или содержит только пробелы

Невидимые символы
Норма

Нет лишних переносов и неразрывных пробелов по краям

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

Сравнение строк не срабатывает из-за скрытых символов

Все ветки функции
Норма

Каждая ветка содержит Возврат

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

При определённых данных возникает ошибка «Функция не возвращает значение»

Переносы строк
Норма

Текст отображается многострочно в целевом месте

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

Весь текст слипся в одну строку в HTML или файле обмена

Границы безопасной работы и когда привлекать разработчика

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

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

Итог

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

Строку из функции возвращает оператор Возврат, из процедуры — параметр по ссылке. Перенос строки в тексте даёт Символы.ПС или многострочный литерал с вертикальной чертой. Проверяйте все ветки функции, невидимые символы и граничные случаи, а правки типового кода делайте на копии через расширение.

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

Что возвращает процедура, если написать в ней Возврат со значением?

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

Чем отличается Символы.ПС от Символы.ВК и когда нужны оба?

ПС — перевод строки, ВК — возврат каретки. Для отображения в интерфейсе 1С достаточно ПС. Пара ВК+ПС соответствует стандарту разрыва строк в текстовых файлах Windows и может требоваться при обмене с внешними программами.

Как вернуть из функции сразу несколько строк?

Соберите их в структуру (Новый Структура("Адрес, Телефон", Адрес, Телефон)) и верните структуру, либо верните массив строк. Это читабельнее, чем несколько параметров по ссылке в процедуре.

Почему склейка строки с числом даёт не тот формат?

При конкатенации число приводится к строке в формате по умолчанию, который может содержать неразрывные пробелы-разделители разрядов. Управляйте представлением явно через Формат() с нужной форматной строкой.

Можно ли вернуть строку из веб-сервиса или HTTP-сервиса 1С?

Да, но строку нужно упаковать в формат ответа — обычно XML, JSON или тело HTTP-ответа. Для JSON удобно использовать ЗаписьJSON, для HTTP-сервиса — объект HTTPСервисОтвет с установленным телом и кодом состояния.

Как убрать переносы строк из возвращаемого текста?

Используйте СтрЗаменить: последовательно замените Символы.ПС и Символы.ВК на пробел или пустую строку, затем при необходимости примените СокрЛП к результату.