1. Создание справочника
- создайте справочник и дайте ему наименование (в данном примере наименование "Изделие")
- перейдите во вкладку данные и создайте табличную часть (Документация)
- в табличной части добавьте 3 реквизита:
- Файл (Тип - хранилище значений)
- ИмяФайла (Тип - строка, поставьте галочку неограиченая длина)
- Расширение (Тип - строка, длинна - 5)
2. Создание формы справочника
- перейдите на вкладку формы справочника
- нажмите на плюсик и создайте Форму элемента
- нажмите на кнопку ОК и перейдите на вашу форму
3. Создание реквизитов формы
- создайте дополнительные реквизиты (они нам пригодятся в последующем хранении данных)
- создаем 3 реквизита, чтобы различать их в коде, назовём их немного по-другому:
- ИмяФайлаДиалог (Тип - строка (по умолчанию))
- ПутьКФайлу (Тип - строка (по умолчанию))
- РасширениеФайлаДиалог (Тип - строка (по умолчанию))
4. Создание команд формы справочника
- создадим две команды (для этого перейдём на вкладку "команды", в правой части формы): ЗагрузитьФайл и ОткрытьФайл
- нажмём на команду ЗагрузитьФайл и перейдём на вкладку Свойства, там выбираем Кнопку "Действие" и выбираем "Создать на клиенте и на сервере"
- нам откроется модуль нашего справочника, в полученные процедуры вписываем этот код:
&НаСервере
Процедура ЗагрузитьФайлНаСервере()
ДокументОбъект=РеквизитФормыВЗначение("Объект");
ДанныеФайла=Новый ДвоичныеДанные(ПутьКФайлу);
КоличСтрок=ДокументОбъект.Документация.Количество();
ДокументОбъект.Документация.Добавить();
ДокументОбъект.Документация[КоличСтрок].Файл=Новый ХранилищеЗначения(ДанныеФайла, Новый СжатиеДанных(9));
ДокументОбъект.Документация[КоличСтрок].ИмяФайла=ИмяФайлаДиалог;
ДокументОбъект.Документация[КоличСтрок].Расширение=РасширениеФайлаДиалог;
ДокументОбъект.Записать();
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.МножественныйВыбор=Ложь;
Если Диалог.Выбрать() Тогда
ПутьКФайлу=Диалог.ПолноеИмяФайла;
ПозицияПоследнейТочки=СтрНайти(ПутьКФайлу,".",НаправлениеПоиска.СКонца,,1);
ПозицияПоследнегоСлеша=СтрНайти(ПутьКФайлу,"\",НаправлениеПоиска.СКонца,,1);
РасширениеФайлаДиалог=Прав(ПутьКФайлу, СтрДлина(ПутьКФайлу)-ПозицияПоследнейТочки);
ИмяФайлаДиалог=Сред(ПутьКФайлу,ПозицияПоследнегоСлеша+1,ПозицияПоследнейТочки-ПозицияПоследнегоСлеша-1);
КонецЕсли;
Если НЕ ПутьКФайлу="" Тогда
ЗагрузитьФайлНаСервере();
Элементы.ДокументацияОткрытьФайл.Доступность=Истина;
Иначе
Сообщить("Файл не выбран!!!");
КонецЕсли;
КонецПроцедуры
- перейдем на саму форму нажмём на команду ОткрытьФайл перейдём на вкладку Свойства, там выбираем Кнопку "Действие" и выбираем "Создать на клиенте и на сервере"
- нам откроется модуль нашего справочника, в полученные процедуры вписываем этот код:
&НаСервере
Процедура ОткрытьФайлНаСервере(НомерСтроки)
ДокументОбъект=РеквизитФормыВЗначение("Объект");
Путь=ПолучитьИмяВременногоФайла(ДокументОбъект.Документация[НомерСтроки-1].Расширение);
Данные=ДокументОбъект.Документация[НомерСтроки-1].Файл.Получить();
Данные.Записать(Путь);
ЗапуститьПриложение(Путь);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайл(Команда)
НомерТекущейСтроки=Элементы.Документация.ТекущиеДанные.НомерСтроки;
ОткрытьФайлНаСервере(НомерТекущейСтроки);
КонецПроцедуры
- после создания наших кнопок, переходим на вкладку "форма", нажимаем по ней и выбираем действие ПриОткрытии "Создать на клиенте"
- нас снова переносит в модуль формы, заполняем данный код (Он нужен для блокировки Кнопки "ОткрытьФайл", если сам файл ранее не был добавлен, иначе она доступна)
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Объект.Документация.Количество()>0 Тогда
Элементы.ДокументацияОткрытьФайл.Доступность=Истина;
Иначе
Элементы.ДокументацияОткрытьФайл.Доступность=Ложь;
КонецЕсли;
КонецПроцедуры
- в заключении данной формы перенесём наши команды в командную панель нашей табличной части
В заключении, чтобы наш код функционировал и не выдавал ошибок, зайдите на вкладку Конфигурация
- нажмём на неё правой кнопкой мыши и перейдём в Свойства
- дальше пролистайте в самый низ свойств и найдите Совместимость
- Режим использования модальности и Режим использования синхронных вызовов расширений платформы и внешних компонент (по умолчанию стоит "Не использовать", исправляем и ставим "Использовать")
Давайте дополним этот справочник показом картинки.
Перед тем, как начать работать, создадим справочник Файлы (это хранилище, где будут храниться наши картинки)
Для этого нужно создать ФормуЭлемента с этими данными
На форме не показано, но нужно также создать Реквизит (он будет не виден пользователю, мы будем на него ссылаться):
Также создаем Реквизит Фото и переносим в левую часть формы
Создаем команду ДобавитьКартинку, нажимаем на лупу и переходим в модуль справочника
Прописываем данный код
&НаКлиенте
Процедура ДобавитьКартинку(Команда)
ИмяФайла = "";
ПутьФайла = "";
Если ПоместитьФайл(ПутьФайла, , ИмяФайла, Истина) = Истина Тогда
Фото = ПутьФайла;
УстановитьКартинку();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьКартинку()
НовыйФайлКартинки = Справочники.Файлы.СоздатьЭлемент();
НовыйФайлКартинки.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Фото));
Фото = ПоместитьВоВременноеХранилище(НовыйФайлКартинки.Файл.Получить());
НовыйФайлКартинки.Записать();
Объект.Картинка = НовыйФайлКартинки.Ссылка;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");
Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры