Как вывести на форму Надпись несколько раз

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Способ 1. Ручное создание в конфигураторе

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

  1. Откроем нужную форму в конфигураторе.
  2. Выделим существующий элемент типа Декорация — Надпись.
  3. Используем стандартное сочетание клавиш Ctrl+C для копирования и Ctrl+V для вставки.
  4. Система автоматически создаст новый элемент с уникальным именем (обычно добавляя порядковый номер в конец).

Проанализируем ситуацию: этот метод хорош своей простотой, но он становится крайне неудобным, если надписей должно быть 20, 50 или более. Кроме того, любое изменение оформления (например, цвета шрифта) придется применять к каждому элементу отдельно, если они не объединены общим стилем.

Способ 2. Динамическое программное создание в Управляемых формах

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

Посмотрим на пример кода, который создает несколько надписей внутри цикла. Чаще всего такой код размещается в процедуре ПриСозданииНаСервере.


&НаСервере
Процедура СоздатьНадписиДинамически(Количество)
    
    Для Счетчик = 1 По Количество Цикл
        
        // Формируем уникальное имя для каждого элемента
        ИмяЭлемента = "ДинамическаяНадпись_" + Счетчик;
        
        // Добавляем новый элемент декорации на форму
        // Элементы.Добавить(Имя, Тип, Родитель)
        НоваяНадпись = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), ЭтаФорма);
        
        // Указываем, что это именно надпись, а не картинка
        НоваяНадпись.Вид = ВидДекорацииФормы.Надпись;
        
        // Устанавливаем текст
        НоваяНадпись.Заголовок = "Это надпись номер " + Счетчик;
        
        // Можно настроить оформление
        НоваяНадпись.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
        
    КонецЦикла;
    
КонецПроцедуры

Разберем важные нюансы этого кода. При использовании метода Добавить критически важно соблюдать уникальность имен. Если вы попытаетесь создать элемент с именем, которое уже существует на форме, система вызовет исключение и прекратит работу. Также обратите внимание на параметр Родитель. Если вы хотите, чтобы надписи выстраивались в колонку или ряд, предварительно создайте на форме группу (например, типа Группа - Колонки) и передавайте ее в качестве третьего параметра метода Добавить.

Способ 3. Использование форматированной строки

Иногда задача «вывести надпись несколько раз» подразумевает вывод сложного многострочного текста, где разные части имеют разное оформление. Вместо того чтобы плодить десятки отдельных объектов типа Декорация, эффективнее использовать один элемент, но с типом ФорматированнаяСтрока.

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


&НаСервере
Процедура СформироватьСложнуюНадпись()
    
    МассивЧастей = Новый Массив;
    
    Для Счетчик = 1 По 5 Цикл
        МассивЧастей.Добавить("Строка №" + Счетчик);
        МассивЧастей.Добавить(Символы.ПС); // Добавляем перенос строки
    КонецЦикла;
    
    // Преобразуем массив в форматированную строку
    Результат = Новый ФорматированнаяСтрока(МассивЧастей);
    
    // Присваиваем значение элементу декорации на форме
    // Элемент "ОбщаяДекорация" должен быть заранее создан с типом "Надпись"
    Элементы.ОбщаяДекорация.Заголовок = Результат;
    
КонецПроцедуры

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

Способ 4. Работа в Обычных формах (Толстый клиент)

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

Разберем по шагам алгоритм программного вывода в обычном интерфейсе:

  1. Используем метод ЭлементыФормы.Добавить, указывая тип Тип("Надпись").
  2. Обязательно рассчитываем координаты: свойства Верх, Лево, Ширина и Высота.
  3. Устанавливаем свойство Видимость в значение Истина.

Посмотрим на пример кода для обычных форм:


Процедура СоздатьНадписиВОбычнойФорме()
    
    ОтступСверху = 10;
    ВысотаНадписи = 20;
    
    Для Счетчик = 1 По 5 Цикл
        
        Имя = "Надпись_" + Счетчик;
        НоваяНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), Имя, Истина);
        
        НоваяНадпись.Заголовок = "Надпись " + Счетчик;
        НоваяНадпись.Лево = 10;
        НоваяНадпись.Ширина = 200;
        НоваяНадпись.Высота = ВысотаНадписи;
        НоваяНадпись.Верх = ОтступСверху;
        
        // Увеличиваем отступ для следующего элемента
        ОтступСверху = ОтступСверху + ВысотаНадписи + 5;
        
    КонецЦикла;
    
КонецПроцедуры

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

Ограничения и рекомендации по производительности

Важно помнить о производительности интерфейса. Создание большого количества элементов (более 100) на одной форме может привести к заметным задержкам при ее открытии. Если вам нужно вывести очень много однотипных строк, рассмотрите альтернативные варианты:

Подводя итог, выбор метода зависит от конкретной задачи. Для статики используем Ctrl+C / Ctrl+V, для динамики в Управляемом приложении — метод Элементы.Добавить(), а для сложного оформления одной надписи — ФорматированнаяСтрока. Помните о родительских группах, чтобы ваши надписи автоматически распределялись по форме без ручного указания координат.

← На главную