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

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

Как сделать текст в 1С: строки в коде, формах и документах

Как создать и вывести текст в 1С: строковые литералы, переносы строк, СтрШаблон, НСтр, форматированный документ и текстовые поля форм. Примеры кода и ошибки.

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

Основной инструмент — строковый тип данных и набор встроенных функций: СтрШаблон, СтрСоединить, НСтр, СокрЛП, СтрДлина и других. Для вывода пользователю используются Сообщить, ПоказатьПредупреждение, элементы формы «Поле надписи» и «Поле текстового документа», а для красивого оформления — объект «Форматированный документ».

Ниже разобраны практические сценарии: от простого объявления строки до многоязычных сообщений и форматированного текста. Примеры приведены на встроенном языке 1С и подходят для управляемых форм типовых и самописных конфигураций на платформе 8.3.

Как объявить строку и задать текст в коде

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

ИмяКонтрагента = "ООО ""Ромашка""";

ПустаяСтрока = "";

ДлинаИмени = СтрДлина(ИмяКонтрагента);

Строки в 1С неизменяемы: любая операция (замена, обрезка, добавление) возвращает новую строку, а не меняет исходную. Поэтому конструкция СокрЛП(Текст) сама по себе ничего не делает — результат нужно присвоить: Текст = СокрЛП(Текст). Это одна из самых частых ошибок начинающих.

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

Типичные ошибки
01
СокрЛП(Текст) без присваивания — строка не меняется, пробелы остаются
02
Сравнение с "" вместо ПустаяСтрока() — строка из пробелов считается заполненной
03
Одинарная кавычка внутри текста вместо удвоенной двойной — синтаксическая ошибка или обрезанный текст
04
Конкатенация в цикле через «+» для тысяч строк — заметное падение производительности, лучше СтрСоединить из массива

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

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

Адрес = "г. Москва,

|ул. Примерная, д. 1,

|офис 10";

Подпись = "С уважением," + Символы.ПС + "Отдел продаж";

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

Если многострочный текст собирается из элементов массива, не склеивайте его в цикле оператором «+» — добавьте строки в массив и вызовите СтрСоединить(Массив, Символы.ПС). Это и быстрее, и читабельнее.

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

Склеивание через «+» быстро становится нечитаемым, когда в текст подставляются несколько значений. Для этого в платформе есть СтрШаблон: в шаблоне расставляются места подстановки %1, %2 и так далее, а параметрами передаются значения.

Текст = СтрШаблон("По контрагенту %1 задолженность %2 руб. на дату %3",

Контрагент, Формат(Сумма, "ЧДЦ=2"), Формат(Дата, "ДЛФ=D"));

Значения подставляются в строковом представлении, поэтому числа и даты лучше предварительно прогнать через Формат() — иначе получите представление по умолчанию, которое не всегда подходит для сообщения пользователю. Например, дата выведется с временем, а число — с разделителем групп не в том виде.

Для соединения готовых строк с разделителем используйте СтрСоединить(МассивСтрок, "; "), а для разбора текста на части — СтрРазделить(Текст, ",", Ложь). Эти функции заменяют самописные циклы поиска подстроки.

bsl
Текст = СтрШаблон("Заказ №%1 от %2 оформлен на сумму %3 руб.", Номер, Формат(ДатаЗаказа, "ДЛФ=D"), Формат(Сумма, "ЧДЦ=2"))

Как вывести текст пользователю

Сообщение в панели сообщений

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

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Не заполнено поле ""Комментарий""";

Сообщение.Поле = "Комментарий";

Сообщение.УстановитьДанные(Объект);

Сообщение.Сообщить();

Диалоговые окна

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

Как добавить текст на форму

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

Программно надпись меняется через реквизит формы: ЭтотОбъект.НадписьСтатус = "Документ проведён";. Для оформления доступны цвет текста, шрифт и выравнивание в палитре свойств элемента формы.

Когда нужен текст с жирными фрагментами, ссылками и списками, используйте реквизит типа «ФорматированныйДокумент» и элемент «Поле форматированного документа». Заполняется он программно через объектную модель: добавление абзацев, текста и гиперссылок.

Порядок действий: надпись на форме
  1. 1
    Откройте форму в конфигураторе, добавьте реквизит формы типа «Строка»
  2. 2
    Перетащите реквизит в дерево элементов формы
  3. 3
    Установите вид «Поле надписи» для только чтения или «Поле ввода» для редактирования
  4. 4
    При необходимости включите «Многострочный режим» и задайте цвет или шрифт
  5. 5
    Проверьте в режиме предприятия: текст отображается и обновляется при изменении реквизита

Многоязычный текст и НСтр

Если конфигурация работает на нескольких языках, строки интерфейса нельзя зашивать в код напрямую. Функция НСтр("ru='Текст сообщения'; en='Message text'") возвращает вариант на языке текущего сеанса. В типовых конфигурациях это обязательный стандарт для всех видимых пользователю строк.

Даже в одноязычной конфигурации использование НСтр("ru='...'") полезно: такие строки легко найти и вынести при переводе. Обратите внимание: внутри НСтр нельзя использовать конкатенацию с переменными — подстановку делайте через СтрШаблон поверх результата.

Сравнение вариантов вывода текста

Сообщить / СообщениеПользователю

Для служебных сообщений и ошибок заполнения; не блокирует работу, но легко пропустить

ПоказатьПредупреждение

Для важных уведомлений, требующих подтверждения; блокирует сценарий до закрытия

Поле надписи на форме

Для постоянно видимых статусов и подсказок; требует места на форме

Как проверить результат и типичные ограничения

После изменений откройте форму или выполните код в режиме предприятия и проверьте: текст выводится полностью без обрезки, переносы строк отображаются, подставленные значения имеют нужный формат. Для надписей проверьте поведение при длинном тексте — не «разъезжается» ли форма.

Полезные функции для проверки содержимого: СтрНайти(Текст, "подстрока") возвращает позицию вхождения или 0, СтрЧислоВхождений считает вхождения, СтрЗаменить заменяет все вхождения подстроки. Регистронезависимое сравнение делается через НРег() или ВРег() с обеих сторон сравнения.

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

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

Отображение многострочного текста
Норма

Каждая строка на своём месте, переносы видны

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

Весь текст в одну строку — не включён многострочный режим или потерян Символы.ПС

Подстановка значений
Норма

Числа и даты в заданном формате

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

Выводится «%1» — параметр не передан в СтрШаблон

Пустые значения
Норма

ПустаяСтрока() возвращает Истина для пробелов

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

Проверка на "" пропускает строку из пробелов

Часто задаваемые вопросы

Как вставить кавычки внутрь строки в 1С?

Удвойте кавычку внутри литерала: "Он сказал ""Привет""". Платформа воспримет пару двойных кавычек как одну литеральную.

Почему СокрЛП не убирает пробелы?

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

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

Вставьте Символы.ПС между частями текста или используйте многострочный литерал с вертикальной чертой. В панели сообщений переносы отображаются корректно.

Чем СтрШаблон лучше склейки через «+»?

Шаблон читабельнее при нескольких подстановках, проще редактируется и переводится. По скорости разница незначительна для одиночных операций, но в циклах лучше собирать массив и вызывать СтрСоединить.

Как вывести текст на печатную форму?

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

Можно ли форматировать часть текста в сообщении?

В Сообщить и предупреждениях — нет, там выводится обычная строка. Для форматированного текста используйте Поле форматированного документа на форме или HTML-документ в поле браузера.

Итог

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

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