Как реализовать привязку файлов и сканов к документам в 1С с помощью БСП

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто перед разработчиком встает задача организовать удобное хранение электронных копий документов (сканов, PDF-файлов, изображений) непосредственно внутри учетной системы. В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), для этого предусмотрен мощный и гибкий механизм. Рассмотрим подробно, как настроить привязку файлов к документу, например, к «Приходной накладной», и как обеспечить программную связь, если файлы загружаются через сторонние интерфейсы.

Разберем архитектуру подсистемы «Присоединенные файлы»

Для начала проанализируем ситуацию: почему недостаточно просто создать кнопку на форме? Механизм БСП требует строгого соблюдения структуры объектов метаданных. Каждый тип документа, к которому мы планируем прикреплять файлы, должен иметь свой собственный подчиненный справочник-хранилище. Если мы хотим добавить файлы к документу ПриходнаяНакладная, в системе должен существовать справочник ПриходнаяНакладнаяПрисоединенныеФайлы.

Рассмотрим основные шаги, которые необходимо выполнить в конфигураторе:

  1. Создание справочника для хранения файлов.
  2. Включение документа и справочника в определяемые типы.
  3. Настройка общей команды для вывода кнопки «Скрепка».
  4. Добавление программного кода в модуль формы документа.

Шаг 1: Создание справочника-хранилища

Выясним, как правильно сконфигурировать справочник присоединенных файлов. Самый простой способ — найти в конфигурации аналогичный справочник (например, ДоговорыКонтрагентовПрисоединенныеФайлы) и скопировать его структуру. Важно соблюсти следующие требования:

Шаг 2: Настройка определяемых типов

Проанализируем систему связей внутри БСП. Чтобы подсистема «понимала», какие объекты могут иметь файлы, нам нужно зарегистрировать наши новые объекты в Определяемых типах. Это критически важный шаг, без которого стандартные методы БСП будут выдавать ошибки или просто не увидят файлы.

Найдем в дереве метаданных следующие объекты и добавим в них наши типы данных:

  1. ОпределяемыйТип.ВладелецПрисоединенныхФайлов — добавляем сюда ДокументСсылка.ПриходнаяНакладная.
  2. ОпределяемыйТип.ПрисоединенныйФайл — добавляем ссылку на созданный нами справочник СправочникСсылка.ПриходнаяНакладнаяПрисоединенныеФайлы.
  3. ОпределяемыйТип.ПрисоединенныйФайлОбъект — добавляем объектный тип СправочникОбъект.ПриходнаяНакладнаяПрисоединенныеФайлы.

Шаг 3: Подключение стандартных команд БСП

Посмотрим, как вывести ту самую заветную кнопку со скрепкой. В БСП за это отвечает общая команда, которая обычно называется ПрисоединенныеФайлы (или именованная в зависимости от конфигурации, например, ПрисоединенныеФайлыБП).

В свойствах этой команды найдем параметр Тип параметра команды и убедимся, что в списке отмечен наш документ ПриходнаяНакладная. После этого кнопка автоматически появится в командной панели формы документа (в группе «Важное» или «Перейти»), если в форме включено использование подключаемых команд.

Шаг 4: Программная интеграция в модуль формы

Теперь разберем, какой код необходимо добавить в модуль формы документа, чтобы инициализировать механизм при открытии. Это обеспечит корректную работу кнопок и динамическое обновление списка файлов.

В процедуре ПриСозданииНаСервере нам необходимо вызвать инициализацию подключаемых команд. Рассмотрим пример кода:


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

Если ваша конфигурация использует более свежие версии БСП (3.0 и выше), также может потребоваться вызов в обработчике чтения объекта, чтобы состояние кнопок обновлялось при переходе между записями:


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

Связывание внешних сканов с документом

Рассмотрим ситуацию автора темы: файлы создаются в отдельном интерфейсе «Сканирование», но должны отображаться в накладной. Выясним причину, по которой они не видны сразу. Механизм БСП ищет записи только в справочнике, который является владельцем для конкретной ссылки документа.

Если ваш «Электронный документ» из раздела сканирования — это отдельный объект, вам необходимо при его записи программно создавать запись в справочнике ПриходнаяНакладнаяПрисоединенныеФайлы. Проанализируем примерную логику такой привязки:


// Пример программного создания связи
НовыйФайл = Справочники.ПриходнаяНакладнаяПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.Владелец = СсылкаНаНашуНакладную;
НовыйФайл.Наименование = "Скан накладной №" + СсылкаНаНашуНакладную.Номер;
// Заполнение служебных реквизитов БСП (ТипХранения, ДанныеФайла и т.д.)
// Обычно используются функции общего модуля ПрисоединенныеФайлы.ДобавитьФайл()
НовыйФайл.Записать();

Важный момент: Лучшим решением будет использование программного интерфейса (API) БСП. Вместо ручного заполнения справочника, воспользуйтесь функцией ПрисоединенныеФайлы.ДобавитьФайл(). Это гарантирует, что все служебные регистры сведений будут заполнены корректно, и файл действительно «привяжется» к документу.

Почему список файлов может оставаться пустым?

Если вы выполнили все шаги, но при нажатии на кнопку «Прикрепленные файлы» список пуст, проанализируйте следующие моменты:

  1. Проверьте владельца: Откройте справочник присоединенных файлов через «Все функции» и убедитесь, что в поле Владелец указана ссылка именно на тот документ, который вы открываете.
  2. Права доступа: Убедитесь, что у пользователя есть права на чтение нового справочника присоединенных файлов и соответствующих регистров (например, РегистрСведений.НастройкиПрисоединенныхФайлов).
  3. Тип хранения: Если используется хранение в томах на диске, проверьте, настроены ли тома и имеет ли сервер 1С доступ к указанной сетевой папке.

Подводя итог, можно сказать, что интеграция файлов в 1С — это не просто добавление функции, а настройка целой экосистемы объектов. Использование стандартов БСП позволяет сделать эту систему надежной и совместимой с будущими обновлениями конфигурации.

← На главную