Вывод картинок в строках таблиц формы в управляемом приложении

Публикация № 272767

Разработка - Практика программирования

Картинки управляемая форма

41
Начинающие программисты на платформе 8.2 иногда сталкиваются с проблемой вывода картинок в различных таблицах управляемой формы. Данная статья подробно рассказывает о механизме вывода картинок.

Начинающие программисты на платформе 8.2 иногда сталкиваются с проблемой вывода картинок в различных таблицах формы. На платформе 8.1 зачастую это делалось программно в обработке события ПриПолученииДанных либо ПриВыводеСтроки. В 8.2 же ничего программировать не надо, а лишь достаточно правильно заполнить значения свойств интерфейсных объектов. Ключевым моментом является то, что в итоговой таблице у нас должна быть отдельная колонка, содержащая индекс выводимой картинки. Попробуем вывести картинку. Есть у нас, например, справочник пользователей, в котором есть реквизит «ЕстьВИнформационнойБазе» типа булево, и нам бы хотелось выводить картинку пользователя в цвете, если пользователь есть, и серую, если его нет в информационной базе Изображение.

Вставим в нашу форму динамический список, поставим флажок произвольного запроса и зададим запрос в следующем виде:

Изображение

Поставим реквизиту «ИндексКартинки» флажок «Использовать всегда», т.к. на форму мы выводить его не будем. Теперь добавим наш динамический список на форму и зададим свойства «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок»

Изображение

В результате у нас выведется список в следующем виде:

Изображение

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

Изображение

Теперь создаем новую группу колонок в таблице вывода динамического списка и перемещаем туда колонки «Код» и «ИндексКартинки». Для группы колонок задаем группировку «В ячейке».

Изображение

Для колонки «ИндексКартинки» задаем вид «Поле картинки» и в появившееся свойство «КартинкаЗначений» указываем нашу картинку. Ну и уберем заголовок, чтоб не отсвечивал :)

Изображение

В результате список приобретет вид:

Изображение

Удачных разработок!

41

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. nixel 787 18.04.14 12:43 Сейчас в теме
Зачем переписывать "Разработку управляемого интерфейса"?
2. Yashazz 2520 08.05.14 15:40 Сейчас в теме
(1) А чтоб 10 плюсов заработать, не иначе. Тем более, что и описание-то хромое, случай произвольных табличных полей не упомянут, а там чуть иначе, никакого "ПутьКДаннымКартинкиСтроки", начинающих это может сбить с толку. И откуда нумерация иконок в картинке начинается, не сказано (а она с нуля). И другие вопросы не освещены. В общем, передрано ради стартманей, походу.
takedas005; Lo1jke; ivv1970; Abenefic; rpgshnik; MherArsh; +6 1 Ответить
3. mikl79 107 25.05.16 13:32 Сейчас в теме
Думаю это поможет начинающим, статья полезная, но все таки действительно - как задать нумерацию иконок в картинке?
4. semario 9 02.06.16 05:01 Сейчас в теме
Статья написана без фанатизма, все понятно. Возник такой вопрос, кто сталкивался с добавлением картинки в корень дерева списка, не могу понять? у строк выводится, в корне дерева картинки нет.
5. rpgshnik 1610 29.07.16 11:12 Сейчас в теме
Ничего не понятно
avk_avk; Aspire1C; kadild; ivv1970; dimasts; +5 Ответить
6. asi2004 27.09.17 11:29 Сейчас в теме
Еще было бы написано, что картинка - это коллекция картинок, т.е. лента 16 пикселей х 16*n (в ширину) сохраненная в png
7. dimasts 22 13.11.17 10:12 Сейчас в теме
(6)А как сделать разные картинки? Можно ли на ходу генерировать коллекцию при открытии формы списка? Весь интернет изрыл. Все примеры с предопределёнными в конфигураторе коллекциями.
8. Matveymc 119 13.11.17 13:58 Сейчас в теме
(7) Можно, вот пример http://v8.1c.ru/metod/faq2/answer.jsp?id=629
Либо можно загнать все картинки методом ПоместитьВоВременноеХранилище в память и выводить на форму адреса этих картинок
10. dimasts 22 13.11.17 17:46 Сейчас в теме
(8) Это не совсем то. Смысл в том, что картинка с индексом 1 одна и та же, а с индексом два зависит от реквизитов объекта открытой формы. Например в переписке наши письма отображаются с логотипом, а письма клиента с его аватаром. Надо как-то программно подсунуть коллекцию из двух картинок.
11. DarkUser 13.11.17 18:58 Сейчас в теме
(10) Можно создать справочник Картинки, с реквизитами ДвоичныеДанные и СтрокаАдреса. В в реквизит "ДвоичныеДанные" грузите картинку, реквизит СтрокаАдреса заполняете ссылкой на элемент справочника\двоичныеданные.

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

Профит. Любые картинки в вашей таблице.
grachev1c; Gorr; dimasts; +3 Ответить
13. dimasts 22 13.11.17 20:34 Сейчас в теме
Пытаюсь обойтись без справочника. Подсовываю разные данные ни чего не получается.
Элементы.МойДинамическийСписок.КартинкаЗначений =... понимает только ...= БиблиотекаКартинок.МояКартинка и не понимает ссылок на временное хранилище, картинки созданные из файлов на сервере, двоичные данные или реквизиты типа картинка.
Говорит несоответствие типов. видимо проблема в том, что это свойство понимает только НЕ абсолютные картинки
как быть?
14. DarkUser 13.11.17 21:32 Сейчас в теме
(13) Реквизит динамического списка должен быть строкой. И в него необходимо поместить навигационную ссылку на элемент в базе 1С, хранящий саму картинку. А тип поля у него должен быть Картинка.
12. dimasts 22 13.11.17 19:41 Сейчас в теме
9. Matveymc 119 13.11.17 14:02 Сейчас в теме
(6) Формат не обязательно PNG, хоть JPEG, хоть BMP и любой другой картиночный, а в последних платформах так и вообще zip
16. Dmitrii D 13.03.18 14:22 Сейчас в теме
А мне понравилось, ничего кроме, как тут не нашел в интернете, но если бы не комментарий (6), то правда бы ничего не понял.

п.с. для документа нужна картинка СостоянияДокумента =)
15. Gorr 39 12.01.18 00:34 Сейчас в теме
А вместе с коментами получилась вполне себе полезная заметка!
17. Zedd4D 8 27.04.18 13:55 Сейчас в теме
Хорошая в итоге тема вышла.

С вашего позволения вставлю и свои пять копеек.

Можно навигационную ссылку заполнять при выполнении события ПриПолученииДанныхНаСервере.

Делаем в динамическом списке в произвольном запросе пустое строковое поле (обязательно выражаем его как строку длиной хотя бы 100 знаков)

А потом в коде

&НаСервереБезКонтекста
Процедура СписокСКартинкамиПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	Для каждого СтрокаДС из Строки Цикл
		СтрокаДС.Значение.Данные.АдресКартинки = ПолучитьНавигационнуюСсылку(СтрокаДС.Значение.Данные.Ссылка, "ХранилищеФайла");	
	КонецЦикла;	
КонецПроцедуры


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

Ну и еще момент, когда работает с полем типа "Поле картинки" До версии 8.3.9 включительно можно было ширину установить в свойстве поля. После этого уже не получается. Поле не растягивается.
19. olleksa 18.07.18 14:53 Сейчас в теме
А как создать коллекцию картинок с индексами?
Оставьте свое сообщение