gifts2017

[8.2] Справочник с картинкой (управляемые формы)

Опубликовал Евгений Люлюк (Evg-Lylyk) в раздел Программирование - Практика программирования

Простой пример справочника с картинкой
Отображения картинки текущего элемента списка

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

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

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

Ниже приведен код части примера: 

&НаКлиенте
Процедура ЗагрузитьФотографию(Команда)
    Перем
ВыбранноеИмя,АдресВременногоХранилища;
    Если
ПоместитьФайл(АдресВременногоХранилища, "", ВыбранноеИмя, Истина, УникальныйИдентификатор) Тогда
       
АдресКартинки = АдресВременногоХранилища;
       
Модифицированность = Истина;
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    Если
ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
       
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
       
ТекущийОбъект.Фото = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных());
    КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

   
АдресКартинки = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "Фото");

КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

    Если
ЭтоАдресВременногоХранилища(АдресКартинки) Тогда
       
УдалитьИзВременногоХранилища(АдресКартинки);
    КонецЕсли;

   
АдресКартинки = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "Фото");

КонецПроцедуры

p.s.

 

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

    В процедуре ПриЗаписиНаСервере на первый взгляд можно убрать код удаление из временного хранилища т.к. ф. ПоместитьФайл вызывается с параметром УникальныйИдентификатор формы т.е. объект хранилища будет существовать до закрытия формы, но рекумендуется освобождать ресурсы сразу (если пользователь загрузит картинку и нажмет записать, форма не закрыта и объект будет существовать до закрытия).

Скачать файлы

Наименование Файл Версия Размер
База пример (8.2) 513
.dt 322,85Kb
19.06.15
513
.dt 322,85Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Рытов (Арчибальд) 05.08.10 16:19
А что изображено на фотографии? :o
2. Евгений Люлюк (Evg-Lylyk) 05.08.10 17:05
3. Сергей Ожерельев (Поручик) 05.08.10 18:15
Спасибо, как раз сейчас разбираюсь с работой с изображениями
5. Евгений Люлюк (Evg-Lylyk) 06.08.10 00:12
(4) Сообщает когда? Конфигурация исключительно под 8.2 у меня версия платформы 8.2.12.63 и 8.2.10 работает
7. Дмитрий Бухалов (Re:аниматор) 06.08.10 05:34
После загрузке файла dt
Неверный формат файла для загрузки информационной базы
Ошибка при выполнении файловой операции
по причине:
Ошибка при выполнении файловой операции

1С:Предприятие 8.2 (8.2.11.236)

смысл ставить 8.2.12.63 если еще бета ...

а что мешает выложит в формате *.1CD?
8. Евгений (ea7) 06.08.10 07:19
Установил демо конфу с ИТС "Управляемое приложение", там в принципе тоже справочник с картинками реализован.
9. Евгений Люлюк (Evg-Lylyk) 06.08.10 16:34
(6), (7), (8)
Видимо как-то касячно файл загрузился. Сейчас все гуд.
(7)
смысл ставить 8.2.12.63 если еще бета ...

в учебных целях нет разницы
(8)
Установил демо конфу с ИТС "Управляемое приложение", там в принципе тоже справочник с картинками реализован.

Здесь упрощенно ничего лишнего
10. Евгений (ea7) 05.10.10 20:23
а к табличной части документа никто не пробовал картинку прикрутить? у меня пока неполучается...
11. Евгений Люлюк (Evg-Lylyk) 05.10.10 21:12
(10) Я не пробовал. По идее также только у функции ПолучитьНавигационнуюСсылку
через точку
Адрес3 = ПолучитьНавигационнуюСсылку(Объект.Ссылка,
"ТабличнаяЧасть1.Реквизит1", 10);
взято из справки
12. Евгений Люлюк (Evg-Lylyk) 05.10.10 21:15
(10) Не делал, но аналогично особенность только в функции ПолучитьНавигационнуюСсылку посмотрите справку там написано про табличные части
13. Евгений Люлюк (Evg-Lylyk) 13.11.10 11:56
Иправлена проблема: в форме списка не обновлялась картинка при изменении картинки текущей строки. Отображалась стараю пока не активизировать другую строку.
14. rudra (porog@front.ru) 04.09.11 22:58
(13)А как исправил? Сейчас та же проблема.
В базе примера при записи элемента заходит в процедуру формы списка СписокПриАктивизацииСтроки(), а у меня - нет.
В ОбработкаОповещения() заходит, в ОбновитьИнтерфейс() заходит, а в СписокПриАктивизацииСтроки() нет.
:(
15. sat.m.n@mail.ru Сукачов (bolush) 06.04.12 10:55
То что искал, вот только бабло не хватает что бы скачать:)) может кто нить скинить если есть такая операция:)) но хочу сказать отдельное спасибо автору! респект!
16. Андрей Краснокутский (Andry.Boris) 12.04.12 17:13
День добрый.
Кто объяснить ситуацию...
Запускаю как управляемое приложение - все ок фото меняются
Запускаю как веб приложение - фото меняю, а показывает старые фотки, захожу как управляемое показывает
что фото изменилось, возвращаюсь в веб старые фото??? В чем прикол???
17. Андрей Краснокутский (Andry.Boris) 12.04.12 17:17
Ага оказывается кеш в браузере срабатывает...
18. Андрей Краснокутский (Andry.Boris) 12.04.12 17:18
Как бороться с кешем в веб режиме???
19. Андрей Краснокутский (Andry.Boris) 12.04.12 17:49
Ещё в веб режиме закрывает окно справочника и получается что опять на стартовой странице...
20. Дмитрий Малина (malina-da) 04.06.12 07:59
Спасибо за пример, как раз сейчас разбираюсь с аналогичной задачей, этот пример надеюсь ускорит процесс.
21. Серега (serezhick) 20.09.12 16:32
22. Денис Юрченко (biker1052) 26.06.13 19:23
Спасибо за статью.Действительно иногда приходится работать с картинками.
23. Мистер Программер (Aspire1C) 27.08.13 18:01
Респект! Быстро и безболезненно взлетело в самописке на 8.2.18.109.
24. Нагим Османов (nagimo) 23.09.14 20:29
Большое спасибо за статью. Час пытался сам сделать, а тут просто переписал код и все заработало. Осталось теперь доработать функционал удаления картинки

П.С. Доработал (кому нужно удаление картинки, ее очистка):
&НаКлиенте
Процедура УдалитьКартинку(Команда)
	АдресКартинки = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
КонецПроцедуры
25. Илья Морозов (dialang) 21.07.16 07:40
нз = РегистрыСведений.frame_db.СоздатьНаборЗаписей();
...
Картинка8 = нз[Индекс-7].Картинка.Получить();
Изображение8 = ПоместитьВоВременноеХранилище(Картинка8, Изображение8);
// Изображение8 - ссылка на картинку ...