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

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

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

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

Переносы строк в 1С появляются в самых разных местах: в многострочных реквизитах справочников, в текстах загружаемых файлов, в адресах и наименованиях, скопированных из Excel или Word. Когда такие данные попадают в печатные формы, отчёты или выгрузки, лишние переводы строк ломают форматирование: строки «разъезжаются», обмены выдают ошибки, а поиск по наименованию перестаёт работать.

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

Важный нюанс: перенос строки в текстовых данных — это не один символ, а разные комбинации. Windows использует пару CR+LF (возврат каретки и перевод строки), Linux и macOS — только LF, старые системы — одиночный CR. Если заменить только один вариант, часть переносов останется, и результат будет непредсказуемым.

Что такое перенос строки в 1С и какие символы нужно удалять

Во встроенном языке 1С для работы с невидимыми символами существует системное перечисление Символы. Основные его значения: Символы.ПС — перевод строки (LF, код 10), Символы.ВК — возврат каретки (CR, код 13), Символы.Таб — табуляция, Символы.НПП — неразрывный пробел. Именно ПС и ВК отвечают за переносы строк в тексте.

Текст, пришедший из Windows-файлов, обычно содержит пару ВК+ПС подряд. Текст из веб-форм, Excel или Linux-систем — только ПС. Поэтому надёжная очистка всегда обрабатывает оба символа, иначе после замены в строке останутся «артефакты» в виде лишних пробелов или невидимых символов, которые мешают сравнению строк и выгрузке.

Как убрать перенос строки программно через СтрЗаменить

Базовый приём — функция СтрЗаменить(), которая заменяет все вхождения подстроки в строке. Чтобы удалить переносы и заменить их пробелом, достаточно двух-трёх вызовов подряд:

Текст = СтрЗаменить(Текст, Символы.ВК, "");

Текст = СтрЗаменить(Текст, Символы.ПС, " ");

Текст = СтрЗаменить(Текст, " ", " "); // двойные пробелы после замены

Порядок вызовов имеет значение. Сначала удаляем ВК (без замены на пробел), потом ПС заменяем на пробел — так в месте переноса останется ровно один пробел. Если оба символа заменять пробелом, получите двойные пробелы, которые тоже придётся чистить.

Если переносы нужно не заменить, а полностью удалить (слить строки воедино), передавайте пустую строку в качестве третьего параметра. Это оправдано, например, при склейке артикулов или кодов, где пробел недопустим.

bsl
Функция УбратьПереносыСтрок(Знач Текст)
	Текст = СтрЗаменить(Текст, Символы.ВК, "");
	Текст = СтрЗаменить(Текст, Символы.ПС, " ");
	Текст = СтрЗаменить(Текст, Символы.НПП, " ");
	Возврат СокрЛП(Текст);
КонецФункции

Как убрать перенос в многострочном реквизите вручную

Если перенос нужно убрать в одном конкретном поле — например, в наименовании товара или комментарии документа — программировать ничего не нужно. Откройте форму объекта, щёлкните по многострочному полю и нажмите кнопку вызова окна редактирования текста (или клавишу F4 / Shift+F4 в зависимости от платформы). В открывшемся окне видны все строки, и лишние переносы удаляются клавишей Backspace или Delete.

Учтите: часть реквизитов в типовых конфигурациях имеет тип «Строка неограниченной длины», и в них переносы допустимы штатно. А вот однострочные реквизиты (например, наименование фиксированной длины) перенос хранить не должны — если он там появился, значит данные загружались обработкой в обход проверок, и стоит проверить источник загрузки.

Массовая очистка переносов в справочнике или документах

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Если СтрНайти(Выборка.Наименование, Символы.ПС) > 0 Тогда

Объект = Выборка.Ссылка.ПолучитьОбъект();

Объект.Наименование = СтрЗаменить(Объект.Наименование, Символы.ПС, " ");

Объект.Записать();

КонецЕсли;

КонецЦикла;

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

Переносы строк в табличном документе и печатных формах

Отдельный случай — переносы в ячейках табличного документа при формировании печатных форм и отчётов. Если длинный текст в ячейке «раздувает» строку по высоте, это не всегда символ ПС: чаще срабатывает свойство ячейки «Автоперенос» (перенос по ширине). Убрать его можно в свойствах ячейки макета, установив значение «Не переносить», либо программно через свойство области.

Если же в печатную форму попадает реальный символ ПС из реквизита (например, адрес с переносами), очистку делайте при выводе: Область.Параметры.Адрес = СтрЗаменить(Адрес, Символы.ПС, ", ");. Замена на запятую с пробелом для адресов читается лучше, чем просто пробел.

Сравнение вариантов

СтрЗаменить с Символы.ПС

Универсальный способ для любых строк в коде. Требует обработки обоих символов ВК и ПС.

Ручное редактирование поля

Подходит для разового исправления одной записи без доступа к конфигуратору. Не масштабируется.

Внешняя обработка по выборке

Для массовой очистки справочников и документов. Требует резервной копии и теста на копии базы.

Настройка макета (Автоперенос)

Когда текст режется визуально в печатной форме, а символа ПС в данных нет.

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

Простейшая программная проверка — функция СтрНайти(Текст, Символы.ПС): если возвращает 0, переносов нет. Для контроля количества строк используйте СтрЧислоСтрок(Текст) — значение 1 означает однострочный текст.

При ручной проверке в форме включите отображение всего текста через окно редактирования: если курсор не переходит на вторую строку клавишей «вниз», переносов не осталось. В выгрузках (CSV, XML) проверяйте, что одна запись занимает одну строку файла и не «рассыпается» на несколько.

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

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

СтрЧислоСтрок(Текст)
Норма

Возвращает 1

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

Больше 1 — переносы остались

СтрНайти(Текст, Символы.ВК)
Норма

Возвращает 0

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

Больше 0 — остался возврат каретки

Строка в файле выгрузки
Норма

Одна запись — одна строка

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

Запись разбита на несколько строк

Поиск по наименованию
Норма

Элемент находится по точному тексту

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

Не находится из-за скрытых символов

Типичные ошибки при удалении переносов

Самая частая ошибка — замена только Символы.ПС без обработки Символы.ВК. В текстах из Windows остаётся невидимый символ возврата каретки, который ломает сравнение строк и XML-выгрузки. Вторая типичная проблема — замена переноса на пустую строку там, где слова склеиваются: «г. Москва,» + «ул. Ленина» превращается в «Москва,ул. Ленина».

Также не забывайте про неразрывные пробелы (Символы.НПП), которые часто приходят вместе с переносами из веб-форм и Excel. Они выглядят как обычные пробелы, но мешают поиску и сравнению. И наконец, после всех замен применяйте СокрЛП — в начале и конце строки часто остаются пробелы от удалённых переносов.

Типичные ошибки
01
Заменяют только Символы.ПС — в тексте остаётся невидимый Символы.ВК, ломающий сравнение и обмены.
02
Заменяют перенос на пустую строку — соседние слова склеиваются без пробела.
03
Игнорируют неразрывный пробел (Символы.НПП) — поиск и сравнение строк не срабатывают.
04
Запускают массовую обработку без копии базы — ошибку в отборе невозможно откатить.
05
Путают символ ПС в данных с автопереносом ячейки макета — чистят данные, а проблема в настройке печатной формы.
Итог

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

Перенос строки в 1С удаляется через СтрЗаменить с Символы.ПС и Символы.ВК, обрабатывать нужно оба символа. Разовые случаи решаются ручным редактированием поля, массовые — обработкой с резервной копией. Результат проверяется через СтрЧислоСтрок и СтрНайти.

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

Чем отличается Символы.ПС от Символы.ВК?

ПС (перевод строки, код 10) перемещает текст на новую строку, ВК (возврат каретки, код 13) возвращает позицию в начало строки. В Windows перенос строки — это пара ВК+ПС, в Linux и веб-данных — только ПС. Для полной очистки удаляйте оба.

Как убрать перенос строки в запросе 1С, без кода обработки?

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

Почему после загрузки из Excel в наименованиях появляются переносы?

В Excel перенос внутри ячейки создаётся комбинацией Alt+Enter и сохраняется как символ перевода строки. При копировании или чтении файла этот символ переносится в реквизит 1С вместе с текстом. Очищайте данные сразу в обработке загрузки.

Как заменить перенос строки на запятую или другой разделитель?

Используйте тот же СтрЗаменить, передав нужный разделитель третьим параметром: СтрЗаменить(Текст, Символы.ПС, ", "). Для адресов и составных строк запятая с пробелом обычно читается лучше, чем просто пробел.

Можно ли убрать переносы строк без доступа к конфигуратору?

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

Переносы есть в тексте письма или HTML — как их убрать?

В HTML переносы задаются тегами, а не символами ПС, поэтому сначала приведите HTML к обычному тексту (например, через объект HTMLДокумент или удаление тегов), а уже потом очищайте оставшиеся символы ПС и ВК стандартной заменой.