Перенос строки в 1С:Предприятии 8.3: где работает Enter, а где нужна настройка

· 9 мин

Содержание

Перенести строку в 1С можно только в многострочном поле: в «Комментарии» документа, в описании, в тексте письма. Там новую строку даёт обычный Enter. В однострочном поле (номер, наименование, ИНН) перенос не набирается ни одной комбинацией клавиш. Такое поле нужно переделать в конфигураторе или добавить разрыв строки программно через Символы.ПС.

Всё ниже относится к платформе 1С:Предприятие 8.3 с интерфейсом «Такси» и не зависит от конфигурации: в Бухгалтерии, ЗУП и УТ поля ввода ведут себя одинаково. Разница только в том, какие поля разработчик сделал многострочными.

Какие клавиши переносят строку при вводе

Сначала определите, какое поле перед вами. Многострочное обычно выше одной строки, иногда с полосой прокрутки справа. Однострочное — узкая полоска.

Где вы печатаетеЧто нажатьЧто произойдёт
Многострочное поле формыEnterНовая строка внутри поля
Однострочное поле формыEnterВвод завершается, курсор уходит дальше
Ячейка табличной части документаEnterРедактирование ячейки заканчивается
Текстовый документ (TXT в 1С)EnterНовая строка, как в Блокноте
Ячейка табличного документа (отчёт, печатная форма)см. следующий разделЗависит от свойств ячейки

Для перехода из многострочного поля к следующему полю используйте Tab: Enter там занят переносом.

Привычка из мессенджеров и Excel может подвести. В форме документа Ctrl+Enter — это команда «Провести и закрыть». Нажмёте её в надежде перенести строку — документ проведётся и форма закроется. Если это случилось, откройте документ заново из журнала и допишите текст.

💡 Длинный текст удобнее набрать в Блокноте или Word, а потом вставить в многострочное поле через Ctrl+V. Переносы сохранятся. В однострочное поле вставка склеит текст в одну строку или обрежет его по первому разрыву.

Если поле однострочное, а перенос нужен

Пользователь сам это не исправит. Варианты:

  • 📝 перенести длинный текст в реквизит, у которого есть многострочное поле (почти у всех документов это «Комментарий»);
  • 🛠 попросить разработчика включить многострочный режим через расширение конфигурации — так типовая конфигурация не снимается с поддержки;
  • 📄 если текст нужен только в печатной форме, разбить его прямо в макете (см. ниже).

Перенос текста в ячейке табличного документа

Табличный документ — это все отчёты, печатные формы и файлы MXL. Перенос здесь бывает двух видов, и путают их постоянно.

Автоматический перенос по ширине. Текст сам переходит на следующую строку, когда упирается в правую границу ячейки. Включается свойством ячейки:

  1. Выделите ячейку или диапазон.
  2. Откройте свойства ячейки (в конфигураторе — палитра свойств, Alt+Enter).
  3. В свойстве Размещение текста выберите Переносить.
  4. Проверьте ширину колонки: перенос идёт по её правой границе.

Другие значения свойства: Авто — текст заходит на соседние пустые ячейки, Обрезать — лишнее просто не видно, Забивать — текст повторяется до конца ячейки.

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

Когда отчёт формируется сам

В отчётах на системе компоновки данных (СКД) ячейки строит платформа, руками их не поправить. Перенос включается в оформлении:

  1. В форме отчёта откройте настройки (кнопка Настройки… или Ещё → Настройки…).
  2. Перейдите в расширенный режим, вкладка оформления.
  3. Добавьте условное оформление для нужного поля и задайте параметр Размещение = Переносить.
  4. Сохраните вариант отчёта, чтобы настройка не пропала при следующем открытии.

Если вкладок оформления нет, в форме включён простой режим настроек. Переключатель вида настроек обычно стоит в верхней части окна.

Многострочный текст в параметре печатной формы

Частая задача: в печатной форме вывести адрес, назначение платежа или примечание в несколько строк. Данные приходят в параметр макета, а перенос даёт сама ячейка.

  1. В макете у ячейки с параметром включите Размещение текста = Переносить.
  2. Сделайте ячейку достаточно широкой: объедините её с соседними, если колонка узкая.
  3. Не задавайте этой строке макета фиксированную высоту: тогда строка подстроится под текст.
  4. В коде заполнения передайте текст с Символы.ПС там, где нужен разрыв.
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Примечание = "Доставка до склада покупателя"
    + Символы.ПС + "Разгрузка силами покупателя";
ТабДок.Вывести(ОбластьШапка);

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

Многострочное поле в конфигураторе

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

Свойства поля ввода управляемой формы, которые отвечают за перенос:

СвойствоЧто даётТипичное значение
МногострочныйРежимEnter начинает новую строкуИстина
ВысотаСколько строк видно без прокрутки3–5
РастягиватьПоВертикалиПоле растёт вместе с окномИстина
РасширенноеРедактированиеДлинный текст можно редактировать в отдельном окнеПо ситуации

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

Многострочный текст в колонке таблицы

В табличной части каждая ячейка по умолчанию в одну строку. Чтобы показать несколько строк, у колонки формы включают автоматическую высоту ячейки (АвтоВысотаЯчейки), а у поля колонки — многострочный режим. Без этого текст с переносами виден в ячейке только до первого разрыва, остальное открывается при редактировании.

Если длинные тексты в табличной части — норма, удобнее вынести редактирование в отдельное многострочное поле под таблицей. Пользователь выбирает строку, а текст правит в большом поле.

Перенос строки программно: Символы.ПС и многострочные литералы

В коде встроенного языка разрыв строки задают системные символы:

  • Символы.ПС — перевод строки (LF), основной вариант;
  • Символы.ВК — возврат каретки (CR);
  • Символы.ВК + Символы.ПС — пара CR+LF, как в текстовых файлах Windows.

Пример сборки текста для поля или ячейки макета:

Текст = "Поставщик: " + Поставщик + Символы.ПС
      + "Договор № " + НомерДоговора + Символы.ПС
      + "Сумма: " + Формат(Сумма, "ЧДЦ=2");

Длинный текст можно записать прямо в модуле многострочным литералом. Каждая следующая строка начинается с вертикальной черты:

Текст = "Уважаемый клиент!
        |Напоминаем о сроке оплаты.
        |С уважением, бухгалтерия";

Отступ перед | не попадёт в текст: платформа его отбрасывает. Черта тоже в результат не входит.

Полезные функции для работы с переносами

ФункцияЧто делает
СтрЧислоСтрок(Текст)Сколько строк в тексте
СтрПолучитьСтроку(Текст, Н)Возвращает строку с номером Н
СтрРазделить(Текст, Символы.ПС)Делит текст на массив строк
СтрЗаменить(Текст, Символы.ПС, " ")Убирает переносы, заменяя их пробелом

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

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

Если поменять порядок, пара CR+LF превратится в два пробела подряд.

Переносы в данных из Excel, CSV и буфера обмена

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

Excel. Перенос внутри ячейки, набранный через Alt+Enter, хранится как символ LF. При чтении файла в табличный документ 1С он попадает в текст ячейки как Символы.ПС. В наименовании номенклатуры такой символ потом мешает поиску: на экране «Кабель ВВГ 3х2,5», а в базе между словами разрыв строки.

CSV и TXT. Поле в кавычках может содержать перенос. Если читать файл построчно через ЧтениеТекста.ПрочитатьСтроку(), одна запись развалится на две. Помогает подсчёт кавычек: пока их нечётное число, запись не закончилась.

Буфер = "";
Стр = Чтение.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
    Буфер = ?(Буфер = "", Стр, Буфер + Символы.ПС + Стр);
    Если СтрЧислоВхождений(Буфер, """") % 2 = 0 Тогда
        ОбработатьЗапись(Буфер); // ваша процедура разбора полей
        Буфер = "";
    КонецЕсли;
    Стр = Чтение.ПрочитатьСтроку();
КонецЦикла;

Буфер обмена. Копирование из Word, PDF или письма часто приносит разрывы посреди фразы. В многострочном поле они останутся как есть, в однострочном текст обрежется или склеится.

Перед загрузкой справочников из внешних файлов чистите наименования, ИНН, артикулы и коды от переносов. Для этого подойдёт код замены из предыдущего раздела.

Перед загрузкой файла в 1С
Выполнено: 0 / 5

Текст не переносится на экране или при печати

Большинство жалоб звучит как «перенос сделал, а его не видно». Причина почти всегда в отображении, а не в данных.

Диагностика: выберите симптом

Печать: на что смотреть в предварительном просмотре

  • 📏 Ширина колонок. Перенос идёт по правой границе ячейки. Узкая колонка — много строк, документ растягивается на лишний лист.
  • 📐 Объединённые ячейки. Перенос работает в пределах объединения. Если текст обрезан, проверьте, что объединён весь нужный диапазон.
  • 🖨 Масштаб. Режим «Вписать в лист» меняет фактическую ширину колонок. Сравнивайте предпросмотр и бумажный вариант при одном масштабе.
  • 🔤 Шрифт. Если в макете стоит шрифт, которого нет на компьютере пользователя, Windows подставит другой, и переносы съедут.

Частые ошибки при переносе строк

Ждать переноса от однострочного поля. Никакая комбинация клавиш не добавит туда разрыв. Если перенос нужен регулярно, это задача на доработку формы, а не на поиск «секретной кнопки».

Перенос в ключевом поле. Разрыв строки в ИНН, коде или артикуле ломает поиск и обмены: значение выглядит правильным, но не совпадает с эталоном. Такие поля храните строго в одну строку.

Текст с переносами в фиксированной длине. Каждый разрыв занимает один или два символа. В реквизите длиной 100 символов текст из пяти строк обрежется раньше, чем вы ожидаете.

CR+LF и LF вперемешку. Текст из Windows-файла приходит с парой символов, из веб-сервиса — с одиночным LF. При сравнении строк они не равны. Перед сравнением приводите к одному виду заменой.

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

Можно ли перенести строку в наименовании номенклатуры?
Обычно нет: поле наименования однострочное. Для длинного названия в документах используют реквизит «Полное наименование» или отдельное описание.
Как найти записи, где в тексте есть перенос строки?
В коде проверьте СтрНайти(Текст, Символы.ПС) > 0. В запросе удобнее выгрузить данные и отфильтровать уже во встроенном языке.
Почему письмо из 1С пришло одной строкой?
Письмо отправлено в формате HTML, а текст собран с Символы.ПС. В HTML перенос задаётся тегом br, обычный перевод строки браузер не показывает.
Сохраняются ли переносы при обмене между базами?
Да, при обмене через XML символы перевода строки передаются вместе со строкой. Теряются они только если обработка обмена сама их чистит.
Как перенести строку в сообщении пользователю?
Добавьте Символы.ПС внутрь текста, который передаёте в Сообщить() или в окно вопроса. Платформа покажет текст в несколько строк.