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