Разработка и Конфигурация · 11 мин
Как удалить перенос строки в 1С: пошаговая инструкция
Как удалить перенос строки в 1С: замена символов Символы.ПС и Символы.ВК в коде, обработка строк, очистка данных из Excel, примеры запросов и типичные ошибки.
Переносы строк в данных 1С появляются постоянно: при копировании текста из Excel или Word, при загрузке выписок, при заполнении многострочных полей вроде адреса или комментария. Когда такая строка попадает в наименование номенклатуры, печатную форму или файл обмена, возникают проблемы — «плывут» отчёты, ломается выгрузка в CSV, контрагенты получают документы с разорванными строками.
Удалить перенос строки в 1С можно несколькими способами: программно через функцию СтрЗаменить с символами ПС и ВК, интерактивно через поиск и замену в табличном документе, а также массово — обработкой по всем элементам справочника. Выбор зависит от того, где находится строка: в коде, в реквизите объекта или в загружаемом файле.
Откуда в строках 1С берутся переносы и почему они мешают
В 1С перенос строки — это не один символ, а чаще пара: символ возврата каретки (ВК, код 13) и символ перевода строки (ПС, код 10). Файлы, созданные в Windows, обычно содержат оба символа подряд, а данные из Linux-систем или веб-форм — только ПС. Поэтому замена только одного символа часто не решает проблему полностью.
Типичные источники переносов: копирование многострочного текста из Excel в поле ввода, импорт выписок и прайсов, заполнение адресов через классификатор, ручной ввод комментариев с нажатием Enter. Пользователь может даже не заметить перенос — в однострочном поле он не виден, но в данных он сохраняется.
Проблемы проявляются при выгрузке в CSV и текстовые форматы (перенос ломает структуру строки файла), при печати документов, при сравнении строк в коде (строки с переносом и без него считаются разными) и при обмене данными с внешними системами.
Заменяйте оба символа: Символы.ВК и Символы.ПС
Достаточно замены Символы.ПС, но безопаснее чистить оба
Используйте СокрЛП и замену двойных переносов на одинарные
Удаление переноса строки в коде через СтрЗаменить
Основной инструмент — встроенная функция СтрЗаменить, которая заменяет все вхождения подстроки. Для полного удаления переносов заменяют оба символа: ВК на пустую строку, а ПС на пробел (чтобы слова на стыке строк не склеились).
ИсходнаяСтрока = "Первая строка" + Символы.ВК + Символы.ПС + "Вторая строка";
Результат = СтрЗаменить(ИсходнаяСтрока, Символы.ВК, "");
Результат = СтрЗаменить(Результат, Символы.ПС, " ");
// Результат: "Первая строка Вторая строка"
Порядок замены имеет значение. Если сначала заменить ПС на пробел, а потом ВК на пустую строку, получится корректный результат. Если же оба символа заменять на пробел, то в местах, где стояла пара ВК+ПС, появится двойной пробел — его придётся убирать отдельно.
Для полной очистки строки от всех невидимых символов удобно дополнительно применить СокрЛП — она убирает пробелы и непечатаемые символы по краям строки, но не трогает переносы внутри. Поэтому СокрЛП не заменяет СтрЗаменить, а дополняет её.
Функция УбратьПереносыСтрок(Знач Текст)
Текст = СтрЗаменить(Текст, Символы.ВК, "");
Текст = СтрЗаменить(Текст, Символы.ПС, " ");
Текст = СтрЗаменить(Текст, Символы.Таб, " ");
Возврат СокрЛП(Текст);
КонецФункцииУдаление переносов в запросе и при выгрузке данных
В языке запросов 1С нет прямого аналога СтрЗаменить, поэтому очистку строк обычно выполняют после выборки — в цикле обхода результата запроса. Это стандартная практика при формировании файлов обмена: выгрузили данные, прошлись по строкам, почистили нужные поля, записали в файл.
Если очистка нужна постоянно и данные хранятся с переносами в базе, правильнее исправить сами данные один раз (об этом ниже), чем каждый раз обрабатывать их при выгрузке. Постоянная «чистка на лету» замедляет выгрузку и маскирует проблему вместо её решения.
При выгрузке в CSV учитывайте: по стандарту поле с переносом строки допустимо, если оно заключено в кавычки. Но многие принимающие системы этого не понимают, поэтому надёжнее удалять переносы до записи файла либо заменять их на осмысленный разделитель, например «; ».
Массовое удаление переносов из реквизитов справочников и документов
Когда переносы уже «засели» в данных — например, в наименованиях номенклатуры после загрузки из Excel — нужна разовая обработка. Логика простая: запросом выбрать все элементы, у которых в реквизите встречается перенос, очистить значение и записать объект.
Найти элементы с переносами можно через запрос с условием ПОДОБНО: искать наименования, содержащие символ ПС. В тексте запроса символ переноса задаётся через Символ(10) — но в условии ПОДОБНО проще использовать шаблон с фактическим переносом строки в строковом литерале или выполнить отбор уже в коде через Найти().
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Найти(Выборка.Наименование, Символы.ПС) > 0
Или Найти(Выборка.Наименование, Символы.ВК) > 0 Тогда
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Наименование = СтрЗаменить(Объект.Наименование, Символы.ВК, "");
Объект.Наименование = СтрЗаменить(Объект.Наименование, Символы.ПС, " ");
Объект.Записать();
КонецЕсли;
КонецЦикла;
В типовых конфигурациях для разовых операций есть стандартная обработка «Групповое изменение реквизитов» (в разделе администрирования). Она позволяет заменить значения без программирования, но сложную замену символов через неё сделать не всегда возможно — для очистки переносов надёжнее небольшая внешняя обработка.
Очистка строк при загрузке из Excel и текстовых файлов
Правильное место для удаления переносов при импорте — сразу после чтения значения ячейки или строки файла, до записи в объект. Тогда в базу попадут уже чистые данные, и не потребуется последующая массовая обработка.
При чтении Excel через COM-объект или через табличный документ значение ячейки может содержать переносы, если в Excel в ячейке использовался Alt+Enter. При чтении текстовых файлов через ЧтениеТекста метод ПрочитатьСтроку() уже разбивает текст по переносам — здесь проблема обратная: одна логическая строка данных может развалиться на несколько, и её нужно не чистить, а собирать.
- 1Прочитайте значение ячейки в переменную
- 2Проверьте наличие переносов через Найти(Значение, Символы.ПС)
- 3Очистите значение функцией СтрЗаменить с заменой ПС на пробел и ВК на пустую строку
- 4Примените СокрЛП для удаления краевых пробелов
- 5Только после очистки присваивайте значение реквизиту объекта и записывайте
Частичная очистка: когда переносы нужно сохранить
Не всегда задача — удалить все переносы. В многострочных полях (описание товара, комментарий, условия договора) переносы осмысленны, и удалять их нельзя. Типовые задачи здесь другие: убрать лишние пустые строки, заменить двойные переносы на одинарные, убрать перенос в конце строки.
Для удаления пустых строк удобно работать через СтрЧислоСтрок и СтрПолучитьСтроку: перебрать строки текста, отбросить пустые (после СокрЛП), собрать результат заново. Двойные переносы убираются заменой сочетания ПС+ПС на одинарный ПС, причём замену иногда нужно выполнить в цикле, пока Найти() перестанет находить двойные вхождения.
Ещё один сценарий — заменить переносы на HTML-тег перевода строки для вывода в веб-интерфейсе или письме. Здесь ПС заменяют не на пробел, а на соответствующий тег, сохраняя структуру текста.
Как выбрать действие
Проверка результата и типичные ошибки
Проверить, остались ли в строке переносы, можно через Найти(Строка, Символы.ПС) — если функция вернула 0, переносов нет. Для визуальной проверки полезно временно заменить ПС на видимый маркер, например «¶», и вывести строку в сообщение: так видно, где именно стояли переносы.
При массовой обработке проверяйте результат на выборке: запросом найдите элементы, где переносы остались. Если таких нет — обработка отработала полностью. Также проверьте, что на стыках бывших строк не появилось двойных пробелов и склеенных слов.
Что важно запомнить
Перенос строки в 1С — это пара символов ВК и ПС, и чистить нужно оба. Основной инструмент — СтрЗаменить: ВК на пустую строку, ПС на пробел. Разовые данные правьте обработкой после резервного копирования, регулярные загрузки — очисткой при чтении, а многострочные поля чистите аккуратно, сохраняя структуру абзацев.
Частые вопросы
Чем отличаются Символы.ПС и Символы.ВК в 1С?
ПС (код 10) — перевод строки, ВК (код 13) — возврат каретки. В Windows-файлах перенос обычно состоит из пары ВК+ПС, в Unix-форматах — только из ПС. Поэтому при очистке строк из разных источников надёжнее обрабатывать оба символа.
Можно ли удалить перенос строки в 1С без программирования?
Для одиночного поля — да: скопируйте значение в текстовый редактор, удалите переносы и вставьте обратно. Для массовой правки в типовых конфигурациях есть обработка «Групповое изменение реквизитов», но замена невидимых символов через неё ограничена, поэтому чаще используют небольшую внешнюю обработку.
Почему после замены Символы.ПС строки всё равно не совпадают при сравнении?
Скорее всего, в строке остался символ ВК — он невидим, но влияет на сравнение. Также проверьте наличие неразрывных пробелов (код 160) и табуляций, которые часто приходят из Excel и Word. Добавьте их в цепочку замен.
Как удалить переносы в многострочном текстовом поле, но оставить абзацы?
Убирайте только лишнее: замените двойные переносы на одинарные в цикле и удалите пустые строки через перебор СтрПолучитьСтроку. Одинарные переносы между абзацами при этом сохранятся.
Что делать, если переносы ломают выгрузку в CSV?
Очистите все текстовые поля через СтрЗаменить до записи строки в файл, заменив переносы на пробел или разделитель вроде «; ». Альтернатива — заключать поля с переносами в кавычки по стандарту CSV, но это работает, только если принимающая система корректно читает такой формат.
Как найти все элементы справочника, где в наименовании есть перенос?
Выберите элементы запросом и в цикле проверяйте каждое значение через Найти(Наименование, Символы.ПС) и Найти(Наименование, Символы.ВК). Значение больше нуля означает, что перенос есть, и элемент нуждается в очистке.