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