#std553¶
Переопределяемые и поставляемые объекты библиотеки¶
1.¶
Для настройки библиотеки в конфигурации-потребителе делите объекты на три категории:
- Непереопределяемые объекты: готовые объекты, которые используются «как есть».
Их не следует менять в конфигурации-потребителе. Такие объекты должны присутствовать во всех конфигурациях, использующих библиотеку.
Пример: справочник
Пользователи. - Переопределяемые объекты: объекты для настройки библиотеки под конкретную конфигурацию. Они могут или должны изменяться в конфигурации-потребителе. Через них настраивают поведение библиотечных подсистем и подключают библиотечную функциональность к объектам конфигурации-потребителя.
- Определители типов: объекты-классификаторы без базовой реализации.
Они формируют единое пространство имен, но конкретная реализация в конфигурациях-потребителях может отличаться.
Пример: сущность «организация» везде представлена справочником с именем
Организации.
2.¶
Рекомендуемые правила поставки:
- для непереопределяемых объектов:
изменения не рекомендуются; - для переопределяемых объектов и определителей типов:
изменения разрешены.
Почему это важно:
- непереопределяемые объекты — зона ответственности разработчиков библиотеки;
- при срочной необходимости (например, критичная ошибка) изменение непереопределяемого объекта в конфигурации-потребителе допустимо;
- такие изменения могут потеряться при следующем обновлении библиотеки, если заранее не принять меры (сообщить разработчикам библиотеки и/или задокументировать отклонение в инструкции обновления);
- переопределяемые объекты и определители типов меняются в конфигурации-потребителе по их назначению.
3.¶
Чтобы упростить настройку библиотеки и обновления в конфигурации-потребителе, минимизируйте количество переопределяемых объектов.
Используйте для этого:
- настройку состава типов переопределяемых реквизитов (свойств), чтобы подключать библиотечные механизмы к объектам конфигурации-потребителя;
- предопределенные элементы, чтобы параметризовать библиотечную функциональность под специфику конфигурации-потребителя;
- переопределяемые общие модули, чтобы менять поведение через обработчики, которые библиотека специально предоставляет для расширения.
Примеры обработчиков:
ПриПодготовкеМакетаОписанияОбновлений;ПриЗаписиСпискаБизнесПроцессов;ПриОпределенииБазовойВерсииКонфигурации;ПриДобавленииОбработчиковОбновления.
3.1.¶
Переопределяемые общие модули называйте с постфиксом Переопределяемый.
3.2.¶
Переопределяемые общие модули должны содержать только экспортные процедуры, которые вызываются из кода библиотеки.
Не вызывайте процедуры переопределяемых модулей напрямую из кода конфигурации-потребителя. Это снижает устойчивость прикладного кода к обновлениям.
К программному интерфейсу библиотеки относите только экспортные процедуры и функции непереопределяемых общих модулей.
Правильно
Функция ПапкаФайлов(ВладелецФайловСсылка) Экспорт
СтандартнаяОбработка = Истина;
Результат = Неопределено;
ПапкиФайловПереопределяемый.ПриПолученииПапкиФайлов(ВладелецФайловСсылка, Результат, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
// реализация по умолчанию
Результат = ...
КонецЕсли;
Возврат Результат;
КонецФункции
// Вызывается из библиотеки при необходимости получить папку файлов для указанного владельца.
//
// Параметры:
// ВладелецФайловСсылка – ЛюбаяСсылка - владелец файлов, для которого нужно вернуть папку.
// ПапкаФайлов – СправочникСсылка.ПапкиФайлов - в этот параметр нужно записать результат.
// СтандартнаяОбработка – Булево - по умолчанию, Истина. В этом случае папка будет получена способом по умолчанию.
// Если значение параметра установить в Ложь, то в этой процедуре можно реализовать свой способ,
// которым в конфигурации получают папки файлов.
Процедура ПриПолученииПапкиФайлов(ВладелецФайловСсылка, ПапкаФайлов, СтандартнаяОбработка) Экспорт
КонецПроцедуры
3.3.¶
В переопределяемом модуле оставляйте только экспортные процедуры с пустой реализацией. Не добавляйте туда неэкспортные процедуры и функции.
Базовую реализацию размещайте в непереопределяемом коде библиотеки. Так снижается трудоемкость обновлений в конфигурации-потребителе.
Неправильно
Правильно
// Модуль МояБиблиотека (непереопределяемый)
Функция НастройкаПараметровРаботы() Экспорт
ПараметрыРаботы = Новый Структура;
// Настройки по умолчанию.
ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел", Ложь);
ПараметрыРаботы.Вставить("ЗадаватьДатуДляПрочихРазделов", Ложь);
ПараметрыРаботы.Вставить("ИспользоватьВнешнихПользователей", Ложь);
// Передаем управление расширению конфигурации-потребителя.
МояБиблиотекаПереопределяемый.ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы);
Возврат ПараметрыРаботы;
КонецФункции
// Модуль МояБиблиотекаПереопределяемый
Процедура ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы) Экспорт
КонецПроцедуры
3.4.¶
При обновлении библиотеки в конфигурации-потребителе особого внимания требуют:
- модули корневого объекта конфигурации;
- переопределяемые общие модули.
Автоматически обновить такие участки нельзя, поэтому используйте общий порядок:
- при первичной настройке переопределяемого модуля изучите документацию по его экспортным процедурам и функциям (комментарии в библиотеке);
- добавьте собственную реализацию только там, где это действительно требуется;
- при каждом обновлении переносите новые экспортные процедуры и функции, удаляйте устаревшие;
- проверяйте, что комментарии, имена параметров и их количество совпадают с библиотечной поставкой;
- при изменении назначения или состава параметров актуализируйте реализацию в конфигурации-потребителе.
См. также¶
- #std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных
- #std644: Обеспечение совместимости библиотек