Можно ли выбрать картинку из коллекции картинок в свойствах декорации?

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

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

Причины поведения элемента и ограничения платформы

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

  1. Назначение декорации. Элемент управления ДекорацияФормы вида Картинка рассчитан исключительно на отображение одиночных статических изображений. В его палитре свойств изначально отсутствуют параметры для задания индекса кадра или указания смещения по спрайту. Кроме того, у декорации отсутствует свойство ПутьКДанным, что исключает ее прямую привязку к значениям реквизитов формы.
  2. Центрирование и ограничение размеров. Если назначить коллекцию картинок в свойство Картинка декорации, платформа воспринимает весь спрайт (ленту иконок) как единое неделимое полотно. Элемент формы центрирует изображение по горизонтали и вертикали, а границы элемента обрезают всё, что выходит за пределы его ширины и высоты. В результате на форме отображается именно тот фрагмент ленты, который попал в геометрический центр, создавая иллюзию выбора центрального элемента.
  3. Ограничения встроенного языка. Во встроенном языке объект Картинка не содержит методов для программного разделения или извлечения конкретного кадра по его индексу. По этой причине «вырезать» часть коллекции и передать ее в свойство декорации через код невозможно — декорации можно присвоить только готовую самостоятельную картинку.

Альтернативное решение: использование поля картинки без программного кода

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

  1. Создание реквизита формы. Перейдем в структуру реквизитов формы и добавим новый реквизит числового типа (Число, длина 2, точность 0). В свойствах реквизита в поле «Значение» укажем номер необходимой картинки. Важно помнить, что индексация пиктограмм в коллекции картинок 1С начинается с нуля (индекс 0 соответствует первому значку, 1 — второму и так далее). Если коллекция состоит всего из двух состояний, реквизит можно объявить с типом Булево (значение Ложь выведет иконку с индексом 0, а Истина — с индексом 1).
  2. Создание элемента формы. На вкладке элементов формы добавим новый элемент и установим его свойство Вид в значение ПолеКартинки.
  3. Связывание с данными и коллекцией. В палитре свойств созданного поля картинки выполним следующие настройки:
    1. В свойстве ПутьКДанным укажем созданный числовой реквизит формы.
    2. В свойстве КартинкаЗначений выберем нужную коллекцию из ветки метаданных ОбщиеКартинки.
    3. В свойстве ПоложениеЗаголовка выберем значение Нет, чтобы элемент выглядел на форме как обычная декорация.

В результате платформа 1С автоматически прочитает значение реквизита и отобразит строго соответствующую иконку из коллекции без единой строчки программного кода.

Альтернативный вариант: разделение коллекции на отдельные картинки

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

  1. Извлечем исходную ленту иконок и разрежем ее на самостоятельные графические файлы с помощью любого графического редактора.
  2. Загрузим полученные пиктограммы в дерево конфигурации в ветку ОбщиеКартинки в виде отдельных элементов метаданных.
  3. В свойствах элемента Декорация в поле Картинка напрямую выберем требуемую общую картинку.

Такой способ исключает необходимость в дополнительных реквизитах и позволяет отобразить требуемый значок через стандартную декорацию формы.

← На главную