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