Разработка и Конфигурация · 10 мин
Как сделать текст в 1С: строки в коде, формах и документах
Как создать и вывести текст в 1С: строковые литералы, переносы строк, СтрШаблон, НСтр, форматированный документ и текстовые поля форм. Примеры кода и ошибки.
Текст в 1С встречается повсюду: сообщения пользователю, надписи на формах, многострочные поля ввода, печатные формы, комментарии в документах. В зависимости от задачи «сделать текст» означает разное: объявить строковую переменную во встроенном языке, собрать строку из частей с подстановкой параметров, вывести многострочный текст с переносами или добавить форматированный текст на форму.
Основной инструмент — строковый тип данных и набор встроенных функций: СтрШаблон, СтрСоединить, НСтр, СокрЛП, СтрДлина и других. Для вывода пользователю используются Сообщить, ПоказатьПредупреждение, элементы формы «Поле надписи» и «Поле текстового документа», а для красивого оформления — объект «Форматированный документ».
Ниже разобраны практические сценарии: от простого объявления строки до многоязычных сообщений и форматированного текста. Примеры приведены на встроенном языке 1С и подходят для управляемых форм типовых и самописных конфигураций на платформе 8.3.
Как объявить строку и задать текст в коде
Строковый литерал записывается в двойных кавычках. Если внутри текста нужна сама кавычка, её удваивают. Переменной строка присваивается обычным оператором присваивания, тип определяется автоматически.
ИмяКонтрагента = "ООО ""Ромашка""";
ПустаяСтрока = "";
ДлинаИмени = СтрДлина(ИмяКонтрагента);
Строки в 1С неизменяемы: любая операция (замена, обрезка, добавление) возвращает новую строку, а не меняет исходную. Поэтому конструкция СокрЛП(Текст) сама по себе ничего не делает — результат нужно присвоить: Текст = СокрЛП(Текст). Это одна из самых частых ошибок начинающих.
Для проверки, пустая ли строка (включая строку из одних пробелов), используйте функцию ПустаяСтрока(Текст) — она надёжнее сравнения с пустым литералом "", потому что учитывает пробелы и неразрывные пробелы.
Как сделать многострочный текст с переносами
Есть два способа задать текст из нескольких строк. Первый — вертикальная черта в начале каждой следующей строки литерала: платформа склеивает такие фрагменты в одну строку с реальными переносами. Второй — явная вставка символа переноса Символы.ПС при соединении частей.
Адрес = "г. Москва,
|ул. Примерная, д. 1,
|офис 10";
Подпись = "С уважением," + Символы.ПС + "Отдел продаж";
Помимо Символы.ПС доступны Символы.ВК (возврат каретки), Символы.Таб (табуляция) и Символы.НПП (неразрывный пробел). Для файлов обмена иногда требуется комбинация ВК+ПС — проверяйте требования формата.
Если многострочный текст собирается из элементов массива, не склеивайте его в цикле оператором «+» — добавьте строки в массив и вызовите СтрСоединить(Массив, Символы.ПС). Это и быстрее, и читабельнее.
Как собрать текст с подстановкой значений
Склеивание через «+» быстро становится нечитаемым, когда в текст подставляются несколько значений. Для этого в платформе есть СтрШаблон: в шаблоне расставляются места подстановки %1, %2 и так далее, а параметрами передаются значения.
Текст = СтрШаблон("По контрагенту %1 задолженность %2 руб. на дату %3",
Контрагент, Формат(Сумма, "ЧДЦ=2"), Формат(Дата, "ДЛФ=D"));
Значения подставляются в строковом представлении, поэтому числа и даты лучше предварительно прогнать через Формат() — иначе получите представление по умолчанию, которое не всегда подходит для сообщения пользователю. Например, дата выведется с временем, а число — с разделителем групп не в том виде.
Для соединения готовых строк с разделителем используйте СтрСоединить(МассивСтрок, "; "), а для разбора текста на части — СтрРазделить(Текст, ",", Ложь). Эти функции заменяют самописные циклы поиска подстроки.
Текст = СтрШаблон("Заказ №%1 от %2 оформлен на сумму %3 руб.", Номер, Формат(ДатаЗаказа, "ДЛФ=D"), Формат(Сумма, "ЧДЦ=2"))Как вывести текст пользователю
Сообщение в панели сообщений
Конструкция Сообщить("Текст") выводит строку в служебную панель сообщений. Более управляемый вариант — объект СообщениеПользователю: ему можно задать поле формы, к которому привязано сообщение, тогда платформа подсветит ошибочный реквизит.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не заполнено поле ""Комментарий""";
Сообщение.Поле = "Комментарий";
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();
Диалоговые окна
Для модального предупреждения в тонком клиенте используется асинхронный вызов ПоказатьПредупреждение(ОписаниеОповещения, Текст, Таймаут), для вопроса с кнопками — ПоказатьВопрос. Старые модальные методы Предупреждение() и Вопрос() в управляемом приложении запрещены, если в конфигурации отключён режим использования модальности.
Как добавить текст на форму
Для статического текста на форме используется реквизит формы типа «Строка» и элемент «Поле» с видом «Поле надписи» — текст задаётся в свойстве «Заголовок» или берётся из данных. Если текст нужно редактировать, выбирайте вид «Поле ввода» и включайте свойство «Многострочный режим» для многострочного содержимого.
Программно надпись меняется через реквизит формы: ЭтотОбъект.НадписьСтатус = "Документ проведён";. Для оформления доступны цвет текста, шрифт и выравнивание в палитре свойств элемента формы.
Когда нужен текст с жирными фрагментами, ссылками и списками, используйте реквизит типа «ФорматированныйДокумент» и элемент «Поле форматированного документа». Заполняется он программно через объектную модель: добавление абзацев, текста и гиперссылок.
- 1Откройте форму в конфигураторе, добавьте реквизит формы типа «Строка»
- 2Перетащите реквизит в дерево элементов формы
- 3Установите вид «Поле надписи» для только чтения или «Поле ввода» для редактирования
- 4При необходимости включите «Многострочный режим» и задайте цвет или шрифт
- 5Проверьте в режиме предприятия: текст отображается и обновляется при изменении реквизита
Многоязычный текст и НСтр
Если конфигурация работает на нескольких языках, строки интерфейса нельзя зашивать в код напрямую. Функция НСтр("ru='Текст сообщения'; en='Message text'") возвращает вариант на языке текущего сеанса. В типовых конфигурациях это обязательный стандарт для всех видимых пользователю строк.
Даже в одноязычной конфигурации использование НСтр("ru='...'") полезно: такие строки легко найти и вынести при переводе. Обратите внимание: внутри НСтр нельзя использовать конкатенацию с переменными — подстановку делайте через СтрШаблон поверх результата.
Сравнение вариантов вывода текста
Для служебных сообщений и ошибок заполнения; не блокирует работу, но легко пропустить
Для важных уведомлений, требующих подтверждения; блокирует сценарий до закрытия
Для постоянно видимых статусов и подсказок; требует места на форме
Как проверить результат и типичные ограничения
После изменений откройте форму или выполните код в режиме предприятия и проверьте: текст выводится полностью без обрезки, переносы строк отображаются, подставленные значения имеют нужный формат. Для надписей проверьте поведение при длинном тексте — не «разъезжается» ли форма.
Полезные функции для проверки содержимого: СтрНайти(Текст, "подстрока") возвращает позицию вхождения или 0, СтрЧислоВхождений считает вхождения, СтрЗаменить заменяет все вхождения подстроки. Регистронезависимое сравнение делается через НРег() или ВРег() с обеих сторон сравнения.
Как проверить результат
Каждая строка на своём месте, переносы видны
Весь текст в одну строку — не включён многострочный режим или потерян Символы.ПС
Числа и даты в заданном формате
Выводится «%1» — параметр не передан в СтрШаблон
ПустаяСтрока() возвращает Истина для пробелов
Проверка на "" пропускает строку из пробелов
Часто задаваемые вопросы
Как вставить кавычки внутрь строки в 1С?
Удвойте кавычку внутри литерала: "Он сказал ""Привет""". Платформа воспримет пару двойных кавычек как одну литеральную.
Почему СокрЛП не убирает пробелы?
Функция возвращает новую строку, а не меняет исходную. Нужно присвоить результат: Текст = СокрЛП(Текст). Также проверьте, что в строке нет неразрывных пробелов — их удаляет СокрЛП, но не всегда удаляют внешние обработки.
Как сделать перенос строки в сообщении пользователю?
Вставьте Символы.ПС между частями текста или используйте многострочный литерал с вертикальной чертой. В панели сообщений переносы отображаются корректно.
Чем СтрШаблон лучше склейки через «+»?
Шаблон читабельнее при нескольких подстановках, проще редактируется и переводится. По скорости разница незначительна для одиночных операций, но в циклах лучше собирать массив и вызывать СтрСоединить.
Как вывести текст на печатную форму?
Текст размещается в ячейке макета табличного документа. Для подстановки данных используются параметры макета (имена в квадратных скобках), которые заполняются через Параметры.ИмяПараметра при выводе области.
Можно ли форматировать часть текста в сообщении?
В Сообщить и предупреждениях — нет, там выводится обычная строка. Для форматированного текста используйте Поле форматированного документа на форме или HTML-документ в поле браузера.
Что важно запомнить
Строка создаётся литералом в кавычках, переносы — через Символы.ПС или вертикальную черту, подстановка значений — через СтрШаблон, вывод пользователю — через Сообщить или ПоказатьПредупреждение. Результат строковых функций всегда нужно присваивать, а пустоту проверять функцией ПустаяСтрока.