Разработка и Конфигурация · 9 мин
Как вернуть строку в 1С: функции, процедуры и работа с текстом
Разбираем, как вернуть строку в 1С: оператор Возврат, функции, параметры процедур, перенос строки и типичные ошибки при работе со строковыми значениями.
Вопрос «как вернуть строку в 1С» обычно возникает в двух ситуациях. Первая — нужно, чтобы функция или процедура вернула строковое значение вызывающему коду. Вторая — требуется вернуть в текст символ переноса строки, например, при формировании многострочного сообщения, адреса или печатной формы. Оба сценария решаются штатными средствами встроенного языка, но у каждого есть свои тонкости.
Основной инструмент возврата значения — оператор Возврат внутри функции. Функция в 1С всегда должна вернуть значение, иначе выполнение завершится с ошибкой. Процедура значения не возвращает, но может «отдать» строку наружу через параметр, объявленный с ключевым словом Знач отключено — то есть переданный по ссылке.
Для переноса строк внутри текста используется символ Символы.ПС (перевод строки) или комбинация Символы.ПС + Символы.ВК в зависимости от того, где строка будет отображаться или сохраняться. Ниже разберём все варианты с примерами кода, проверкой результата и типичными ошибками.
Как вернуть строку из функции оператором Возврат
Функция объявляется ключевым словом Функция и обязана содержать хотя бы один Возврат, достижимый при любом пути выполнения. Возвращаемое значение — любое строковое выражение: литерал, переменная, результат конкатенации или вызова другой функции.
Функция ПолучитьПредставлениеКонтрагента(Наименование, ИНН)
Результат = Наименование + " (ИНН " + ИНН + ")";
Возврат Результат;
КонецФункции
// Вызов:
СтрокаПредставления = ПолучитьПредставлениеКонтрагента("ООО Ромашка", "7701234567");Обратите внимание: после выполнения Возврат функция завершает работу немедленно. Код, написанный ниже оператора, не выполнится. Если в функции есть ветвления, проверьте, что каждая ветка либо содержит свой Возврат, либо гарантированно приводит к общему возврату в конце тела функции.
Если функция может не найти данные (например, элемент справочника по коду), осознанно решите, что возвращать: пустую строку "" или Неопределено. Пустая строка удобнее для конкатенации, Неопределено явнее сигнализирует об отсутствии результата, но требует проверки в вызывающем коде.
Как вернуть строку из процедуры через параметр
Процедура не имеет возвращаемого значения — оператор Возврат в ней используется только для досрочного выхода без значения. Однако строку можно «вернуть» через параметр, если не указывать перед ним ключевое слово Знач. Тогда параметр передаётся по ссылке, и изменения внутри процедуры видны снаружи.
Процедура СформироватьАдрес(Контрагент, СтрокаАдреса)
Если Контрагент = Неопределено Тогда
СтрокаАдреса = "";
Возврат;
КонецЕсли;
СтрокаАдреса = Контрагент.ЮридическийАдрес;
КонецПроцедуры
// Вызов:
Адрес = "";
СформироватьАдрес(ТекущийКонтрагент, Адрес);Такой подход оправдан, когда нужно вернуть несколько значений сразу или когда код исторически построен на процедурах. Но если результат один, предпочтительнее функция — она читается естественнее и допускает использование в выражениях: Сообщить(ПолучитьАдрес(Контрагент)).
Как вернуть перенос строки в тексте
Под «вернуть строку» иногда понимают вставку перевода строки в формируемый текст. Во встроенном языке для этого служит системный набор Символы: Символы.ПС — перевод строки, Символы.ВК — возврат каретки, Символы.Таб — табуляция.
ТекстСообщения = "Операция завершена." + Символы.ПС + "Обработано документов: " + Количество;
// Многострочный литерал через вертикальную черту:
Адрес = "ООО Ромашка
|г. Москва, ул. Примерная, д. 1
|ИНН 7701234567";Многострочный литерал с вертикальной чертой | удобен для шаблонов: каждая следующая строка в коде начинается с |, а в итоговой строке появляются реальные переносы. Это читабельнее, чем длинная склейка через Символы.ПС.
Учитывайте контекст использования. В полях ввода и сообщениях пользователю достаточно Символы.ПС. При выгрузке в текстовые файлы для Windows-программ иногда требуется пара ВК + ПС. При формировании HTML переносы в строке игнорируются — там нужен тег разрыва, а не символ перевода строки.
Проверьте, что Возврат есть во всех ветках выполнения
Структура с полями часто читабельнее набора параметров
Для HTML и некоторых форматов обмена потребуется другой подход
При большом числе итераций следите за производительностью склейки
Формирование строки перед возвратом: полезные функции
Прежде чем вернуть строку, её часто нужно собрать из частей. Базовый способ — оператор +, но при смешивании типов он требует явного приведения через Строка() или Формат(). Число, дата или булево не склеятся со строкой автоматически в нужном представлении.
Функция СтрШаблон("Покупатель: %1, сумма: %2", Имя, Сумма) делает шаблон читабельным и сама приводит подставляемые значения к строке. Для обрезки неразрывных пробелов и служебных символов по краям используйте СокрЛП() — типичная причина «битых» сравнений строк после выгрузок.
Для объединения массива строк с разделителем применяйте СтрСоединить(Массив, ", ") — это короче и быстрее ручного цикла. Обратная задача решается через СтрРазделить().
Функция ПредставлениеЗаказа(Номер, Дата, Сумма)
Возврат СтрШаблон("Заказ №%1 от %2 на сумму %3 руб.",
Номер, Формат(Дата, "ДЛФ=D"), Формат(Сумма, "ЧДЦ=2"));
КонецФункцииКак проверить, что строка вернулась корректно
Простейшая проверка — вывести результат через Сообщить() или посмотреть значение переменной в отладчике (точка останова, табло). В отладчике видны и невидимые символы: лишние пробелы, переносы, неразрывные пробелы, которые визуально в сообщении неотличимы от обычных.
Проверяйте граничные случаи: пустые входные данные, отсутствующий элемент справочника, строки с кавычками и спецсимволами. Кавычка внутри строкового литерала удваивается ("ООО ""Ромашка"""), и забытое удвоение приводит к синтаксической ошибке.
Как проверить результат
Соответствует ожидаемому тексту
Строка пустая или содержит только пробелы
Нет лишних переносов и неразрывных пробелов по краям
Сравнение строк не срабатывает из-за скрытых символов
Каждая ветка содержит Возврат
При определённых данных возникает ошибка «Функция не возвращает значение»
Текст отображается многострочно в целевом месте
Весь текст слипся в одну строку в HTML или файле обмена
Границы безопасной работы и когда привлекать разработчика
Изменение общих модулей и функций, которые используются в десятках мест конфигурации, требует осторожности. Перед правкой найдите все места вызова (поиск по имени функции в конфигураторе) и убедитесь, что изменение формата возвращаемой строки не сломает смежную логику — например, печатные формы, обмены или отчёты.
Любые доработки выполняйте на копии базы, а не в рабочей. Если конфигурация на поддержке, прямые изменения типового кода усложнят обновление — в таких случаях правильнее использовать расширения конфигурации или привлечь специалиста по 1С.
Что важно запомнить
Строку из функции возвращает оператор Возврат, из процедуры — параметр по ссылке. Перенос строки в тексте даёт Символы.ПС или многострочный литерал с вертикальной чертой. Проверяйте все ветки функции, невидимые символы и граничные случаи, а правки типового кода делайте на копии через расширение.
Частые вопросы
Что возвращает процедура, если написать в ней Возврат со значением?
Оператор Возврат в процедуре предназначен только для досрочного выхода; попытка указать значение приведёт к ошибке компиляции модуля. Чтобы отдать строку наружу, используйте параметр по ссылке или переделайте процедуру в функцию.
Чем отличается Символы.ПС от Символы.ВК и когда нужны оба?
ПС — перевод строки, ВК — возврат каретки. Для отображения в интерфейсе 1С достаточно ПС. Пара ВК+ПС соответствует стандарту разрыва строк в текстовых файлах Windows и может требоваться при обмене с внешними программами.
Как вернуть из функции сразу несколько строк?
Соберите их в структуру (Новый Структура("Адрес, Телефон", Адрес, Телефон)) и верните структуру, либо верните массив строк. Это читабельнее, чем несколько параметров по ссылке в процедуре.
Почему склейка строки с числом даёт не тот формат?
При конкатенации число приводится к строке в формате по умолчанию, который может содержать неразрывные пробелы-разделители разрядов. Управляйте представлением явно через Формат() с нужной форматной строкой.
Можно ли вернуть строку из веб-сервиса или HTTP-сервиса 1С?
Да, но строку нужно упаковать в формат ответа — обычно XML, JSON или тело HTTP-ответа. Для JSON удобно использовать ЗаписьJSON, для HTTP-сервиса — объект HTTPСервисОтвет с установленным телом и кодом состояния.
Как убрать переносы строк из возвращаемого текста?
Используйте СтрЗаменить: последовательно замените Символы.ПС и Символы.ВК на пробел или пустую строку, затем при необходимости примените СокрЛП к результату.