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