Как правильно подключить механизм «Присоединенные файлы» к своему объекту в 1С:ERP, чтобы не возникло проблем при обновлении?

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

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

Разберем архитектурный подход: Расширение или Основная конфигурация?

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

Шаг 1: Подготовка определяемых типов в расширении

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

  1. ОпределяемыйТип.ВладелецПрисоединенныхФайлов — здесь мы указываем ссылку на наш новый объект (например, ДокументСсылка.МойНовыйДокумент).
  2. ОпределяемыйТип.ВладелецПрисоединенныхФайловОбъект — здесь указываем объектный тип нашего документа.
  3. ОпределяемыйТип.ПрисоединенныйФайл — в этот тип мы добавим ссылку на вспомогательный справочник, который создадим далее.
  4. ОпределяемыйТип.ПрисоединенныйФайлОбъект — ссылка на объект вспомогательного справочника.

Важный момент: использование расширения для этих типов гарантирует, что при обновлении ERP новые типы, добавленные разработчиками 1С, просто добавятся в список, а ваши — останутся на месте без конфликтов объединения.

Шаг 2: Создание вспомогательного справочника для хранения файлов

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

Лучше всего создать этот справочник непосредственно в расширении. Чтобы не ошибиться в структуре, рекомендуется скопировать ее из любого типового справочника (например, ДоговорыКонтрагентовПрисоединенныеФайлы). Справочник должен содержать стандартный набор реквизитов: Автор, ДатаСоздания, Расширение, ФайлХранилище, СтатусИзвлеченияТекста и другие.

В модуле менеджера вашего нового справочника необходимо разместить стандартные процедуры интеграции. Проанализируем пример кода, который должен там присутствовать:


Процедура ПриОпределенииНастроек(Настройки) Экспорт
    // Настройки поиска и работы с файлами
    Настройки.ВыбиратьТипПриДобавлении = Ложь;
    Настройки.СоздаватьГруппыПриСозданииВладельцев = Ложь;
КонецПроцедуры

Шаг 3: Регистрация справочника в подсистеме через общий модуль

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


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

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

Шаг 4: Программный вывод кнопки «Файлы» на форму объекта

Выясним, как отобразить пользователю интерфейс для работы с файлами. Вместо того чтобы вручную рисовать команды и кнопки в редакторе форм, мы воспользуемся программным методом БСП. Это обеспечит единообразие интерфейса.

В модуле формы вашего объекта в процедуре ПриСозданииНаСервере (также через расширение с аннотацией &После) пропишем следующий код:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Инициализация механизма работы с файлами на форме
    ПараметрыИнтеграции = ПрисоединенныеФайлы.ПараметрыИнтеграции();
    ПрисоединенныеФайлы.ПриСозданииНаСервере(ЭтаФорма, ПараметрыИнтеграции);
КонецПроцедуры

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

Шаг 5: Настройка прав доступа и функциональных опций

Рассмотрим важные нюансы, о которых часто забывают при интеграции:

  1. Роли: В расширении необходимо создать или расширить существующие роли, чтобы пользователи имели права на чтение и запись в ваш новый справочник _ДемоМойОбъектПрисоединенныеФайлы. Если этого не сделать, обычные пользователи увидят ошибку нарушения прав доступа, хотя под полными правами всё будет работать.
  2. Функциональные опции: В современных конфигурациях ERP работа с файлами может зависеть от констант (например, хранение файлов в томах на диске). Убедитесь, что ваш справочник включен в состав функциональной опции ХранитьФайлыВТомахНаДиске внутри расширения. Это позволит системе корректно выносить тяжелые данные из базы данных в файловое хранилище.
  3. РИБ (Распределенные информационные базы): Если вы используете синхронизацию данных, проверьте, включен ли ваш новый справочник в правила миграции. При создании справочников в расширении нужно быть внимательным к тому, как платформа обрабатывает регистрацию изменений для этих объектов.

Посмотрим на процесс обновления с такой архитектурой

Когда выйдет новый релиз ERP 2.5, вы просто запустите стандартную процедуру обновления. Поскольку все ваши изменения (определяемые типы, новый справочник, подписки на события и логика в формах) вынесены в расширение, основная конфигурация обновится автоматически. Вам останется лишь проверить работоспособность расширения. В редких случаях, если разработчики 1С изменят сигнатуру (набор параметров) методов в ПрисоединенныеФайлы, вам потребуется лишь поправить вызовы в коде расширения, не вскрывая основную конфигурацию.

Таким образом, мы добились полной интеграции с механизмом БСП, сохранив чистоту основной конфигурации и обеспечив легкость будущих обновлений системы. В качестве примера готовой реализации можно использовать расширение для подключения присоединенных файлов к документу в ERP.

← На главную