Часто перед разработчиком встает задача организовать удобное хранение электронных копий документов (сканов, PDF-файлов, изображений) непосредственно внутри учетной системы. В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), для этого предусмотрен мощный и гибкий механизм. Рассмотрим подробно, как настроить привязку файлов к документу, например, к «Приходной накладной», и как обеспечить программную связь, если файлы загружаются через сторонние интерфейсы.
Для начала проанализируем ситуацию: почему недостаточно просто создать кнопку на форме? Механизм БСП требует строгого соблюдения структуры объектов метаданных. Каждый тип документа, к которому мы планируем прикреплять файлы, должен иметь свой собственный подчиненный справочник-хранилище. Если мы хотим добавить файлы к документу ПриходнаяНакладная, в системе должен существовать справочник ПриходнаяНакладнаяПрисоединенныеФайлы.
Рассмотрим основные шаги, которые необходимо выполнить в конфигураторе:
Выясним, как правильно сконфигурировать справочник присоединенных файлов. Самый простой способ — найти в конфигурации аналогичный справочник (например, ДоговорыКонтрагентовПрисоединенныеФайлы) и скопировать его структуру. Важно соблюсти следующие требования:
ДокументСсылка.ПриходнаяНакладная.Проанализируем систему связей внутри БСП. Чтобы подсистема «понимала», какие объекты могут иметь файлы, нам нужно зарегистрировать наши новые объекты в Определяемых типах. Это критически важный шаг, без которого стандартные методы БСП будут выдавать ошибки или просто не увидят файлы.
Найдем в дереве метаданных следующие объекты и добавим в них наши типы данных:
ОпределяемыйТип.ВладелецПрисоединенныхФайлов — добавляем сюда ДокументСсылка.ПриходнаяНакладная.ОпределяемыйТип.ПрисоединенныйФайл — добавляем ссылку на созданный нами справочник СправочникСсылка.ПриходнаяНакладнаяПрисоединенныеФайлы.ОпределяемыйТип.ПрисоединенныйФайлОбъект — добавляем объектный тип СправочникОбъект.ПриходнаяНакладнаяПрисоединенныеФайлы.Посмотрим, как вывести ту самую заветную кнопку со скрепкой. В БСП за это отвечает общая команда, которая обычно называется ПрисоединенныеФайлы (или именованная в зависимости от конфигурации, например, ПрисоединенныеФайлыБП).
В свойствах этой команды найдем параметр Тип параметра команды и убедимся, что в списке отмечен наш документ ПриходнаяНакладная. После этого кнопка автоматически появится в командной панели формы документа (в группе «Важное» или «Перейти»), если в форме включено использование подключаемых команд.
Теперь разберем, какой код необходимо добавить в модуль формы документа, чтобы инициализировать механизм при открытии. Это обеспечит корректную работу кнопок и динамическое обновление списка файлов.
В процедуре ПриСозданииНаСервере нам необходимо вызвать инициализацию подключаемых команд. Рассмотрим пример кода:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
// Инициализация механизма присоединенных файлов
ПрисоединенныеФайлы.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
Если ваша конфигурация использует более свежие версии БСП (3.0 и выше), также может потребоваться вызов в обработчике чтения объекта, чтобы состояние кнопок обновлялось при переходе между записями:
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПрисоединенныеФайлы
ПрисоединенныеФайлы.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
// Конец СтандартныеПодсистемы.ПрисоединенныеФайлы
КонецПроцедуры
Рассмотрим ситуацию автора темы: файлы создаются в отдельном интерфейсе «Сканирование», но должны отображаться в накладной. Выясним причину, по которой они не видны сразу. Механизм БСП ищет записи только в справочнике, который является владельцем для конкретной ссылки документа.
Если ваш «Электронный документ» из раздела сканирования — это отдельный объект, вам необходимо при его записи программно создавать запись в справочнике ПриходнаяНакладнаяПрисоединенныеФайлы. Проанализируем примерную логику такой привязки:
// Пример программного создания связи
НовыйФайл = Справочники.ПриходнаяНакладнаяПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.Владелец = СсылкаНаНашуНакладную;
НовыйФайл.Наименование = "Скан накладной №" + СсылкаНаНашуНакладную.Номер;
// Заполнение служебных реквизитов БСП (ТипХранения, ДанныеФайла и т.д.)
// Обычно используются функции общего модуля ПрисоединенныеФайлы.ДобавитьФайл()
НовыйФайл.Записать();
Важный момент: Лучшим решением будет использование программного интерфейса (API) БСП. Вместо ручного заполнения справочника, воспользуйтесь функцией ПрисоединенныеФайлы.ДобавитьФайл(). Это гарантирует, что все служебные регистры сведений будут заполнены корректно, и файл действительно «привяжется» к документу.
Если вы выполнили все шаги, но при нажатии на кнопку «Прикрепленные файлы» список пуст, проанализируйте следующие моменты:
Владелец указана ссылка именно на тот документ, который вы открываете.РегистрСведений.НастройкиПрисоединенныхФайлов).Подводя итог, можно сказать, что интеграция файлов в 1С — это не просто добавление функции, а настройка целой экосистемы объектов. Использование стандартов БСП позволяет сделать эту систему надежной и совместимой с будущими обновлениями конфигурации.