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