Работа- досуг

Картинка на форму справочника

2021-06-18

Данная информация справедлива для большинства типовых конфигураций. В данном случае используется конфигурация "1С Розница 2.3".

Все изменения будут проводиться в расширении, потому как изменять типовую конфигурацию уже не актуально, ведь при обновлении все изменения будут утрачены. Поэтому для начала нужно создать расширение конфигурации, как это сделать описывать не буду. Затем нужно открыть конфигурацию и добавить форму в расширение. Дальше будем работать только с расширением.

Добавить справочник в расширение

В расширении появился справочник "Физические лица" и его "Форма элемента". В справочник необходимо добавить реквизит "Изображение" с типом СправочникСсылка.Файлы. Как уже понятно храниться все изображения будут в справочнике "Файлы".

Подберите удобное расположение картинки на форме, я например хочу чтобы картинка располагалась в правом нижнем углу, для этого я создал группу с горизонтальной группировкой и две подгруппы, в одну положил реквизиты "пол", "дата рождения" и "инн", а другую оставил пустой. В пустую группу будут добавляться элементы формы программно! и это очень важно, т.к. при добавлении элементов на форму в конструкторе, невозможно настроить их свойства, это происходит из-за ограничений при работе с расширениями конфигураций.

Добавление групп на форму

Добавляем процедуру на событие "ПриСозданииНаСервере", в ней нужно добавить элементы формы "Изображение"(для нового реквизита) и "Фотография"(для отображения картинки), а также нужно добавить реквизит, который будет содержать ссылку непосредственно на картинку(текстовый тип). Для отображения изображения на форме недостаточно просто добавить и указать тип поля формы "Картинка". А в конце процедуры вызовем еще одну, которая будет обновлять нашу картинку.

&НаСервере
Процедура Чер_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
     //Здесь добавляем реквизит, в который запишем ссылку на картинку
    ДобавляемыеРеквизиты = Новый Массив;
    Реквизит_Фотография = Новый РеквизитФормы("Фотография", Новый ОписаниеТипов("Строка"),,"Фотография");
    ДобавляемыеРеквизиты.Добавить(Реквизит_Фотография);
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    //Здесь добавляем поле для реквизита со ссылкой на справочник Файлы(Изображение)
    ПутьКартинки = Элементы.Добавить("ПутьККартинке", Тип("ПолеФормы"), Элементы.Изображение);
    ПутьКартинки.ПутьКДанным          = "Объект.Изображение";
    ПутьКартинки.ПоложениеЗаголовка   = ПоложениеЗаголовкаЭлементаФормы.Авто;
    ПутьКартинки.Заголовок            = "Изображение";
    ПутьКартинки.Вид                  = ВидПоляФормы.ПолеВвода;
    //Добавим команду чтобы картинка обновлялась на форме
    ПутьКартинки.УстановитьДействие("ПриИзменении", "ОбновитьИзображение");
	
    //В этом поле будет отображаться картинка  
    ПолеКартинка = Элементы.Добавить("Фотография", Тип("ПолеФормы"), Элементы.Изображение);
    ПолеКартинка.ПутьКДанным            = "Фотография";
    ПолеКартинка.ПоложениеЗаголовка     = ПоложениеЗаголовкаЭлементаФормы.Нет;
    ПолеКартинка.Вид                    = ВидПоляФормы.ПолеКартинки;
    ПолеКартинка.РазмерКартинки		= РазмерКартинки.Пропорционально;
    
    ОбновитьИзображениеНаСервере();

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

&НаКлиенте
Процедура ОбновитьИзображение(Элемент)
    ОбновитьИзображениеНаСервере();
КонецПроцедуры

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

Для получения ссылки на картинку из справочника файлы используется подсистема БСП "Работа с файлами".

Картинка на форме справочника

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

Кратко еще раз зачем столько реквизитов и полей:
Добавленный реквизит "Изображение" хранит ссылку на справочник "Файлы".
Поле формы "Путь к картинке" отображает реквизит "Изображение".
Программный реквизит "Фотография" хранит ссылку на саму картинку.
Поле формы "Фотография" отображает данные реквизита "Фотография" в двоичном виде.