Главная страница

Загрузка картинки на форму. Загрузка картинки на форму справочника 1С предприятия. Справочник 1С предприятие у справочника Номенклатура создадим реквизит


Скачать 0.68 Mb.
НазваниеСправочник 1С предприятие у справочника Номенклатура создадим реквизит
АнкорЗагрузка картинки на форму
Дата04.03.2023
Размер0.68 Mb.
Формат файлаdocx
Имя файлаЗагрузка картинки на форму справочника 1С предприятия.docx
ТипСправочник
#967650

Загрузка картинки на форму в справочник 1С: предприятие

У справочника Номенклатура создадим реквизит  Картинка с типом ХранилищеЗначений.



Поместим этот реквизит на форму в виде поля, а вид у данного поля установим «Поле картинки».



Сделаем так, чтобы мы могли загружать картинку по клику мышки на это поле, для этого установим в свойство поле Гиперссылка.



Создадим клиентский обработчик для события Нажатие этого поля.



В этом обработчике напишем код, который будет вызывать диалог открытия файла с расширением jpg.

&НаКлиенте

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

СтандартнаяОбработка = Ложь;

Режим = РежимДиалогаВыбораФайла.Открытие;

ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);

ДиалогОткрытия.ПолноеИмяФайла = "";

Фильтр = "Файл Jpg (*.jpg)|*.jpg";

ДиалогОткрытия.Фильтр = Фильтр;

ДиалогОткрытия.МножественныйВыбор = Ложь;

ДиалогОткрытия.Заголовок = "Выберете файл для загрузки";

ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗагрузкиФайла",ЭтаФорма);

ДиалогОткрытия.Показать(ОписаниеОповещения);

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

Опишем процедуру ПослеЗагрузкиФайла, которую указали в описании оповещения, в этой процедуре, если пользователь выбрал файл, мы будем помещать его во временное хранилище при помощи метода НачатьПомещениеФайла.

&НаКлиенте

Процедура ПослеЗагрузкиФайла(ВыбранныйФайл,ДопПараметр) Экспорт

Если ВыбранныйФайл = Неопределено Тогда

Возврат;

КонецЕсли;

ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтаФорма);

НачатьПомещениеФайла(ОписаниеОповещения,, ВыбранныйФайл[0], Ложь, УникальныйИдентификатор);

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

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

&НаКлиенте

Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла,ДопПараметры) Экспорт

Если Не Результат Тогда

Возврат;

КонецЕсли;

СсылкаНаКартинку = Адрес;

Модифицированность = Истина;

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

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

Для того, чтобы картинка хранилась в базе, нам необходимо сохранить картинку в реквизит объекта, делать мы это будем в событии формы ПередЗаписьюНаСервере. Создадим это событие.



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

&НаСервере

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

Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда

ФайлКартинки = ПолучитьИзВременногоХранилища(СсылкаНаКартинку);

ТекущийОбъект.Картинка = Новый ХранилищеЗначения(ФайлКартинки);

УдалитьИзВременногоХранилища(СсылкаНаКартинку);

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

КонецЕсли;

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

И последний штрих: нам нужно сделать так, чтобы при открытии формы, картинка появлялась на форме, если она есть в базе (в хранилище).

Для этого, создадим обработчик для события ПриСозданииНаСервере формы.



И в этом обработчике будем получать навигационную ссылку на картинку.

&НаСервере

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

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

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


написать администратору сайта