Документация 1С: Настройка прикрепления файлов
Прикрепляем файл к новому документу (БСП). Простенькая шпаргалка
Настройка присоединения файлов к объектам
В зависимости от того, используются ли в конфигурации ограничения доступа на уровне записей (RLS; см. раздел Управление доступом) необходимо принять решение по варианту хранения присоединенных файлов:
- отдельный справочник присоединенных файлов для каждого «объекта с файлами» (типа владельца) (например, КонтрагентыПрисоединенныеФайлы) - в большинстве случаев, вариант рекомендуется, если в конфигурации предусмотрены разные права доступа к владельцам;
- один справочник присоединенных файлов сразу для нескольких «объектов с файлами» (типов владельцев) - вариант подходит, если владельцев немного (не более 10), а права доступа к владельцам полностью совпадают (RLS к которым полностью одинаков) и с высокой вероятностью не будут пересматриваться в дальнейшем.
Также допустимо не создавать справочники присоединенных файлов, а выбрать вариант хранения в имеющемся справочнике Файлы в тех случаях, когда в конфигурации отсутствует логика RLS или когда она есть, но в «объектах с файлами» (типах владельцев) предусмотрена запись наборов значений доступа:
- В первом случае доступ к справочнику Файлы, как и для владельцев, предоставляется без ограничений (но при совместном внедрении с подсистемой Управление доступом остается базовое ограничение по типам владельцев).
- Во втором – доступ к справочнику Файлы будет обеспечен «как у владельца» с помощью стандартного шаблона #ПоЗначениямИНаборамРасширенный (подробнее см. раздел Управление доступом).
Настройка присоединения файлов к объектам в случае отдельного справочника для хранения файлов
Для каждого «объекта с файлами» (типа владельца), использующего отдельный справочник для хранения файлов, выполнить настройку:
- Создать (копированием подобного типового) справочник для хранения присоединенных файлов и задать ему имя по шаблону:
<Префикс>ПрисоединенныеФайлы
, где<Префикс>
– имя объекта метаданных, для которого настраиваются присоединенные файлы (например, для справочника Номенклатура справочник с файлами должен называться НоменклатураПрисоединенныеФайлы). Задать синоним, например: Присоединенные файлы (Номенклатура). - Принять решение о возможности создавать группы в списках присоединенных файлов. Для обеспечения возможности создания папок необходимо:
- включить у справочника свойство
Иерархический
, установить Вид иерархии: Иерархия групп и элементов; - изменить свойства Использование: Для группы и элемента реквизитов:
- Автор;
- ВладелецФайла;
- ДатаМодификацииУниверсальная;
- ДатаСоздания;
- Изменил;
- ИндексКартинки;
- Описание.
- включить у справочника свойство
- У реквизита
ВладелецФайла
справочника<Префикс>ПрисоединенныеФайлы
установить тип владельца «объект с файлами» (например,СправочникСсылка.Номенклатура
). - Включить в состав определяемых типов:
ВладелецПрисоединенныхФайлов
– добавляем тип владельца;ПрисоединенныйФайл
– добавляем тип<Префикс>ПрисоединенныеФайлы
(ссылка);ПрисоединенныйФайлОбъект
- добавляем тип<Префикс>ПрисоединенныеФайлы
(объект);
-
У списка (в форме списка документа, если нет, создаем) включаем флаг Произвольный запрос и меняем запрос:
123456789101112131415161718192021ВЫБРАТЬСправочникВладелец.Ссылка КАК Ссылка,СправочникВладелец.ПометкаУдаления КАК ПометкаУдаления,СправочникВладелец.Код КАК Код,СправочникВладелец.Наименование КАК Наименование,СправочникВладелец.Номер КАК Номер,СправочникВладелец.Дата КАК Дата,СправочникВладелец.Проведен КАК Проведен,СправочникВладелец.Комментарий КАК Комментарий,СправочникВладелец.Автор КАК Автор,ВЫБОРКОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULLТОГДА 1КОГДА НаличиеФайлов.ЕстьФайлыТОГДА 0ИНАЧЕ 1КОНЕЦ КАК ЕстьФайлыИЗСправочник.СправочникВладелец КАК СправочникВладелец{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайловПО СправочникВладелец.Ссылка = НаличиеФайлов.ОбъектСФайлами} - В форме списка настроить колонку «Есть файлы»:
- вид – поле картинки;
- положение заголовка – нет;
- картинка значения– скрепка (Прикрепить);
- картинка шапки – скрепка (Прикрепить).
- В форму документа и форму списка в
ПриСозданииНаСервере
добавить блок:123// СтандартныеПодсистемы.ПодключаемыеКомандыПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);// Конец СтандартныеПодсистемы.ПодключаемыеКоманды - В форму владельца добавляем код:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263&НаСервереПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)// СтандартныеПодсистемы.ПодключаемыеКомандыПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);// Конец СтандартныеПодсистемы.ПодключаемыеКоманды// СтандартныеПодсистемы.РаботаСФайламиПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();ПараметрыГиперссылки.Размещение = "КоманднаяПанель";РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);// Конец СтандартныеПодсистемы.РаботаСФайламиКонецПроцедуры&НаКлиентеПроцедура ПриОткрытии(Отказ)// СтандартныеПодсистемы.РаботаСФайламиРаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);// Конец СтандартныеПодсистемы.РаботаСФайламиКонецПроцедуры#Область СтандартныеПодсистемы_РаботаСФайлами&НаКлиентеПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)// СтандартныеПодсистемы.РаботаСФайламиРаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);// Конец СтандартныеПодсистемы.РаботаСФайламиКонецПроцедуры// СтандартныеПодсистемы.РаботаСФайлами&НаКлиентеПроцедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);КонецПроцедуры// Конец СтандартныеПодсистемы.РаботаСФайлами// СтандартныеПодсистемы.РаботаСФайлами&НаКлиентеПроцедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);КонецПроцедуры// СтандартныеПодсистемы.РаботаСФайлами&НаКлиентеПроцедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);КонецПроцедуры// Конец СтандартныеПодсистемы.РаботаСФайлами// СтандартныеПодсистемы.РаботаСФайлами&НаКлиентеПроцедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);КонецПроцедуры// Конец СтандартныеПодсистемы.РаботаСФайлами#КонецОбласти
Вышеописанного должно быть достаточно.
- Опционально. Включить в состав плана обмена ОбновлениеИнформационнойБазы справочник, созданный на шаге 1 (например, СправочникСсылка.НоменклатураПрисоединенныеФайлы).
- Опционально. Расширить состав типов свойства Источник у подписки ПереопределитьПолучаемуюФормуПрисоединенногоФайла, включив в него тип – СправочникМенеджер справочника с файлами, созданного на шаге 1 (например,
СправочникМенеджер.НоменклатураПрисоединенныеФайлы
). - Опционально. Добавить реквизит Служебный типа Булево, если в справочнике хранятся присоединенные файлы, которые содержат служебную информацию и должны быть скрыты от пользователей.
Настройка присоединения файлов к объектам в случае справочника Файлы для хранения файлов
Для каждого «объекта с файлами» (типа владельца), использующего справочник Файлы для хранения файлов, выполнить настройку:
- включить в состав определяемого типа ВладелецФайлов (ссылки) владельцев (например,
ДокументСсылка.ЗаказПокупателя
).
В обоих случаях
Настроить подписки на события, расширив состав типов свойства Источник
у подписок ПереопределитьПолучаемуюФормуПрисоединенногоФайла
, УстановитьПометкуУдаленияПрисоединенныхФайловДокументов,
включив в него новый справочник СправочникМенеджер.Номенклатура.ПрисоединенныеФайлы
:
Подписка | Событие | Обработчик |
ПереопределитьПолучаемуюФормуПрисоединенногоФайла | ОбработкаПолученияФормы | РаботаСФайлами.ОпределитьФормуПрисоединенногоФайла |
УстановитьПометкуУдаленияПрисоединенныхФайловДокументов | ПередЗаписью |
РаботаСФайлами.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов |
Для каждого «объекта с файлами» (типа владельца), использующего любой справочник для хранения файлов, выполнить настройку:
- Расширить состав определяемых типов
ВладелецПрисоединенныхФайлов (ссылки)
иВладелецПрисоединенныхФайловОбъект
(объекты, кроме документов), добавив в него тип «объект с файлами» (напримерСправочникСсылка.Номенклатура
). - Расширить состав типов свойства
Источник
подпискиУстановитьПометкуУдаленияПрисоединенныхФайловДокументов
, включив в него тип – «объект с файлами» (только документы-владельцы, например,СправочникОбъект.Номенклатура
). - Если при интерактивном копировании объекта, содержащего присоединенные файлы, требуется автоматическое копирование файлов в новый объект, то в форме объекта необходимо:
- в параметры формы добавить ключевой параметр
ЗначениеКопирования
такого же типа, как и сам объект; - в модуле формы в процедуру
ПриЗаписиНаСервере
вставить следующий код:РаботаСФайлами.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры);
- в параметры формы добавить ключевой параметр
- Если перед закрытием формы объекта-владельца файлов требуется проверить наличие занятых текущим пользователем файлов, то необходимо:
- добавить реквизит формы
МожноЗакрытьФормуСФайлами
типа Булево; - в обработчике формы
ПередЗакрытием
вставить вызов процедурыПоказатьПодтверждениеЗакрытияФормыСФайлами
общего модуляРаботаСФайламиКлиент
по шаблону:1234&НаКлиентеПроцедура ПередЗакрытием(Отказ, СтандартнаяОбработка)РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, Объект.Ссылка);КонецПроцедурыдругой код, который необходимо выполнять в обработчике
ПередЗакрытием
, следует размещать после вызова процедуры и проверки параметраОтказ
. Например:12345678&НаКлиентеПроцедура ПередЗакрытием(Отказ, СтандартнаяОбработка)РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, Объект.Ссылка);Если Отказ ТогдаВозврат;КонецЕсли;<другой код...>КонецПроцедуры
- добавить реквизит формы
Настройка прав доступа пользователей см. Документация 1С: Настройка прикрепления файлов
Использование присоединения файлов при разработке конфигурации
Создание реквизитов типа «присоединенный файл»
При необходимости можно добавить к произвольному объекту ссылочного типа реквизит типа СправочникСсылка.Файлы
или собственного справочника присоединенных файлов (например, реквизит ПрисоединенныйФайл
или Фотография
в справочнике физических лиц). Использование этого реквизита в пользовательском интерфейсе определяется по месту и может быть, например, таким:
- гиперссылка в форме объекта, при нажатии на которую открывается карточка файла или сам файл;
- поле картинки в режиме гиперссылки, при нажатии на которую открывается карточка файла.
После добавления реквизита типа СправочникСсылка.Файлы
к объекту метаданных (объекту с файлом) необходимо:
- добавить ссылку на объект с файлом к составному типу реквизита
ВладелецФайла
справочникаФайлы
; - добавить ссылку на объект с файлом к составному типу параметра
ВладелецФайла
формы элемента справочникаФайлы
.
Управление присоединенными файлами из формы «объекта с файлами»
В форме любого «объекта с файлами» можно подключить настраиваемые элементы управления присоединенными файлами. Предусмотрены следующие варианты использования в пользовательском интерфейсе:
- гиперссылка для быстрого перехода к списку присоединенных файлов, имеет настраиваемые заголовок и местоположение на форме, а также позволяет присоединять файлы из формы размещения;
- поле реквизита типа «присоединенный файл», предоставляет возможность интерактивной работы с присоединенным файлом без перехода к карточке файла.
Для размещения на форме гиперссылки необходимо:
- В модуле формы объекта в процедуру
ПриСозданииНаСервере
добавить код:
1 2 3 4 |
// СтандартныеПодсистемы.РаботаСФайлами ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов(); РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки); // Конец СтандартныеПодсистемы.РаботаСФайлами |
Для размещения на форме поля реквизита:
- В модуле формы объекта в процедуру
ПриСозданииНаСервере
добавить код:
1 2 3 4 |
// СтандартныеПодсистемы.РаботаСФайлами ПараметрыПоля = РаботаСФайлами.ПолеФайла(); РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПоля); // Конец СтандартныеПодсистемы.РаботаСФайлами |
Для размещения на форме комбинации элементов управления или нескольких полей реквизитов:
1 2 3 4 5 6 7 8 |
// СтандартныеПодсистемы.РаботаСФайлами ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов(); ПараметрыПоля = РаботаСФайлами.ПолеФайла(); ДобавляемыеЭлементы = Новый Массив; ДобавляемыеЭлементы.Добавить(ПараметрыГиперссылки); ДобавляемыеЭлементы.Добавить(ПараметрыПоля); РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ДобавляемыеЭлементы); // Конец СтандартныеПодсистемы.РаботаСФайлами |
Замечание: Для снижения времени открытия формы рекомендуется предварительно создать служебные реквизиты и группу формы, в которой будут размещены элементы:
ПараметрыРаботыСФайлами
типаПроизвольный
;ИзображениеНаФорме
типаСтрока
- для размещения поля изображения на форме. Имя этого реквизита также указать в явном виде в коде:
1 2 3 4 5 |
// СтандартныеПодсистемы.РаботаСФайлами ПараметрыПоля = РаботаСФайлами.ПолеФайла(); ПараметрыПоля.ПутьКДаннымИзображения = "ИзображениеНаФорме"; РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПоля); // Конец СтандартныеПодсистемы.РаботаСФайлами |
ГруппаРазмещения
типаГруппаФормы
- для размещения создаваемых элементов на форме. Имя группы также указать в явном виде в коде:
1 2 3 4 5 |
// СтандартныеПодсистемы.РаботаСФайлами ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов(); ПараметрыГиперссылки.Размещение = "ГруппаРазмещения"; РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки); // Конец СтандартныеПодсистемы.РаботаСФайлами |
В ином случае реквизиты и элементы формы будут созданы программно, что замедлит открытие формы.
- В модуле формы объекта в процедуру
ПриОткрытии
добавить фрагмент:
1 2 3 |
// СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ); // Конец СтандартныеПодсистемы.РаботаСФайлами |
- В модуле формы объекта в процедуру
ОбработкаОповещения
добавить фрагмент:
1 2 3 |
// СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия); // Конец СтандартныеПодсистемы.РаботаСФайлами |
- В область
ОбработчикиСобытийЭлементовШапкиФормы
модуля формы объекта поместить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// СтандартныеПодсистемы.РаботаСФайлами &НаКлиенте Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка) РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСФайлами |
- В область
ОбработчикиКомандФормы
модуля формы объекта поместить следующий код:
1 2 3 4 5 6 |
// СтандартныеПодсистемы.РаботаСФайлами &НаКлиенте Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда) РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда); КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСФайлами |
Признак наличия присоединенных файлов в списках
Если в списке «объектов с файлами» требуется вывести признак наличия присоединенных к объекту файлов, то необходимо в запросе динамического списка сделать левое соединение с регистром сведений НаличиеФайлов (по измерению ОбъектСФайлами).
Пример запроса из демонстрационной конфигурации (форма списка справочника _ДемоПроекты):
Копировать в буфер обмена ВЫБРАТЬ Справочник_ДемоПроекты.Ссылка, Справочник_ДемоПроекты.ПометкаУдаления, Справочник_ДемоПроекты.Предопределенный, Справочник_ДемоПроекты.Код, Справочник_ДемоПроекты.Наименование, Справочник_ДемоПроекты.РеквизитДопУпорядочивания, ВЫБОР КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL ТОГДА 0 КОГДА НаличиеФайлов.ЕстьФайлы ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ЕстьФайлы ИЗ Справочник._ДемоПроекты КАК Справочник_ДемоПроекты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов ПО Справочник_ДемоПроекты.Ссылка = НаличиеФайлов.ОбъектСФайлами
Пример списка «со скрепкой»: