В прошлый раз мы добавили себе в конфигурацию возможность резервного копирования данных. В сегодняшнем примере попробуем разобраться, как с помощью БСП можно легко организовать присоединение файлов к объектам конфигурации. Согласитесь, такая задача очень часто возникает на практике. Часто заказчику нужно сохранять изображение товара в базе данных. Еще одной распространенной задачей будет сохранение отсканированных договоров или документов относящихся к тому или иному контрагенту. Задач может быть довольно много. А как их решить мы сейчас посмотрим.
Для начала создадим справочник, к которому мы будем прикреплять изображение или несколько. Пусть это будет справочник «Юра_Контрагенты» с демонстрационной базы БСП копируем справочник _ДемоНоменклатураПрисоединенныеФайлы и переименовываем его в Юра_КонтрагентыПрисоединенныеФайлы, после чего создадим в Справочнике Юра_Контрагенты – реквизит «ОтсканированыйДоговор» которому присвоим типом «Юра_КонтрагентыПрисоединенныеФайлы»
Теперь нужно отредактировать общую команду ПрисоединенныеФайлыКОбъекту укажем в типе параметров объекта и наш справочник Юра_Контрагенты.
После этих действий у нас элемент справочника должен выглядеть приблизительно так
(обратите внимание на пункт «Перейти», более подробно про общие команды можно почитать в моей статье про управляемый интерфейс http://1clancer.ru/article/upravlyaemyj_interfejs._komandy_v_1s_1009).
Но если мы постараемся прикрепить какой либо файл то у нас выскочит ошибка, для того чтобы она не возникала нужно в регистре сведений «ПрисоединенныеФайлы» в типе измерения «ПрисоединенныйФайл» указать и наш новый справочник Юра_КонтрагентыПрисоединенныеФайлы.
Кстати, чуть не забыл, тип реквизита «ВладелецФайла» справочника «Юра_КонтрагентыПрисоединенныеФайлы» должен быть «Справочник.Юра_Контрагенты» так как на скриншоте.
После всех этих манипуляций мы сможем прикреплять к нашему справочнику любые файлы в любых количествах.
Но давайте воспользуемся еще и кодом, с помощью которого можно выбрать и отобразить на экране один из прикрепленных файлов. Для этого мы воспользуемся реквизитом «ОтсканированыйДоговор». Создадим форму элемента справочника, к ней добавим реквизит «АдресКартинки» и перетащим его на форму, указав в качестве вида «поле картинки»
Для отображения картинки нам потребуется одна функция ПолучитьНавигационнуюСсылкуКартинки, а также код процедур ПриСозданииНаСервере и ПриЧтенииНаСервере.
Полный листинг выглядит так:
&НаСервереБезКонтекста Функция ПолучитьНавигационнуюСсылкуКартинки(ФайлКартинки, ИдентификаторФормы) Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла; КонецФункции &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда Если Не Объект.ОтсканированыйДоговор.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(Объект.ОтсканированыйДоговор, УникальныйИдентификатор) Иначе АдресКартинки = ""; Конецесли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если Не ТекущийОбъект.ОтсканированыйДоговор.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(ТекущийОбъект.ОтсканированыйДоговор, УникальныйИдентификатор) Иначе АдресКартинки = ""; Конецесли; КонецПроцедуры &НаКлиенте Процедура ОтсканированыйДоговорПриИзменении(Элемент) Если Не Объект.ОтсканированыйДоговор.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(Объект.ОтсканированыйДоговор, УникальныйИдентификатор) Иначе АдресКартинки = ""; Конецесли; КонецПроцедуры &НаКлиенте Процедура ОтсканированыйДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПрисоединенныеФайлыКлиент.ОткрытьФормуВыбораФайлов(Объект.Ссылка, Элементы.ОтсканированыйДоговор); КонецПроцедуры
В результате мы сможете показывать на форме одну из присойдененныйх к справочнику картинок. К сожалению промотр файлов других форматов покачто не предусмотрен. Но если вы визовете «Присойдененныйе файлы» и попробуете двойным щелчком открить их то запустится програма отвечающая за данный файл. Например, для вордовских документов запуститься ворд.