1С 8.3.9 : Расширение конфигурации — программные модули

Система позволяет расширить практически любой программный модуль, относящийся к управляемому приложению. Невозможно расширять глобальные серверные модули. Также следует помнить, что расширение привилегированного общего модуля будет выполняться в непривилегированном режиме (если иное не разрешено профилем безопасности). Кроме того, предоставляется возможность создавать собственные общие модули, которые не могут быть привилегированными и глобальными серверными. Работа с собственным общим модулем в расширении ничем не отличается от работы с общим модулем обычной конфигурации.

Работа с расширенным программным модулем имеет существенные особенности, которые будут рассмотрены в данном разделе.

При разработке расширяющего модуля следует учитывать, что этот модуль будет находиться в одном пространстве имен с расширяемым модулем. В связи с этим, из расширяющего модуля имеется возможность использовать расширяемый контекст (переменные и методы) напрямую. Также следует помнить, что расширяя какой-либо модуль, созданные экспортные методы и переменные автоматически расширяют публичный контекст расширяемого модуля.

В расширяющем модуле имеется возможность:

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

Создание собственного метода или переменной в расширяющем модуле ничем не отличается от создания метода или переменной в расширяемой конфигурации, при работе без расширений. Однако при создании собственных методов или переменных рекомендуется предварять их имена префиксом, который позволит однозначно идентифицировать принадлежность метода или переменной тому или иному расширению, а также избежать конфликта имен с расширяемой конфигурацией.

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

В общем случае, аннотированный метод из программного модуля расширения выглядит следующим образом:

 

 

В данном примере Перед – одна из трех возможных аннотаций, ИмяМетода – имя расширяемого метода, Префикс_Имя – имя расширяющего метода. Префикс_ – это префикс расширения, который желательно указывать для всех методов расширения. Расширяться может как процедура, так и функция. Имя расширяющего метода должно подчиняться обычным правилам формирования имен процедур и функций. В частности – оно должно быть уникально.

Если расширяемый метод содержит какие-либо параметры, то:

1. Все расширяющие методы обязаны иметь в точности такое же описание, как и расширяемый метод, с точностью до ключевых слов Знач в описаниях параметров методов.

2. Значения параметров разделяются между всеми расширяющими методами из всех расширений и собственно расширяемым методом. Это значит, что если какой-либо расширяющий метод изменит значение параметра, все методы, которые получат управление после этого метода, получат измененное значение этого параметра.

3. В расширяющем методе не имеет смысла указывать значения по умолчанию для параметров расширяемого метода. Значения по умолчанию будут определяться из описания расширяемого метода.

Также следует отметить, что если метод из расширения выполняет расширение какого-либо обработчика события, то расширяющий метод выполнить до того, как сработают подписки на события.

1С 8.3.9 : Расширение конфигурации — программные модули: 1 комментарий

  1. Вот это да. Я в шоке. Наконец-то! Пошел клиентам 1С допиливать без изменения типовой. ММММММ

Обсуждение закрыто.