helpf.pro
Регистрация
 +1 
Распечатать

1С 8.3 : Пример хранения изображений в базе (отдельный справочник), в интерфейсе Такси и без модальности

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

В этой статье я расскажу как к справочнику объекты строительства подключить хранилище фотографий в виде справочника Хранилище файлов.

Основные элементы конфигурации с которыми нам работать:

1. Справочник Объекты строительства - основной справочник в котором хранится инфо и к каждому элементу нужно подгружать фото

2. Справочник Хранилище Фалов, он подчинен справочнику Объекты строительства и в нем есть реквизит ДанныеХЗ - хранилище значений в котором мы будем хранить фото

Форма элемента Объекты строительства, добавим кнопку загрузить фото для списка Файлы (динамический список, в котором запросом отбирается по владельцу приложенные файлы)

Код команды Добавить Файлы (Код для отключенного режима модальности):

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

//вопрос пользователю
&НаКлиенте 
Процедура ОтветНаВопросЗаписать(Результат, ДополнительныеПараметры) Экспорт 
// Вопрос пользователю, если ДА, то записываем объект и снова вызываем добавить файлы
Если Результат = КодВозвратаДиалога.Да Тогда
ЭтотОбъект.Записать();
ДобавитьФайлы();
КонецЕсли;
КонецПроцедуры 

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

// Сохранение файла в справочник
&НаСервереБезКонтекста
Процедура СохранитьФайлВХранилище(Адрес,Владелец,Имя)
НовФайл = Справочники.ХранилищеФайлов.СоздатьЭлемент();
НовФайл.Владелец = Владелец;
НовФайл.Наименование = Имя;
НовФайл.ДанныеТекущаяДата = ТекущаяДата();
НовФайл.ДанныеХЗ = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
НовФайл.Записать();
КонецПроцедуры 

файлы записаны, далее если файлов много, то пользователь может перемещаться по списку файлов и ему должны показываться файлы

Добавим для списка файлы Событие ФайлыПриАктивизацииСтроки

Код 1C v 8.3
 &НаКлиенте
Процедура ФайлыПриАктивизацииСтроки(Элемент)
Попытка
ТекКартинка = ФайлыПриАктивизацииСтрокиНаСервере(Элемент.ТекущиеДанные.Ссылка); 
Исключение
//видимо нет еще фото
КонецПопытки;
КонецПроцедуры


&НаСервереБезКонтекста
Функция ФайлыПриАктивизацииСтрокиНаСервере(ЭлементС)
Возврат ПолучитьНавигационнуюСсылку(ЭлементС, "ДанныеХЗ");
КонецФункции

+ чуть не забыл, т.к. файлы это динамический список с установленным запросом и параметром - необходимо при открытии задать параметр:

Установим параметр при открытии:

Код 1C v 8.3
 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Файлы.Параметры.УстановитьЗначениеПараметра("Владелец",Объект.Ссылка);
КонецПроцедуры

Результат:


Скачать DT с примером : Foto_V_BD.7z 


Если у Вас есть вопросы или комментарии - пишите ниже, обсудим )
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 8689
 +1 
Распечатать
Возможно, вас также заинтересует
1C: Enterprise Development Tools 35
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
Google maps : вывод точек на карту и режим панорамы 2
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С...
Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов 6
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом...
База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное...
Выгрузка картинок из базы 1С в XML 2
В нынешнее время для электронного каталога или интернет-магазина необходимо выгружать не только информацию о цене и характеристиках товара, но и сопутствующие изображения. Хранящиеся в базе или связанные с...
Посмотреть все результаты поиска похожих
Комментарии
wswolf1987
26.08.2015 11:30Комментарий: 2
wswolf1987

Выдает следующую ошибку:

{Справочник.ФизЛица.Форма.ФормаЭлемента.Форма(176)}: Ошибка при вызове конструктора (ОписаниеОповещения)

Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", Объект);

по причине:

Не найден экспортируемый метод: ОбработатьВыборФайла

Ни как не пойму почему он не видит эту процедуру???

makcim
21.08.2015 08:52Комментарий: 1
makcim

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

Код 1C v 8.3
 &НаКлиентеПроцедура ФайлыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ЗапуститьПриложение(Элемент.ТекущиеДанные.Ссылка);КонецПроцедуры   

После выбора - выдает следующее :

Код 1C v 8.3
 ЗапуститьПриложение(Элемент.ТекущиеДанные.Ссылка);по причине:Несоответствие типов (параметр номер '1')Несоответствие типов (параметр номер '1')   

Помогите открыть файл , пжста

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.