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

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

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

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

Символ переноса строки в 1С появляется при импорте данных из Excel, CSV, веб-сервисов, при копировании текста из многострочных полей и при обмене между базами. Если его не удалить, строка «ломает» выгрузку в файл, сравнение значений, поиск по справочнику и печатные формы. Удаление выполняется встроенными средствами языка — функцией СтрЗаменить совместно с системным набором Символы.

Главная сложность в том, что «перенос строки» — это не один символ, а несколько разных: перевод строки (ПС, код 10), возврат каретки (ВК, код 13), их пара (CRLF) и разделитель строк (код 8232). Данные из Windows-файлов обычно содержат пару CRLF, из Linux и веб-источников — только LF, а из старых Mac-форматов — только CR. Универсальная обработка должна учитывать все варианты.

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

Какие символы образуют перенос строки в 1С

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

Пара ВК + ПС (CRLF) — стандартный разделитель строк в Windows-файлах. Если заменять только Символы.ПС, в строке останется невидимый Символы.ВК, и сравнение строк по-прежнему будет давать «ложь». Поэтому правильный порядок — сначала удалять пару целиком, потом одиночные остатки.

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

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

Функция УбратьПереносыСтрок(ИсходнаяСтрока) Экспорт

Результат = ИсходнаяСтрока;

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

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

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

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

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

Возврат СокрЛП(Результат);

КонецФункции

Обратите внимание на порядок: сначала обрабатывается пара ВК + ПС, иначе после замены одиночного ПС на пробел возврат каретки останется в тексте. Функция СокрЛП в конце убирает пробелы и управляющие символы по краям строки — это полезно, когда перенос стоял в начале или в конце значения.

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

Удаление переносов в запросе

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

Если задача — найти записи, где реквизит содержит перенос строки, используйте оператор ПОДОБНО со спецсимволом. В тексте запроса перенос можно задать через конструкцию с символом: например, условие ГДЕ Товары.Описание ПОДОБНО "%" + СимволыПС + "%" формируется программно, подставляя Символы.ПС в строку запроса перед выполнением. Это позволяет быстро найти «грязные» записи перед очисткой.

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

Очистка при загрузке из Excel, CSV и веб-источников

При чтении текстовых файлов через ЧтениеТекста или ТекстовыйДокумент переносы — это естественные разделители строк файла, и удалять их нужно только внутри значений полей. Проблема возникает, когда в CSV поле с переносом заключено в кавычки: наивный разбор по Символы.ПС разорвёт такое поле на две строки. В этом случае сначала корректно парсите файл с учётом кавычек, а затем очищайте значения.

При загрузке из Excel через COM-объект или табличный документ переносы внутри ячеек сохраняются как есть. Очищайте значение сразу после чтения ячейки, до записи в реквизит объекта — так «грязные» символы не попадут в базу и не придётся вычищать их отдельной обработкой.

Данные из веб-сервисов и HTTP-ответов часто содержат только Символы.ПС, а JSON после прочтения через ПрочитатьJSON может содержать экранированные последовательности, которые уже преобразованы в реальные символы. Универсальная функция очистки из первого раздела покрывает все эти случаи.

Порядок безопасной очистки данных
  1. 1
    Найдите записи с переносами через запрос с ПОДОБНО и Символы.ПС
  2. 2
    Сделайте резервную копию или проверьте обработку на копии базы
  3. 3
    Очистите значения функцией СтрЗаменить с парой ВК+ПС и одиночными символами
  4. 4
    Запишите изменённые объекты и проверьте выборку повторным запросом
  5. 5
    Проверьте смежные механизмы: выгрузки, печатные формы, обмены

Интерактивное удаление переносов без программирования

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

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

Универсальный вариант для разработчика — внешняя обработка или консоль кода, где выполняется цикл по выборке с очисткой и записью объектов. Такой способ даёт полный контроль над тем, какие объекты и какие реквизиты затрагиваются.

Типичные ошибки
01
Замена только Символы.ПС: в строке остаётся Символы.ВК, и сравнение строк продолжает возвращать Ложь
02
Замена на пустую строку вместо пробела: слова на стыке строк слипаются
03
Очистка многострочных реквизитов, где переносы нужны по смыслу: адреса и комментарии теряют читаемость
04
Массовая обработка без резервной копии: ошибочные изменения нельзя откатить
05
Поиск переноса в запросе литералом вместо подстановки Символы.ПС: условие ПОДОБНО не срабатывает

Проверка результата и граничные случаи

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

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

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

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

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

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

Обе функции возвращают 0

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

Возвращают позицию символа — перенос остался

Сравнение очищенной строки с эталоном
Норма

Сравнение возвращает Истина

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

Ложь — вероятно, остался ВК или неразрывный пробел

Выгрузка в CSV или печатная форма
Норма

Каждая запись занимает одну строку

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

Записи разрываются на несколько строк

FAQ

Итог

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

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

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

ПС (LF, код 10) — перевод строки, ВК (CR, код 13) — возврат каретки. В Windows-файлах они идут парой CRLF, в Linux-источниках используется только ПС. Для полной очистки нужно обрабатывать оба символа.

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

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

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

Скорее всего, в строке остался Символы.ВК — он невидим, но влияет на сравнение. Также проверьте неразрывный пробел Символы.НПП. Используйте СтрНайти для диагностики каждого управляющего символа.

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

Передайте нужный разделитель третьим аргументом в СтрЗаменить, например: СтрЗаменить(Строка, Символы.ВК + Символы.ПС, ", "). Затем обработайте одиночные ПС и ВК тем же разделителем.

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

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

Что делать, если переносы нужно сохранить, но убрать лишние?

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