Сразу скажу — я всегда был и буду против добавления любых файлов в базу данных 1С — максимум шаблоны для генерации отчётов. Понимаю зачем это нужно 1С, когда они во все свои стандартные конфигурации чуть ли не к каждому документу и справочнику дают возможность прикрепить файлы — и это нужно, что бы потом хвастаться, что вот 1С спокойно справляется с базой в 10-20-100 терабайт.
По этой же причине 1С учит будущих программистов засовывать файлы в базу данных, добавляя целых 2 задачи по управляемым формам в экзамен на 1С Специалист по платформе.
Лучший вариант по добавлению файлов, по моему мнению, это добавлять ссылки на файлы в каком то общем хранилище, ну и соответственно при добавлении файлов копировать их в это общее хранилище.
Загрузка картинки в базу
Но, хоть я и против таких манипуляций с файлами, но иногда поступают требования от заказчиков на загрузку картинок в базу, да и никто не отменял две задачи на экзамене 1С Специалист.
Первым делом необходимо создать реквизит в справочнике (в книгах по 1С рекомендуют делать, либо отдельный подчиненный справочник, либо регистр сведений) с типом Хранилище Значений.

Далее в редакторе формы объекта необходимо создать реквизит с типом строка и перенести его на форму. Созданный элемент на форме должен иметь тип — Поле картинки.

Следующим этапом создаётся команда и переносится на форму в виде кнопки.

Так же процедуру ЗагрузитьКартинку (будет описана ниже) можно перенести в процедуру на событие «Нажатие» элемента формы Поле картинки, и тогда главное в свойствах этого элемента выставить, что данное поле является гиперссылкой.

В свойствах команды в поле Действие нажимаем лупу и создаём процедуру на клиенте со следующим содержанием:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
&НаКлиенте Процедура ЗагрузитьКартинку(Команда) //Указываем процедуру, которая запуститься после выбора файла ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект); //Настраиваем Диалоговое окно выбора файла ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов(); ПараметрыДиалога.Фильтр = "Картинки JPG | *.jpg| Картинки PNG | *.png"; ПараметрыДиалога.Заголовок = "Выбрать картинку"; //Открываем диалог выбора файла и помещаем выбранный файл во временное хранилище НачатьПомещениеФайлаНаСервер(ОписаниеОповещения, , , ,ПараметрыДиалога, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт Если ОписаниеПомещенногоФайла <> Неопределено Тогда //Получаем адрес картинки во временном хранилище и присваиваем реквизиту формы с типом картинка ИмяФайлаКартинки = ОписаниеПомещенногоФайла.Адрес; КонецЕсли; КонецПроцедуры |
Картинка должна начать отображаться на форме. Но это ещё не всё. Картинка пока находится во временном хранилище. Теперь её нужно сохранить в базу данных и для этого пишется следующая процедура на событие формы ПередЗаписьюНаСервере
|
1 2 3 4 5 6 7 |
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) //Сохраняем картинку из временного хранилища в реквизит с типом ХранилищеЗначения ТекущийОбъект.ФайлКартинки = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ИмяФайлаКартинки)); КонецПроцедуры |
И это ещё не всё. Теперь необходимо сохранённую картинку показать при открытии элемента справочника и для этого на событие формы ПриЧтенииНаСервере пишим следующую процедуру:
|
1 2 3 4 5 6 7 |
&НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) //Помещаем во временное хранилище файл из Хранилища Значений и присваиваем реквизиту формы с типом картинка ИмяФайлаКартинки = ПоместитьВоВременноеХранилище(ТекущийОбъект.ФайлКартинки.Получить()); КонецПроцедуры |
На этом всё. Теперь картинка показывается на форме сразу после выбора в диалоге выбора файлов, сохраняется в базе и при повторном открытии формы так же отображается.

