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

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

Как удалить перенос строки в 1С: пошаговая инструкция

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

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

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

Откуда в строках 1С берутся переносы и почему они мешают

В 1С перенос строки — это не один символ, а чаще пара: символ возврата каретки (ВК, код 13) и символ перевода строки (ПС, код 10). Файлы, созданные в Windows, обычно содержат оба символа подряд, а данные из Linux-систем или веб-форм — только ПС. Поэтому замена только одного символа часто не решает проблему полностью.

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

Проблемы проявляются при выгрузке в CSV и текстовые форматы (перенос ломает структуру строки файла), при печати документов, при сравнении строк в коде (строки с переносом и без него считаются разными) и при обмене данными с внешними системами.

Строка пришла из Excel или текстового файлаСкорее всего есть ВК+ПС

Заменяйте оба символа: Символы.ВК и Символы.ПС

Перенос введён пользователем в многострочном полеОбычно только ПС

Достаточно замены Символы.ПС, но безопаснее чистить оба

Нужно сохранить абзацы, убрать только лишние переносыЧастичная очистка

Используйте СокрЛП и замену двойных переносов на одинарные

Удаление переноса строки в коде через СтрЗаменить

Основной инструмент — встроенная функция СтрЗаменить, которая заменяет все вхождения подстроки. Для полного удаления переносов заменяют оба символа: ВК на пустую строку, а ПС на пробел (чтобы слова на стыке строк не склеились).

ИсходнаяСтрока = "Первая строка" + Символы.ВК + Символы.ПС + "Вторая строка";

Результат = СтрЗаменить(ИсходнаяСтрока, Символы.ВК, "");

Результат = СтрЗаменить(Результат, Символы.ПС, " ");

// Результат: "Первая строка Вторая строка"

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

Для полной очистки строки от всех невидимых символов удобно дополнительно применить СокрЛП — она убирает пробелы и непечатаемые символы по краям строки, но не трогает переносы внутри. Поэтому СокрЛП не заменяет СтрЗаменить, а дополняет её.

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

Удаление переносов в запросе и при выгрузке данных

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

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

При выгрузке в CSV учитывайте: по стандарту поле с переносом строки допустимо, если оно заключено в кавычки. Но многие принимающие системы этого не понимают, поэтому надёжнее удалять переносы до записи файла либо заменять их на осмысленный разделитель, например «; ».

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

Когда переносы уже «засели» в данных — например, в наименованиях номенклатуры после загрузки из Excel — нужна разовая обработка. Логика простая: запросом выбрать все элементы, у которых в реквизите встречается перенос, очистить значение и записать объект.

Найти элементы с переносами можно через запрос с условием ПОДОБНО: искать наименования, содержащие символ ПС. В тексте запроса символ переноса задаётся через Символ(10) — но в условии ПОДОБНО проще использовать шаблон с фактическим переносом строки в строковом литерале или выполнить отбор уже в коде через Найти().

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЦикла;

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

Очистка строк при загрузке из Excel и текстовых файлов

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

При чтении Excel через COM-объект или через табличный документ значение ячейки может содержать переносы, если в Excel в ячейке использовался Alt+Enter. При чтении текстовых файлов через ЧтениеТекста метод ПрочитатьСтроку() уже разбивает текст по переносам — здесь проблема обратная: одна логическая строка данных может развалиться на несколько, и её нужно не чистить, а собирать.

Порядок действий при загрузке из Excel
  1. 1
    Прочитайте значение ячейки в переменную
  2. 2
    Проверьте наличие переносов через Найти(Значение, Символы.ПС)
  3. 3
    Очистите значение функцией СтрЗаменить с заменой ПС на пробел и ВК на пустую строку
  4. 4
    Примените СокрЛП для удаления краевых пробелов
  5. 5
    Только после очистки присваивайте значение реквизиту объекта и записывайте

Частичная очистка: когда переносы нужно сохранить

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

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

Ещё один сценарий — заменить переносы на HTML-тег перевода строки для вывода в веб-интерфейсе или письме. Здесь ПС заменяют не на пробел, а на соответствующий тег, сохраняя структуру текста.

Маршрут решения

Как выбрать действие

Строка формируется в коде или выгружается в файлОчищайте через СтрЗаменить с Символы.ПС и Символы.ВК прямо в коде
Переносы уже записаны в реквизитах множества объектовСделайте резервную копию и выполните разовую обработку по справочнику
Данные регулярно приходят с переносами из ExcelДобавьте очистку в процедуру загрузки сразу после чтения ячейки
Поле многострочное и абзацы нужныУбирайте только двойные переносы и пустые строки, не трогайте одинарные

Проверка результата и типичные ошибки

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

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

Типичные ошибки
01
Замена только Символы.ПС — остаётся невидимый Символы.ВК, и строки всё равно не совпадают при сравнении
02
Замена обоих символов на пробел — в местах пары ВК+ПС появляются двойные пробелы
03
Замена ПС на пустую строку вместо пробела — склеиваются слова: было «конец строки» и «начало», стало «конец строкиначало»
04
Использование СокрЛП для удаления переносов внутри строки — СокрЛП обрезает только края, внутренние переносы остаются
05
Массовая обработка без резервной копии — при ошибке в логике замены данные восстановить не из чего
Итог

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

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

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

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

ПС (код 10) — перевод строки, ВК (код 13) — возврат каретки. В Windows-файлах перенос обычно состоит из пары ВК+ПС, в Unix-форматах — только из ПС. Поэтому при очистке строк из разных источников надёжнее обрабатывать оба символа.

Можно ли удалить перенос строки в 1С без программирования?

Для одиночного поля — да: скопируйте значение в текстовый редактор, удалите переносы и вставьте обратно. Для массовой правки в типовых конфигурациях есть обработка «Групповое изменение реквизитов», но замена невидимых символов через неё ограничена, поэтому чаще используют небольшую внешнюю обработку.

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

Скорее всего, в строке остался символ ВК — он невидим, но влияет на сравнение. Также проверьте наличие неразрывных пробелов (код 160) и табуляций, которые часто приходят из Excel и Word. Добавьте их в цепочку замен.

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

Убирайте только лишнее: замените двойные переносы на одинарные в цикле и удалите пустые строки через перебор СтрПолучитьСтроку. Одинарные переносы между абзацами при этом сохранятся.

Что делать, если переносы ломают выгрузку в CSV?

Очистите все текстовые поля через СтрЗаменить до записи строки в файл, заменив переносы на пробел или разделитель вроде «; ». Альтернатива — заключать поля с переносами в кавычки по стандарту CSV, но это работает, только если принимающая система корректно читает такой формат.

Как найти все элементы справочника, где в наименовании есть перенос?

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