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