Как реализовать подсистему «Присоединенные файлы» для своего справочника в расширении 1С?

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

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

Шаг 1. Создание справочника для хранения файлов

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

  1. Копирование существующего: Мы можем скопировать справочник КонтрагентыПрисоединенныеФайлы из основной конфигурации в наше расширение и переименовать его (например, в МойСправочникПрисоединенныеФайлы).
  2. Создание с нуля: Если мы создаем справочник вручную, крайне важно соблюсти идентичность всех реквизитов. Проверим наличие таких реквизитов, как Автор, ДатаСоздания, ТипХраненияФайла, ФайлХранилище и других. Любое несоответствие типов или имен приведет к ошибкам в общих модулях БСП.

Особое внимание уделим реквизиту ВладелецФайла. В нашем новом справочнике он должен иметь тип ссылки на наш основной объект-владелец, который мы также добавили в расширение.

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

Это этап, на котором совершается большинство ошибок. Для работы подсистемы «Присоединенные файлы» недостаточно расширить только типы владельцев. Рассмотрим полный список определяемых типов, которые должны быть включены в расширение и дополнены нашими новыми объектами:

Важный нюанс: При добавлении объектов в определяемые типы в расширении следите за свойством «Использование типов». Если в основной конфигурации этот тип уже заполнен другими объектами, расширение должно корректно дополнять этот список, а не замещать его, чтобы не нарушить работу стандартных подсистем.

Шаг 3. Программная регистрация в БСП

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

Для этого в расширении найдем общий модуль РаботаСФайламиПереопределяемый и создадим в нем обработчик для процедуры ПриОпределенииОбъектовСПрисоединеннымиФайлами. Используем аннотацию &После:


&После("ПриОпределенииОбъектовСПрисоединеннымиФайлами")
Процедура Расш1_ПриОпределенииОбъектовСПрисоединеннымиФайлами(СписокОбъектов)
    СписокОбъектов.Добавить(Метаданные.Справочники.МойСправочникВладелец);
КонецПроцедуры

После этого изменения необходимо обновить кэш метаданных БСП. Выясним причину, почему это важно: БСП хранит настройки подсистем в параметрах сеанса или в справочниках настроек. Чтобы изменения вступили в силу, иногда требуется запустить базу с параметром /С ЗапуститьОбновлениеИнформационнойБазы.

Шаг 4. Настройка формы объекта-владельца

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

В модуле формы нашего владельца в процедуре ПриСозданииНаСервере добавим вызов инициализации команд:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Подключение команд подсистемы ПрисоединенныеФайлы
    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
        МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами");
        МодульРаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект);
    КонецЕсли;
КонецПроцедуры

Этот код позволит динамически создать гиперссылку «Файлы» в командной панели формы (для более сложных манипуляций изучите программное изменение форм (для разработчиков)). Если же вам нужно кастомизировать форму списка файлов или изменить логику перехода, следует обратить внимание на модуль РаботаСФайламиКлиентСерверПереопределяемый.

Шаг 5. Обработка получения формы (важные детали)

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


Процедура Расш1_ОбработкаПолученияФормыПрисоединенногоФайла(Источник, ВидФормы, Параметры, ВыбраннаяФорма, СтандартнаяОбработка)
    РаботаСФайламиСлужебныйВызовСервера.ОпределитьФормуПрисоединенногоФайла(Источник, ВидФормы, Параметры, ВыбраннаяФорма, СтандартнаяОбработка);
КонецПроцедуры

Если точка останова в этом месте не срабатывает, проверьте, правильно ли указан объект в подписке (используйте статический анализатор кода проектов для контроля качества кода). Подписка должна быть назначена на справочник МойСправочникПрисоединенныеФайлы.

Шаг 6. Удаление файлов при удалении владельца

Проанализируем вопрос очистки данных. Чтобы при удалении основного объекта не оставалось «мусора» в справочнике файлов и в томах хранения, необходимо настроить подписку на событие ПередУдалением для объекта-владельца. В обработчике следует вызвать метод:


РаботаСФайлами.ОчиститьФайлыВладельца(Источник);

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

Заключение и типичные ошибки

Подведем итог. Если функционал всё еще не работает, проверьте следующие моменты:

  1. Права доступа: В расширении должны быть созданы роли (или расширены существующие), дающие права на чтение и запись (удобно через автоматический подбор ролей и настройка профилей доступа) в ваш новый справочник файлов.
  2. Префиксы: Если вы используете префиксы в расширении, убедитесь, что имена типов в программном коде совпадают с именами в метаданных расширения (автоматизировать контроль поможет отправка на почту информации о проблемах применения расширений).
  3. Обновление конфигурации: При работе с БСП через расширение всегда полезно выполнять обновление данных подсистем через специализированные обработки (например, ОбновлениеВспомогательныхДанных).

Следуя этой методике, мы обеспечим бесшовную интеграцию подсистемы «Присоединенные файлы» в наше расширение, сохраняя при этом типовую логику работы конфигурации.

← На главную