Работа с файлами в расширении

Печать (Ctrl+P)

Подсистема работа с файлами БСП.

Расширение стандартной подсистемы работы с файлами, версия 1.0

Для использования стандартной подсистемы “Работа с файлами” в расширении прикладных решений, созданных на базе БСП 3.1 я написал расширение :

Для работы расширения нужна платформа 1С 8.3.15 и подключать ее в обычном безопасном режиме. При применении расширения в безопасном режиме будут расширяться только клиентские методы и серверные обработчики форм, которые установлены через панель свойств. К остальным серверным методам (в т. ч. и к аннотированным серверным методам модулей) расширение применяться не будет.

Расширение является шаблонным решением для его внедрения в прикладных решениях 1С. Расширение предназначено для присоединения файлов к справочникам и документам , созданных в расширении. Эти присоединенные файлы можно сохранить в двоичных данных в информационной базе или в папке общего доступа на сервере в зависимости о настройки подсистемы в разделе администрирование – настройки работы с файлами :

Продаваемый демонстрационный шаблон расширения содержит подсистему “Работа с файлами в расширении” с двумя владельцами файлов : Простой справочник и простой документ без реквизитов

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

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

Сложность расширения подсистемы “Работа с файлами” заключается в том, что платформа 1С не поддерживает свойство типа Определяемые типы в расширении. Для новых владельцев файлов в расширении невозможно воспользоваться подсистемами “Работа с файлами” и “Присоединенные файлы в расширяемой конфигурации , потому, что они используют измерение типа “Определяемые типы” в регистре сведений “ДвоичныеДанныеФайла” для хранения двоичных данных файла в информационной базе:

В связи с этим, для хранения файла в информационной базе в двоичных данных я создал копию регистра сведений ДвоичныеДанныеФайла и переименовал с префиксом расширения и вместо объектов типа “Определяемые типы”, которые невозможно добавлять в конфигурации, я создал следующие функции в общем модуле:


Функция МассивТиповВладельцевПрисоединенныхФайлов() Экспорт
Типы = Новый Массив();
Типы.Добавить(Тип("ДокументСсылка.Согл_ЗаявкаНаОплату"));	
Типы.Добавить(Тип("СправочникСсылка.Согл_ЦФО"));	

Возврат Типы; 
КонецФункции // ()

Функция МассивТиповПрисоединенныхФайлов() Экспорт
Типы = Новый Массив();
Типы.Добавить(Тип("СправочникСсылка.Согл_ЗаявкаНаОплатуПрисоединенныеФайлы"));
Типы.Добавить(Тип("СправочникСсылка.Согл_ЦФОПрисоединенныеФайлы"));
Возврат Типы; 
КонецФункции // ()

// В качестве параметр передается ссылка на справочник
// возвращаемое значение;
//Истина - если он справочник присоединенный создан в расширении иначе ложь  
Функция ЭтоПрисоединенныйФайлВРасширении(ПрисоединенныйФайл) Экспорт 
	
	Рез = Ложь;
	Для каждого ЭлТип Из МассивТиповПрисоединенныхФайлов() Цикл
		Если ТипЗнч(ПрисоединенныйФайл)= ЭлТип Тогда
			Рез = Истина;
		КонецЕсли;
	КонецЦикла; 
	Возврат Рез;
	
КонецФункции // ()

В теле функции МассивТиповПрисоединенныхФайлов нужно включать все справочники типа ПрисоединенныеФайлы, созданные в расширении, а в теле функции МассивТиповВладельцевПрисоединенныхФайлов нужно включать владельцы этих файлов.
На функцию ЭтоПрисоединенныйФайлВРасширении передается ссылка на справочник типа ПрисоединенныеФайлы и она возвращает значение Истина если передаваемая ссылка создан в расширении.

Я переписал программные коды общих модулей подсистемы в расширении таким образом, чтобы операции записи и чтения двоичных данных файла выполнялись по новому регистру, когда владелец являлся объектом, добавленным в расширении. Во всех случаях  я использовал метод замены  (аннотация Вместо), например:   


&Вместо("ЗаписатьФайлВИнформационнуюБазу")
Процедура Согл_ЗаписатьФайлВИнформационнуюБазу(ВерсияСсылка, ХранилищеФайла)
	Если Согл_РаботаСфайлами.ЭтоПрисоединенныйФайлВРасширении(ВерсияСсылка) Тогда
		Согл1_ЗаписатьФайлВИнформационнуюБазу(ВерсияСсылка, ХранилищеФайла);
	иначе
		ПродолжитьВызов(ВерсияСсылка, ХранилищеФайла);
	КонецЕсли; 	
КонецПроцедуры


// Записывает ХранилищеФайла в информационную базу.
//
// Параметры:
//   ВерсияСсылка - ссылка на версию файла.
//   ХранилищеФайла - ХранилищеЗначения, с двоичными данными файла, которые требуется записать.
//
Процедура Согл1_ЗаписатьФайлВИнформационнуюБазу(ВерсияСсылка, ХранилищеФайла)
	
	УстановитьПривилегированныйРежим(Истина);
	
	МенеджерЗаписи = РегистрыСведений.Согл_ДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Файл = ВерсияСсылка;
	МенеджерЗаписи.ДвоичныеДанныеФайла = ХранилищеФайла;
	МенеджерЗаписи.Записать(Истина);
	
КонецПроцедуры

Шаблон расширения стоит 8 000 р. Для его приобретения обращайтеcь ко мне на почту master1c8x@mail.ru

Новая версия 1.1 расширения подсистемы работы с файлами

В первой версии процедура “Перенос файлов” в разделе администрирование/настройки работы с файлами не находила присоединённые файлы, созданные в расширении. В результате файлы не переносили по команде.

В новой версии можно перенести присоединенные файлы, созданные в расширении. Для этого нужно было доработать модуль формы обработки Перенос файла

Следует отметить, что расширение не тестировалось в облачной технологии ( работа в модели сервиса). Но оно внедрено в одном из моих проектов “Расширение Соглашение платежей для бухгалтерии 3.0 “,в котором менеджер должен присоединить счет на оплату или заказ от поставщика в документе Заявка на оплату перед согласованием или отклонения заявки .

0

Автор публикации

не в сети 16 часов

master1c8

1
Комментарии: 28Публикации: 458Регистрация: 25-12-2016

5 Replies to “Работа с файлами в расширении”

  1. Николай

    Подскажите, а можете для особо одаренных начинающих программистов выложить расширение из примера?

    0
    • master1c8

      Не могу Николай. Это уникальная работа стоит деньги. Этот функционал входит в одном из моих проектов “Согласование платежей” в расширении. В этой статьи я показываю, что возможно присоединить файлы в расширении с использованием подсистемы “Работа с файлами” из библиотеки БСП, несмотря на то, что объекты “Определяемые типы” не поддерживаются в расширении.

      0
    • master1c8

      За деньги я мог бы послать демо расширение для любой конфигурации на базе БСП 3.1. Задание заключается в том, что нужно в расширяемой конфигурации на базе БСП 3.1 создать в расширении новый вид документ и присоединить к нему файлы с использование функционала “Работа с файлами”. Данная задача имеет практическое значение , но требует подключения расширения в небезопасном режиме. Расценка моих услуг 1000 р в час. Я потратил больше 8 часов, но могу уступить за 6 часов работы ( 6000 р =1000* 6 часов). Расширение использует все возможности функционала работы с файлами – можно хранить присоединенные файлы на томе или в двоичных данных в базе в зависимости от настройки функционала “Работа с файлами”

      0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.