---
title: Подключение к подсистеме Присоединенные файлы
slug: общие-бсп-подключение-к-подсистемам/подключение-к-подсистеме-присоединенные-файлы
---

[Полезные файлы](/bsp-rabota-s-failami/rabota-s-failami.zip)

# Настройка определяемых типов

Включить собственный объект в определяемые типы:
- **`ВладелецПрисоединенныхФайлов`**
- **`ВладелецПрисоединенныхФайловОбъект`** (только для справочников)
- **`ВладелецПрисоединенныхФайловБЗК`** (в ЗУП)

Если владелец файла - это **документ**. то необходимо его включить в состав типов свойства **`Источник`** подписки на собыите **`УстановитьПометкуУдаленияПрисоединенныхФайловДокументов`**. Если подписки нет - создаем свою:
|Свойство|Значение|
|-|-|
|Источник|**<ПодключаемыйОбъектМетаданных>** |
|Событие|**ПередЗаписью**|
|Обработчик|**РаботаСФайлами.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов**|

# Создание справочника для хранения информации о файлах
- Скопировать любой стандартный справочник БСП, имя которого заканчивается на **`ПрисоединенныеФайлы`** (например, **`ПользователиПрисоединенныеФайлы`**).
- Скопированный справочник по шаблону: **`<ПодключаемыйОбъектМетаданных>ПрисоединенныеФайлы`**. Например: **`ПодключаемыйОбъектМетаданныхПрисоединенныеФайлы`**
- В скопированном справочнике **`<ПодключаемыйОбъектМетаданных>ПрисоединенныеФайлы`** необходимо откорректировать тип реквизита **`ВладелецФайла`**. Как тип необходимо указать тот объект, который подключается к подсистеме. Например **`СправочникСсылка.ПодключаемыйОбъектМетаданных`**
- Справочник **`<ПодключаемыйОбъектМетаданных>ПрисоединенныеФайлы`** нужно включить в определяемые типы 
  - **`ПрисоединенныйФайл`**
  - **`ПрисоединенныйФайлОбъект`**.
- Включить в состав плана обена **`ОбновлениеИнформационнойБазы`**
- В подписке на событие **`ОпределитьФормуПрисоединенногоФайла`** включить в состав типов свойства `Источник`. Если подписки на событие нет, то создаем новую:
   
|Свойство|Значение|
|-|-|
|Источник|**<ПодключаемыйОбъектМетаданных>ПрисоединенныеФайлы** |
|Событие|**ОбработкаПолученияФормы**|
|Обработчик|**РаботаСФайламиКлиентСервер.ОпределитьФормуПрисоединенногоФайла**|

# Настройка формы объекта
Создать форму элемента (при отсутствии). В модуле формы необходимо добавить следующий код:
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// СтандартныеПодсистемы.РаботаСФайлами
    
    // Для отображения гиперссылки
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";

	ДобавляемыеЭлементы.Добавить(ПараметрыГиперссылки);
	
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ДобавляемыеЭлементы);
	// Конец СтандартныеПодсистемы.РаботаСФайлами 
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
    РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

```
# Настройка формы списка
- Определить запрос для списка как `Произвольный`
- В настройках списка на вкладке `Запрос` добавляем еще одно поле `ЕстьФайлы`, полученное в результате левого соединения с регистром `Наличие файлов`. В простейшем варианте запрос будет выглядеть так:
```bsl
ВЫБРАТЬ
	ДокументЗаявкаНаРазработку.Ссылка КАК Ссылка,
        //Произвольные поля,
	ВЫБОР
		КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
			ТОГДА 0
		КОГДА НаличиеФайлов.ЕстьФайлы
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ЕстьФайлы
ИЗ
	Документ.ЗаявкаНаРазработку КАК ДокументЗаявкаНаРазработку
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
		ПО ДокументЗаявкаНаРазработку.Ссылка = НаличиеФайлов.ОбъектСФайлами
```
- После сохранения произвольного запроса необходимо вывести новое поле `ЕстьФайлы` в таблицу формы. В свойствах этого реквизита устанавливаем свойство `Вид` в значение `Поле картинки`, свойство `ПоложениеЗаголовка` в значение `Нет`, а в свойстве `КартинкаЗначений` выбираем стандартную БСПшную картинку `КоллекцияСкрепка`, которая находится во вкладке `Из конфигурации`

## ДОПОЛНИТЕЛЬНО. Вывод поля картинки на форму объекта
Чтобы на форме объекта отображать картинку (например, изображение товара), нужно:
- Создать реквизит объекта, который будет хранить ссылку на элемент справочника - хранилища файлов (**`<ПодключаемыйОбъектМетаданных>ПрисоединенныеФайлы`**)
- В форме объекта:
  - Создаем группу, где будет располагаться поле картинки.
  - В модуле формы дополнительно прописываем:
  
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// СтандартныеПодсистемы.РаботаСФайлами
	
    ...
	
	ПараметрыПоля = РаботаСФайлами.ПолеФайла();
	ПараметрыПоля.ПоказыватьКоманднуюПанель = Ложь;
	ПараметрыПоля.ПутьКДанным = "Объект.ФайлКартинки";  
	ПараметрыПоля.ПутьКДаннымИзображения = "ИзображениеНаФорме";  
	ПараметрыПоля.Размещение = "ГруппаИзображениеТовара"; // Имя созданной группы

	... 

	ДобавляемыеЭлементы.Добавить(ПараметрыПоля);

    ...
	
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ДобавляемыеЭлементы);
	// Конец СтандартныеПодсистемы.РаботаСФайлами 
	
КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
    
    РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
    
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    
    РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент,
                ПараметрыПеретаскивания, СтандартнаяОбработка);
    
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    
    РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент,
                ПараметрыПеретаскивания, СтандартнаяОбработка);
    
КонецПроцедуры

// Конец СтандартныеПодсистемы.РаботаСФайлами

```

### Исправление ошибки БСП при работе с полями картинки
В общем модуле **`РаботаСФайламиКлиент`** в процедуре **`ОбновитьОбластьПредпросмотра`** нужно исправить:
```bsl
&ИзменениеИКонтроль("ОбновитьОбластьПредпросмотра")
Процедура IS_ОбновитьОбластьПредпросмотра(Форма, НомерЭлемента, Файл)

	Если ТипЗнч(НомерЭлемента) = Тип("Строка") Тогда
		НомерЭлементаЧислом = Число(НомерЭлемента);
		НомерЭлементаСтрокой = НомерЭлемента;
	Иначе
		НомерЭлементаЧислом = НомерЭлемента;
		#Удаление
		НомерЭлементаСтрокой = Формат(НомерЭлемента, "ЧГ=;");
		#КонецУдаления                                       
		#Вставка
		НомерЭлементаСтрокой = Формат(НомерЭлемента, "ЧН=0; ЧГ=");
		#КонецВставки
	КонецЕсли;

    ...

КонецПроцедуры
```
