#std553

Переопределяемые и поставляемые объекты библиотеки

1.

Для настройки библиотеки в конфигурации-потребителе делите объекты на три категории:

  • Непереопределяемые объекты: готовые объекты, которые используются «как есть». Их не следует менять в конфигурации-потребителе. Такие объекты должны присутствовать во всех конфигурациях, использующих библиотеку. Пример: справочник Пользователи.
  • Переопределяемые объекты: объекты для настройки библиотеки под конкретную конфигурацию. Они могут или должны изменяться в конфигурации-потребителе. Через них настраивают поведение библиотечных подсистем и подключают библиотечную функциональность к объектам конфигурации-потребителя.
  • Определители типов: объекты-классификаторы без базовой реализации. Они формируют единое пространство имен, но конкретная реализация в конфигурациях-потребителях может отличаться. Пример: сущность «организация» везде представлена справочником с именем Организации.
2.

Рекомендуемые правила поставки:

  • для непереопределяемых объектов: изменения не рекомендуются;
  • для переопределяемых объектов и определителей типов: изменения разрешены.

Почему это важно:

  • непереопределяемые объекты — зона ответственности разработчиков библиотеки;
  • при срочной необходимости (например, критичная ошибка) изменение непереопределяемого объекта в конфигурации-потребителе допустимо;
  • такие изменения могут потеряться при следующем обновлении библиотеки, если заранее не принять меры (сообщить разработчикам библиотеки и/или задокументировать отклонение в инструкции обновления);
  • переопределяемые объекты и определители типов меняются в конфигурации-потребителе по их назначению.
3.

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

Используйте для этого:

  • настройку состава типов переопределяемых реквизитов (свойств), чтобы подключать библиотечные механизмы к объектам конфигурации-потребителя;
  • предопределенные элементы, чтобы параметризовать библиотечную функциональность под специфику конфигурации-потребителя;
  • переопределяемые общие модули, чтобы менять поведение через обработчики, которые библиотека специально предоставляет для расширения.

Примеры обработчиков:

  • ПриПодготовкеМакетаОписанияОбновлений;
  • ПриЗаписиСпискаБизнесПроцессов;
  • ПриОпределенииБазовойВерсииКонфигурации;
  • ПриДобавленииОбработчиковОбновления.
3.1.

Переопределяемые общие модули называйте с постфиксом Переопределяемый.

3.2.

Переопределяемые общие модули должны содержать только экспортные процедуры, которые вызываются из кода библиотеки.

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

К программному интерфейсу библиотеки относите только экспортные процедуры и функции непереопределяемых общих модулей.

Правильно

Функция ПапкаФайлов(ВладелецФайловСсылка) Экспорт

    СтандартнаяОбработка = Истина;
    Результат = Неопределено;
    ПапкиФайловПереопределяемый.ПриПолученииПапкиФайлов(ВладелецФайловСсылка, Результат, СтандартнаяОбработка);
    Если СтандартнаяОбработка Тогда
        // реализация по умолчанию
        Результат = ...
    КонецЕсли;
    Возврат Результат;

КонецФункции

// Вызывается из библиотеки при необходимости получить папку файлов для указанного владельца.
//
// Параметры:
//  ВладелецФайловСсылкаЛюбаяСсылка                  - владелец файлов, для которого нужно вернуть папку.
//  ПапкаФайловСправочникСсылка.ПапкиФайлов - в этот параметр нужно записать результат.
//  СтандартнаяОбработкаБулево                       - по умолчанию, Истина. В этом случае папка будет получена способом по умолчанию.
// Если значение параметра установить в Ложь, то в этой процедуре можно реализовать свой способ,
// которым в конфигурации получают папки файлов.
Процедура ПриПолученииПапкиФайлов(ВладелецФайловСсылка, ПапкаФайлов, СтандартнаяОбработка) Экспорт

КонецПроцедуры
3.3.

В переопределяемом модуле оставляйте только экспортные процедуры с пустой реализацией. Не добавляйте туда неэкспортные процедуры и функции.

Базовую реализацию размещайте в непереопределяемом коде библиотеки. Так снижается трудоемкость обновлений в конфигурации-потребителе.

Неправильно

// Модуль МояБиблиотекаПереопределяемый
// Базовая логика не должна находиться здесь.
Функция НастройкаПараметровРаботы() Экспорт

    ПараметрыРаботы = Новый Структура;
    ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел", Ложь);
    Возврат ПараметрыРаботы;

КонецФункции

Правильно

// Модуль МояБиблиотека (непереопределяемый)
Функция НастройкаПараметровРаботы() Экспорт

    ПараметрыРаботы = Новый Структура;

    // Настройки по умолчанию.
    ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел",     Ложь);
    ПараметрыРаботы.Вставить("ЗадаватьДатуДляПрочихРазделов",    Ложь);
    ПараметрыРаботы.Вставить("ИспользоватьВнешнихПользователей", Ложь);

    // Передаем управление расширению конфигурации-потребителя.
    МояБиблиотекаПереопределяемый.ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы);
    Возврат ПараметрыРаботы;

КонецФункции

// Модуль МояБиблиотекаПереопределяемый
Процедура ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы) Экспорт

КонецПроцедуры
3.4.

При обновлении библиотеки в конфигурации-потребителе особого внимания требуют:

  • модули корневого объекта конфигурации;
  • переопределяемые общие модули.

Автоматически обновить такие участки нельзя, поэтому используйте общий порядок:

  • при первичной настройке переопределяемого модуля изучите документацию по его экспортным процедурам и функциям (комментарии в библиотеке);
  • добавьте собственную реализацию только там, где это действительно требуется;
  • при каждом обновлении переносите новые экспортные процедуры и функции, удаляйте устаревшие;
  • проверяйте, что комментарии, имена параметров и их количество совпадают с библиотечной поставкой;
  • при изменении назначения или состава параметров актуализируйте реализацию в конфигурации-потребителе.
См. также
Источник

https://its.1c.ru/db/v8std#content:553