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

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

Что такое новая строка в 1С и как с ней работать

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

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

Во встроенном языке 1С для работы с переносом строк есть специальный объект Символы, содержащий константы ПС (перевод строки), ВК (возврат каретки) и Таб (табуляция). Разработчик не вводит эти символы вручную — он вставляет в текст соответствующую константу, и платформа сама подставляет нужный код символа.

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

Константа Символы.ПС: основной инструмент переноса строки

Объект Символы доступен во встроенном языке глобально, его не нужно создавать. Чаще всего используется константа Символы.ПС — она соответствует символу с кодом 10 (Line Feed). Для вставки переноса в строку применяется операция конкатенации (склейки строк через знак «+»).

Типовой пример формирования многострочного сообщения:

ТекстСообщения = "Первая строка" + Символы.ПС + "Вторая строка";

Сообщить(ТекстСообщения);

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

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

1c
Адрес = "г. Москва" + Символы.ПС + "ул. Примерная, д. 1" + Символы.ПС + "офис 101";

Как устроен перенос строки на уровне символов

Исторически в разных операционных системах перенос строки кодируется по-разному. В Windows принята пара символов: возврат каретки (CR, код 13) плюс перевод строки (LF, код 10), то есть Символы.ВК + Символы.ПС. В Linux и macOS достаточно одного символа LF (Символы.ПС). Это различие важно при обмене текстовыми файлами между системами.

Когда 1С записывает текстовый файл через объект ЗаписьТекста на Windows, платформа по умолчанию использует системный разделитель строк. Если файл затем читается на Linux-сервере или внешней системой, ожидающей только LF, могут возникнуть лишние символы ВК, которые визуально не видны, но ломают разбор данных.

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

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

Реквизиты типа «Строка» в 1С бывают ограниченной и неограниченной длины. Переносы строк можно хранить в строках неограниченной длины, а также в многострочных полях ввода. Если реквизит объявлен как строка фиксированной длины (например, 150 символов), переносы в нём обычно не имеют смысла и могут обрезаться или вызывать проблемы при выводе.

В пользовательском режиме перенос строки в многострочном поле вводится клавишей Enter. При этом в базе сохраняется именно символ переноса, и при программном чтении значения вы получите строку с Символы.ПС внутри. Это нужно учитывать при сравнении: строка «Привет<перенос>Мир» не равна строке «Привет Мир» с пробелом.

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

Перенос строки в запросах и длинных литералах

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

Многострочный строковый литерал в коде оформляется так: каждая новая строка внутри кавычек начинается с символа вертикальной черты |. Пример:

Текст = "Первая часть

|вторая часть

|третья часть";

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

Типичные ошибки
01
Сравнение строк без учёта переносов: строки с разным числом переносов считаются разными, хотя визуально похожи — перед сравнением применяйте СтрЗаменить для нормализации.
02
Использование многострочного литерала с вертикальной чертой там, где переносы в значении не нужны: лишние символы ПС попадают в данные и ломают выгрузку.
03
Формирование CSV-файла без учёта переносов внутри значений: перенос строки в данных разрывает строку файла, и принимающая система читает её как две записи.
04
Забытый обязательный пробел или перенос при склейке текста сообщения: строки сливаются в одну, и пользователь получает нечитаемый текст.

Работа с переносами при чтении и записи файлов

Объект ЧтениеТекста позволяет читать файл построчно методом ПрочитатьСтроку() — в этом случае переносы используются как разделители и в результат не попадают. Если же читать файл целиком методом Прочитать(), все символы переноса сохранятся в строке, и их придётся обрабатывать самостоятельно.

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

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

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

Проверка и очистка строк от переносов

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

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

Функция СокрЛП() убирает не только пробелы, но и незначащие символы, включая переносы, в начале и конце строки. Однако переносы в середине текста она не трогает — для них нужна явная замена.

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

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

Вывод многострочного сообщения
Норма

Каждая часть текста на отдельной строке

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

Весь текст слился в одну строку — перенос не добавлен

Строка перед выгрузкой в CSV
Норма

СтрНайти(Строка, Символы.ПС) возвращает 0

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

Функция возвращает позицию символа — в данных есть переносы

Файл, созданный ЗаписьТекста
Норма

Строки идут последовательно без пустых и склеенных

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

Пустые строки или склейка — перепутаны Записать() и ЗаписатьСтроку()

Частые вопросы о новой строке в 1С

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

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

Как вставить перенос строки в сообщение пользователю?

Склейте части текста через оператор «+» с константой Символы.ПС между ними: Сообщить("Ошибка в строке 5" + Символы.ПС + "Проверьте заполнение реквизита"). Сообщение отобразится в две строки.

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

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

Как разбить многострочный текст на отдельные строки?

Используйте функцию СтрРазделить(Текст, Символы.ПС) — она вернёт массив строк. Учтите, что если в тексте встречаются комбинации ВК+ПС, предварительно удалите символы ВК, иначе в конце элементов массива останутся лишние символы.

Можно ли хранить переносы строк в реквизите справочника?

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

Как перенести часть длинной строки кода без добавления переноса в значение?

Разбейте выражение на несколько строк кода через конкатенацию: закройте кавычки, поставьте «+» и продолжите строку на следующей строке кода. В значение переменной перенос не попадёт — в отличие от многострочного литерала с вертикальной чертой.

Итог

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

Новая строка в 1С задаётся константой Символы.ПС и вставляется в текст через конкатенацию. При обмене файлами учитывайте разницу разделителей строк в Windows и Linux. Перед сравнением и выгрузкой данных нормализуйте строки, удаляя лишние переносы через СтрЗаменить.