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

В этой статье мы разберем все актуальные способы переноса текста — от ручного ввода символов до программных решений для разработчиков. Вы узнаете, как правильно оформить многострочный текст в Строка, ТекстДокумента или HTMLДокумент, а также избежать типичных ошибок при выводе данных на печать. Особое внимание уделим различиям между платформами 1С 8.3 и 1С 8.2, где механизмы форматирования могут отличаться.

1. Ручное форматирование текста в пользовательском режиме

Самый простой способ переноса — использование клавиши Enter при работе с текстовыми полями в формах документов или справочников. Однако здесь есть подводные камни:

  • 📌 В полях типа Строка (ограниченной длины) клавиша Enter может не сработать — текст просто обрежется при сохранении.
  • 📝 В полях типа Текст или Неограниченный текст перенос работает корректно, но при выводе на печать может игнорироваться.
  • 🖼️ В HTML-документах (например, в описаниях номенклатуры) для переноса используйте тег <br>.

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

💡

Для гарантированного сохранения форматирования используйте комбинацию Shift+Enter — это создаст "мягкий" перенос, который лучше воспринимается системой.

2. Символы переноса в программном коде

При работе в конфигураторе или написании скриптов для переноса строк используются специальные символы. Основные варианты:

СимволОписаниеПример использования
|Вертикальная черта (для разделения строк в запросах)
Текст = "Строка1 | Строка2";
~Тильда (для переноса в текстах запросов)
Запрос.Текст = "ВЫБРАТЬ ~

| Номенклатура КАК Товар";

Символы.ПСПараметр строки (системная константа)
Текст = "Первая строка" + Символы.ПС + "Вторая строка";
Chr(13)+Chr(10)ASCII-коды возврата каретки и новой строки
Текст = "Привет" + Chr(13)+Chr(10) + "Мир";

Важно: в версиях 1С старше 8.3.10 символ | может некорректно обрабатываться в некоторых отчетах — используйте Символы.ПС для совместимости.

3. Перенос в печатных формах и отчетах

При формировании печатных форм (например, счетов или накладных) переносы текста часто игнорируются. Решения:

  • 📄 В конструкторе печатных форм используйте элемент ТекстовыйДокумент с включенным свойством ПереносСлов = Истина.
  • 🖨️ Для табличных документов настройте свойство ПереноситьПоСловам в колонках.
  • 🔧 В коде отчета замените переносы на HTML-теги:
    Текст = СтрЗаменить(Текст, Символы.ПС, "<br>");
⚠️ Внимание: При экспорте в Excel переносы строк (Символы.ПС) могут отображаться как квадратики. Используйте функцию СтрЗаменить() для замены на Chr(10) перед экспортом.
📊 Какой способ переноса вы используете чаще?
Ручной ввод (Enter)
Программный код (Символы.ПС)
HTML-теги (<br>)
Конструктор печатных форм

4. Работа с текстовыми документами (ТекстДокумент)

Объект ТекстДокумент предоставляет расширенные возможности форматирования. Примеры:

ТекстДок = Новый ТекстДокумент;

ТекстДок.ДобавитьСтроку("Первая строка");

ТекстДок.ДобавитьСтроку("Вторая строка"); // Автоматический перенос

ТекстДок.ВставитьСимвол(Символы.ПС); // Явный перенос

Для работы с абзацами:

Абзац = ТекстДок.Абзацы.Добавить();

Абзац.Текст = "Новый абзац с автоматическим переносом";

Установить свойство ПереносСлов = Истина|

Проверить ширину области вывода|

Использовать методы ДобавитьСтроку() вместо ручного ввода символов|

Тестировать вывод на печать перед сохранением-->

5. Перенос в HTML-документах и веб-клиенте

При работе с HTMLДокумент или в веб-клиенте 1С используйте стандартные HTML-теги:

HTMLТекст = "<p>Первая строка<br>Вторая строка</p>";

HTMLДок = Новый HTMLДокумент;

HTMLДок.УстановитьТекст(HTMLТекст);

Особенности:

  • 🌐 Тег <br> обеспечивает принудительный перенос.
  • 📏 Для автоматического переноса по ширине используйте CSS-свойство word-wrap: break-word.
  • 🔄 В управляемых формах HTML-разметка поддерживается только в полях типа HTMLДокумент.
⚠️ Внимание: В тонком клиенте 1С некоторые CSS-свойства могут игнорироваться. Всегда тестируйте отображение в целевой конфигурации.

6. Перенос в запросах и SQL-выражениях

При написании длинных запросов в 1С:Предприятие для улучшения читаемости кода используйте:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Наименование КАК Товар,

| СУММА(Документ.Количество) КАК Количество

|ИЗ

| Документ.РеализацияТоваров КАК Документ

|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

|ПО Документ.Номенклатура = Номенклатура.Ссылка

|СГРУППИРОВАТЬ ПО Номенклатура.Наименование";

В SQL-запросах к внешним базам данным (через ADODB или HTTPСервис) используйте стандартный синтаксис:

SQLТекст = "SELECT

field1,

field2

FROM table1

WHERE condition = 'value'";

7. Типичные ошибки и их решения

Разберем распространенные проблемы и способы их устранения:

ПроблемаПричинаРешение
Переносы игнорируются при печатиНеверный тип поля в макетеИспользуйте ТекстовыйДокумент вместо Строка
Символы | отображаются как текстНе экранированы в запросеЗамените на ~ или Символы.ПС
Текст "слипается" в ExcelНеверный символ переносаИспользуйте Chr(10) вместо Символы.ПС
Перенос не работает в веб-клиентеОтсутствует HTML-разметкаДобавьте теги <br> или <p>
Почему в некоторых отчетах переносы заменяются на пробелы?

Это связано с настройками шрифта в макете отчета. Если в свойствах текстового поля установлен флаг "Автоподбор ширины" или "Перенос по словам" отключен, система автоматически заменяет символы переноса на пробелы для корректного размещения текста в ячейке.

8. Автоматизация переносов с помощью обработок

Для массовой обработки текстов создайте универсальную обработку:

Процедура ПеренестиТекст(Текст, МаксДлинаСтроки = 50) Экспорт

Результат = "";

МассивСлов = СтрРазделить(Текст, " ");

ТекущаяДлина = 0;

Для Каждого Слово Из МассивСлов Цикл

Если ТекущаяДлина + СтрДлина(Слово) > МаксДлинаСтроки Тогда

Результат = Результат + Символы.ПС;

ТекущаяДлина = 0;

КонецЕсли;

Результат = Результат + Слово + " ";

ТекущаяДлина = ТекущаяДлина + СтрДлина(Слово) + 1;

КонецЦикла;

Возврат Результат;

КонецПроцедуры

Вызов обработки:

ОтформатированныйТекст = ПеренестиТекст(ИсходныйТекст, 40);
💡

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

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

В табличном документе перенос текста в ячейке настраивается через свойства колонки. Выделите нужную колонку, откройте палитру свойств (F4) и установите:

  • ПереноситьПоСловам = Истина
  • ГоризонтальноеПоложение = ГоризонтальноеПоложение.Авто

Для принудительного переноса внутри ячейки используйте комбинацию Alt+Enter при редактировании.

Почему в 1С 8.2 и 8.3 разные символы переноса?

В 1С 8.2 для переноса использовался только символ с кодом 10 (LF), mientras que в 1С 8.3 добавлена поддержка пары 13+10 (CRLF) для совместимости с Windows-стандартами. При миграции кода между версиями рекомендуется использовать универсальную конструкцию:

ПереносСтроки = ?

Когда ВерсияПлатформы() >= "8.3.10"

Тогда Chr(13) + Chr(10)

Иначе Chr(10)

Конец;

Можно ли настроить автоматический перенос в полях ввода?

Да, для полей ввода в управляемых формах настройте свойство МногострочныйРежим = Истина. Это позволит:

  • Использовать клавишу Enter для переноса
  • Автоматически расширять поле по высоте
  • Сохранять форматирование при сохранении документа

Ограничение: в обычных формах (8.2) это свойство недоступно — требуется ручная правка формы.

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

В методе ПоказатьОповещение() переносы строк игнорируются. Используйте один из вариантов:

  1. Разбейте текст на несколько вызовов:
    ПоказатьОповещениеПользователя("Первая часть текста");
    

    ПоказатьОповещениеПользователя("Вторая часть текста");

  2. Создайте форму с полем ПолеHTMLДокумента и отобразите форматированный текст.
Какие есть альтернативы символу | для переноса в запросах?

Помимо | и ~, в новых версиях платформы поддерживаются:

  • / комментарий / для визуального разделения частей запроса
  • #Если ... Тогда ... Иначе ... КонецЕсли для условной компиляции
  • Пробелы и отступы (не влияют на выполнение, но улучшают читаемость)

Пример с комментариями:

ТекстЗапроса =

"ВЫБРАТЬ

/ Основные поля /

поле1,

поле2

ИЗ таблица1

/ Условия отбора /

ГДЕ поле3 = &Значение1";