Разработка и Конфигурация · 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Найдите записи с переносами через запрос с ПОДОБНО и Символы.ПС
- 2Сделайте резервную копию или проверьте обработку на копии базы
- 3Очистите значения функцией СтрЗаменить с парой ВК+ПС и одиночными символами
- 4Запишите изменённые объекты и проверьте выборку повторным запросом
- 5Проверьте смежные механизмы: выгрузки, печатные формы, обмены
Интерактивное удаление переносов без программирования
Если нужно поправить одну запись, откройте объект в режиме предприятия и отредактируйте поле вручную: перенос строки в многострочном поле удаляется клавишей Backspace в начале строки. Однако в однострочных полях невидимый символ не отображается — визуально строка выглядит нормально, но сравнение и поиск не работают.
Для пакетной правки без написания кода подходят типовые и широко распространённые обработки группового изменения реквизитов: в них можно задать алгоритм произвольной обработки значения, где доступен тот же СтрЗаменить. Это безопаснее ручной правки сотен записей и не требует изменения конфигурации.
Универсальный вариант для разработчика — внешняя обработка или консоль кода, где выполняется цикл по выборке с очисткой и записью объектов. Такой способ даёт полный контроль над тем, какие объекты и какие реквизиты затрагиваются.
Проверка результата и граничные случаи
Надёжный способ убедиться, что переносы удалены, — проверить длину строки до и после очистки и выполнить поиск управляющих символов функцией СтрНайти. Если СтрНайти(Строка, Символы.ПС) и СтрНайти(Строка, Символы.ВК) возвращают 0, строка чистая.
Отдельный случай — неразрывный пробел Символы.НПП (код 160): он не является переносом, но часто встречается рядом с ними в скопированных из браузера текстах и мешает сравнению и преобразованию чисел. Добавьте его замену на обычный пробел в функцию очистки, если данные приходят из веб-источников.
Ещё один нюанс — строки неограниченной длины и поля типа ХранилищеЗначения. Очистка работает с ними так же, но читать и записывать значения приходится с распаковкой, что замедляет массовую обработку. Для больших объёмов выполняйте обработку порциями с промежуточной фиксацией транзакции.
Как проверить результат
Обе функции возвращают 0
Возвращают позицию символа — перенос остался
Сравнение возвращает Истина
Ложь — вероятно, остался ВК или неразрывный пробел
Каждая запись занимает одну строку
Записи разрываются на несколько строк
FAQ
Что важно запомнить
Перенос строки в 1С — это пара Символы.ВК + Символы.ПС или одиночные управляющие символы. Удаляйте их функцией СтрЗаменить в правильном порядке: сначала пара, затем остатки, и завершайте СокрЛП. Перед массовой очисткой делайте резервную копию и проверяйте результат через СтрНайти.
Чем отличается Символы.ПС от Символы.ВК?
ПС (LF, код 10) — перевод строки, ВК (CR, код 13) — возврат каретки. В Windows-файлах они идут парой CRLF, в Linux-источниках используется только ПС. Для полной очистки нужно обрабатывать оба символа.
Как удалить перенос строки в запросе 1С?
Прямой замены в языке запросов нет. Обычно данные выбирают запросом и очищают в цикле обхода через СтрЗаменить. Найти записи с переносами можно оператором ПОДОБНО, подставив Символы.ПС в строку условия программно.
Почему после замены Символы.ПС сравнение строк всё равно не работает?
Скорее всего, в строке остался Символы.ВК — он невидим, но влияет на сравнение. Также проверьте неразрывный пробел Символы.НПП. Используйте СтрНайти для диагностики каждого управляющего символа.
Как заменить перенос строки на запятую или другой разделитель?
Передайте нужный разделитель третьим аргументом в СтрЗаменить, например: СтрЗаменить(Строка, Символы.ВК + Символы.ПС, ", "). Затем обработайте одиночные ПС и ВК тем же разделителем.
Можно ли убрать переносы без программирования?
Да, через обработку группового изменения реквизитов с произвольным алгоритмом, где доступен СтрЗаменить. Для единичных записей достаточно ручной правки поля, но невидимые символы в однострочных полях так не удалить.
Что делать, если переносы нужно сохранить, но убрать лишние?
Используйте функции работы со строками: СтрЧислоСтрок, СтрПолучитьСтроку и СтрЗаменить для точечной обработки. Например, можно собрать текст заново, пропуская пустые строки и заменяя двойные переносы одинарными.