В начало

Добавление картинок в справочник «Животинки»

 

            Есть справочник «Животинки», в который было решено загружать фотографии списком. Справочник выполнен на управляемых формах. Также неплохо бы организовать предпросмотр фоток/картинок.

Рис. Начальная структура и форма списка справочника «Животинки»

 

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

Рис. Новая структура справочника «Животинки»

 

            Сами файлы картинок будут храниться в другом справочнике «ФайлыКартинок» в реквизите «Файл» с типом «ХранилищеЗначения».

Рис. Справочник «ФайлыКартинок»

 

            Далее подшаманим форму элемента справочника «Животинки». Разместим на форму табличную часть «Список картинок», установим для нее «ВариантУправленияВысотой = По содержимому», это в разделе «Расположение» свойств элемента формы «СписокКартинок». Также устанавливаем «РежимВыделенияСтроки = Строка». Добавим «Реквизит1» с типом «Строка» для организации предпросмотра картинок. При этом виду элемента «Реквизит1» нужно установить значение «Поле картинки».

Рис. Форма элемента справочника «Животинки»

 

            Далее добавим обработчики «Выбор» и «ПередНачаломДобавления» для элемента формы «СписокКартинок».

 

Листинг. Модуль формы элемента справочника «Животинки»

///////////////////////////////////////////////////////////

//Добавление картинки

&НаКлиенте

Процедура СписокКартинокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

            ПолноеИмяФайла = "";

            ПолноеИмяФайлаФайлаВХранилище = "";

           

            Если ПоместитьФайл(ПолноеИмяФайлаФайлаВХранилище, , ПолноеИмяФайла, Истина) = Истина Тогда

                        СписокКартинокПередНачаломДобавленияНаСервере(ПолноеИмяФайлаФайлаВХранилище, ПолноеИмяФайла);

            КонецЕсли;

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

 

&НаСервере

Процедура СписокКартинокПередНачаломДобавленияНаСервере(ПолноеИмяФайлаФайлаВХранилище, ПолноеИмяФайла)

            //создаем новый элемент в спр. "ФайлыКартинок"

            Элем = Справочники.ФайлыКартинок.СоздатьЭлемент();

            ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПолноеИмяФайлаФайлаВХранилище);

            Элем.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);

            Элем.Наименование = КороткоеИмяФайла(ПолноеИмяФайла);

            Элем.Дата = ТекущаяДата();

            Элем.Записать();

           

            //Добавляем строку в "СписокКартинок"

            Стр = Объект.СписокКартинок.Добавить();

            Стр.Файл = Элем.Ссылка;

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

 

//////////////////////////////////////////////////////

//Предпросмотр

&НаКлиенте

Процедура СписокКартинокПриАктивизацииСтроки(Элемент)

            СсылкаНаТекКартинку = Элементы.СписокКартинок.ТекущиеДанные.Файл;

            ЭтаФорма.Реквизит1 = ПолучитьНавигационнуюСсылку(СсылкаНаТекКартинку, "Файл");

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

 

 

///////////////////////////////////////////////////////////

//Редактирование в редакторе картинок

Функция КороткоеИмяФайла(ПолноеИмяФайла)

            КаталогФ = "";

            Ном=СтрДлина(ПолноеИмяФайла);

            Пока Ном>0 Цикл

                        Символ=Сред(ПолноеИмяФайла,Ном,1);

                        Если Символ<>"\"  Тогда

                                   Ном=Ном-1; 

                        Иначе

                                   Прервать;

                        КонецЕсли;

            КонецЦикла;

            ИмяФайла=Прав(ПолноеИмяФайла,СтрДлина(ПолноеИмяФайла)-Ном);

            Возврат ИмяФайла;   

КонецФункции

 

&НаКлиенте

Процедура СписокКартинокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

            СсылкаНаТекКартинку = Элементы.СписокКартинок.ТекущиеДанные.Файл;

            СписокКартинокВыборНаСервере(СсылкаНаТекКартинку);      

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

 

&НаСервере

Процедура СписокКартинокВыборНаСервере(СсылкаНаТекКартинку)

            ДвоичныеДанные = СсылкаНаТекКартинку.Файл.Получить();

            Если ДвоичныеДанные <> Неопределено Тогда

                        ИмяФайла = КаталогВременныхФайлов()+ "темп" + ".jpeg";

                        ДвоичныеДанные.Записать(ИмяФайла);

                        ЗапуститьПриложение(ИмяФайла);

            КонецЕсли;

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

 

            Запускаем пользовательский режим, тестируем.

Рис. Форма списка и форма элемента справочника «Животинки»

            Также в справочник «ФайлыКартинок» были добавлены элементы.

Рис. Справочник «Файлы картинок», форма списка

 

            На всякий случай привожу параметры вспомогательного справочника «ФайлыКартинок».

 

Рис. Структура и форма элемента справочника «Файлы картинок»

 

            И содержимое модуля формы элемента, также привожу далее.

 

Листинг. Модуль формы элемента справочника «ФайлыКартинок»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            ЭтаФорма.Реквизит1 = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Файл");

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

 

            Таким образом, был создан справочник «Животинки» с возможностью хранения изображений в формате JPEG и режимом предпросмотра изображений.