Объекты расширения

Печать (Ctrl+P)

1С: Предприятие 8.3.13 . Документация
Руководство администратора
Глава 33. Расширение конфигурации

33.4. Объекты расширения

33.4.1. Свойства расширения

Имеется возможность описать расширение, аналогично конфигурации. Для этого у расширения существуют соответствующий набор свойств:

● Краткая информация и Подробная информация позволяют задать описание расширения.

● Авторские права позволяет указать информацию о разработчике расширения.

● Адрес информации о поставщике позволяет задать URL, перейдя по которому можно будет получить более подробную информацию о поставщике расширения.

● Адрес информации о конфигурации позволяет задать URL, перейдя по которому, можно получить более подробную информацию о данном расширении.

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

● Картинки из конфигурации полностью замещаются картинками из расширения.

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

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

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

33.4.2. Программные модули

33.4.2.1. Общая информация

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

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

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

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

1. Создавать собственные методы и переменные (если это допускает расширяемый модуль).

2. Назначать собственные обработчики на события, которые не обрабатываются в расширяемой конфигурации.

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

● полностью заменить оригинальный метод собственным;

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

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

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

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

&Перед("ИмяМетода")
Процедура Префикс_Имя()
    // текст метода
КонецПроцедуры

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

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

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

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

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

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

33.4.2.2. Способы расширения

Исполнение до расширяемого метода (аннотация Перед)

Если метод аннотирован таким образом, это означает, что вначале будет выполнен метод расширения, а затем ‑ расширяемый метод.

Рис. 688. Схема исполнения «Перед»

Исполнение после расширяемого метода (аннотация После)

Если метод аннотирован таким образом, это означает, что вначале будет выполнен расширяемый метод, а затем ‑ метод расширения.

Рис. 689. Схема исполнения «После»

Обрамление расширяемого метода (аннотации Перед и После)

Если в расширяющем модуле созданы расширяющие методы, которые отмечены аннотациями Перед и После, то это означает, что вначале будет вызван метод, который отмечен аннотацией Перед, затем расширяемый метод и зачем метод расширения, отмеченный аннотацией После.

Рис. 690. Схема исполнения «Перед» и «После»

Замена метода (аннотация Вместо)

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

Для расширяемых функций возможно применение только этого способа расширения.

Рис. 691. Схема исполнения «Вместо»

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

Рис. 692. Схема исполнения «Вместо» совместно с ПродолжитьВызов()

В исходном тексте пример будет выглядеть следующим образом:

&Вместо("Расширяемая")
Процедура Расш1_Расширяющая(Парам1, Парам2)
    // текст метода
    ПродолжитьВызов(Парам1, Парам2);
// текст метода
КонецПроцедуры

33.4.2.3. Редактирование программного модуля

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

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

При выполнении команды Добавить в расширение происходит следующее:

● Если объект, из модуля которого добавляется метод, отсутствует в выбранном расширении ‑ этот объект автоматически добавляется в расширение.

● Если расширяется метод из модуля, отличного от модуля формы:

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

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

● Если выбран несуществующий способ расширения, то будет создан новый метод в расширении, который будет предваряться соответствующей аннотацией.

● Для функций недоступны аннотации Перед и После.

● Для процедуры недоступно:

● Аннотация Вместо, если уже существуют методы с аннотациями Перед или После;

● Аннотация Перед/После, если уже существует метод с аннотацией Вместо.

● Если расширяется метод из модуля формы:

● Если расширяемый метод является обработчиком одного события или одной команды, то предлагается выбрать, каким образом выполнить расширение выбранного метода: как расширение для обработчика события/команды или как расширение обычного метода.

● Если расширяемый метод является обработчиком для нескольких событий или команд, то будет сформировано предупреждение о том, что данный метод не может быть расширен как обработчик события/команды, и он будет расширен только как обычный метод. Затем будет предложено выбрать способ расширения метода.

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

Следует учитывать, что если расширяемый метод обрамлен инструкциями препроцессора, то эти инструкции не будут перенесены в расширение.

При проверке соответствия описания расширяемого метода и метода расширения проверяются следующие характеристики методов:

● Количество параметров и признак передачи параметров «по значению» (ключевое слово Знач).

● Метод является процедурой или функцией. Если определение метода изменяется с процедуры на функцию, а до этого процедура была расширена с применением аннотаций Перед/После, то аннотация будет заменена на аннотацию Вместо.

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

Еще одной особенностью редактирования программного модуля в расширении является то, что имеется возможность перехода к расширяемому методу непосредственно из расширения. Для этого следует поместить курсор на имя расширяемого метода в аннотации, а затем воспользоваться стандартной командой редактора Перейти к определению.

33.4.2.4. Взаимодействие нескольких расширений

При разработке расширений следует исходить из следующих предположений:

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

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

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

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

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

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

Пример 1

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

Рис. 693. Схема взаимодействия. Пример 1

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

1. Будет вызван метод, отмеченный аннотацией Перед(“Расширяемая”) из Расширения2.

2. Затем будет вызван метод, отмеченный аннотацией Перед(“Расширяемая”) из Расширения1.

3. Затем будет вызван метод Расширяемая() из расширяемой конфигурации.

4. Затем, в обратном порядке (относительно списка расширений, т. е. Расширение1 и Расширение2), будут вызваны методы, отмеченные аннотациями После(“Расширяемая”).

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

Пример 2

Если в каждом расширении расширяемый метод перехватывается полностью, то схема выполнения будет выглядеть следующим образом:

Рис. 694. Схема взаимодействия. Пример 2

Так произошло потом, что метод, отмеченный аннотацией Вместо, полностью заменяет собой расширяемый метод. Следует особо отметить, что если в этом примере поменять порядок регистрации расширений (первым будет Расширение2, а последним ‑ Расширение1), то единственным выполнившимся методом будет метод из Расширения1.

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

33.4.2.5. Профили безопасности и расширение

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

Если прикладное решение работает в файловом варианте или в клиент-серверном варианте без профилей безопасности, то при подключении расширения:

● В обычном режиме исполнения встроенного языка ‑ допустимо расширять как клиентские, так и серверные методы. Без ограничения места расположения методов.

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

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

33.4.3. Управляемая форма

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

Рис. 695. Команды редактора формы

Если требуется посмотреть, как выглядит сохраненная форма ‑ следует использовать команду Расширения ‑ Показать сохраненную форму в редакторе заимствованной управляемой формы.

В режиме 1С:Предприятие происходит формирование результирующего объекта объединением расширяемого и всех расширяющих объектов. Процесс объединения работает следующим образом:

1. Выполняется объединение расширяемой конфигурации и первого (по порядку регистрации) расширения.

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

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

1. Если изменений нет ‑ компонента берется из расширяемого объекта;

2. Если изменение есть только в расширяемой форме ‑ компонента берется из расширяемой формы;

3. Если изменение есть только в расширяющей форме ‑ компонента берется из расширяющей формы;

4. Если изменение есть и в расширяемой форме и в расширяющих формах ‑ компонента берется из расширяющей формы.

Сопоставление компонентов управляемой формы выполняется по имени соответствующего элемента.

Вышеописанный режим не действует:

1. Для условного оформления. В этом случае происходит объединение элементов условного оформления из расширяемой формы и всех расширяющих форм аналогично тому, как это происходит при объединении конфигураций.

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

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

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

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

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

Если без конфликтов порядок определить нельзя, используется следующий алгоритм:

● Исходным выступает список элементов расширения в порядке, который установлен в расширении.

● Для определения положения элемента, добавленного в основной конфигурации, находится элемент, существующий в сохраненной конфигурации и расположенный перед добавленным элементом (в порядке основной конфигурации):

● В соответствии с порядком элементов в расширении, определяется, какой элемент является следующим ‑ существовавший или добавленный в расширении:

● Если существовавший, то элемент основной конфигурации добавляется после найденного элемента.

● Если элемент или элементы, добавленные в расширении, то элемент основной конфигурации добавляется после них.

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

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

● Новые элементы основной конфигурации, добавленные в начало списка, добавляются сразу после новых элементов расширения, добавленных в начало списка.

● Новые элементы основной конфигурации, добавленные в конец списка, добавляются перед новыми элементами расширения, добавленными в конец списка.

● Если при добавлении оказывается, что элемент уже был добавлен расширением, то такой элемент пропускается.

● Удаляются элементы, которые были удалены в основной конфигурации по сравнению с сохраненной версией.

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

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

Рис. 696. Расширение обработчика

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

Рис. 697. Обозначения обработчиков

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

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

● установка параметра Отказ в значение Истина;

● установка параметра Выполнение в значение Ложь (для события НачалоПеретаскивания);

● установка параметра ОтменаРедактирования в значение Истина (для обработчиков событий ПриОкончанииРедактирования).

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

33.4.4. Командный интерфейс формы

Командный интерфейс формы дополняется командными интерфейсами расширений. Команды, добавляемые в командный интерфейс формы вручную, будут отображаться после команд расширяемой конфигурации (в режиме «1С:Предприятие»). Следствием этого является то, что в результирующей форме могут одновременно существовать несколько команд с одинаковым представлением.

Удалить команду расширяемой конфигурации невозможно.

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

33.4.5. Формы объектов

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

33.4.6. Подсистемы

Подсистема может быть как заимствованным, так и собственным объектом расширения.

Из состава заимствованной подсистемы нельзя удалить объекты конфигурации, которые добавлены туда в расширяемой конфигурации. Но в состав заимствованной подсистемы можно добавить другие объекты: как собственные, так и заимствованные (относительно расширения).

Собственная подсистема расширения может включать как собственные объекты расширения, так и заимствованные объекты.

Для заимствованных объектов имеется возможность изменить картинку подсистемы, с помощью изменения модифицируемого реквизита Картинка.

33.4.7. Права доступа

33.4.7.1. Общая информация

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

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

33.4.7.2. Заимствованные роли

33.4.7.2.1. Общая информация

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

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

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

33.4.7.2.2. Редактирование

При редактировании заимствованной роли, появляется возможность установить «третье состояние» для права доступа: использовать значение из расширяемой роли.

Рис. 698. Редактор заимствованной роли

Для роли, расположенной в расширении, флажки Устанавливать права для новых объектов и Устанавливать права для реквизитов и табличных частей по умолчанию начинают действовать только для объектов расширения. При этом флажки соответствующим образом переименовываются.

33.4.7.3. Собственные роли

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

Собственная роль расширения не предоставляет возможности редактирования прав доступа, которые задаются для корневого объекта конфигурации (административные права, возможность использования того или иного клиентского приложения и т. д.).

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

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

33.4.7.4. Расширение прав пользователей и профили безопасности

Изменение прав доступа для объектов расширяемой конфигурации зависит от варианта работы (подробнее см. здесь) информационной базы:

● В файловом варианте поддерживаются любые возможности изменения прав доступа: как ограничение прав, так и их расширение.

● В клиент-серверном варианте изменение прав доступа регулируется наличием профиля безопасности и его настройками:

● Если прикладное решение работает без использования профиля безопасности, то расширение ролей не допускается.

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

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

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

● Для собственных объектов расширения права доступа предоставляются в соответствии с настройками ролей расширения (собственными или заимствованными), без взаимодействия с профилем безопасности. Это поведение не зависит от настроек профиля безопасности.

Рассмотрим расширение права доступа на примере. Допустим, в конфигурации имеется документ РасходнаяНакладная. В расширении необходимо расширить право доступа Запись. Для этого используется роль расширения ПродавецРасширение. Также в расширяемой конфигурации присутствуют роли ПродавецШаблон1 и ПродавецШаблон2. В свойстве профиля безопасности Роли, ограничивающие расширение прав доступа указаны обе роли: ПродавецШаблон1 и ПродавецШаблон2.

Пример 1

В расширяемой конфигурации для документа РасходнаяНакладная право Запись указано следующим образом:

● ПродавецШаблон1 ‑ право Запись разрешено;

● ПродавецШаблон2 ‑ право Запись запрещено.

В этом случае работа происходит следующим образом: хотя бы одна из ролей, указанных в свойстве Роли, ограничивающие расширение прав доступа право Запись разрешено (это роль ПродавецШаблон1). Это означает, что роль из расширения ПродавецРасширение может предоставить право Запись для документа РасходнаяНакладная.

Пример 2

В расширяемой конфигурации для документа РасходнаяНакладная право Запись указано следующим образом:

● ПродавецШаблон1 ‑ право Запись запрещено;

● ПродавецШаблон2 ‑ право Запись запрещено.

В этом случае работа происходит следующим образом: никакая роль из списка ролей, указанных в свойстве Роли, ограничивающие расширение прав доступа, не предоставляет право Запись. Это означает, что роль из расширенияПродавецРасширение не может предоставить право Запись для документа РасходнаяНакладная.

Другими словами, алгоритм определения возможности расширить права доступа из расширения, можно описать так: состояние требуемого права из всех ролей, перечисленных в свойстве Роли, ограничивающие расширение прав доступа, объединяется «по ИЛИ». С результатом сложения «по И» объединяется право из роли расширения.

33.4.8. Отчеты и обработки

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

Для заимствованного объекта имеется возможность создавать реквизиты объектов, табличные части и реквизиты табличных частей. Работа с этими объектами не отличается от таковой в конфигурации, не содержащей расширений.

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

33.4.9. XDTO-пакет

XDTO-пакет может быть как заимствованным, так и собственным объектом расширения.

Заимствовать можно не только целиком пакет, но и какую-то часть этого пакета, если для нормального функционирования расширения не требуется весь XDTO-пакет. Если заимствуемый элемент уже существует в расширении, пользователю задаётся запрос на его обновление.

При заимствовании переносится:

● Все установленные свойства элемента, включая списочные и агрегатные;

● Все установленные свойства создающихся родительских элементов, кроме списочных и агрегатных.

При подключении расширения, для заимствованного XDTO-пакета выполняется контроль на строгое подмножество, т. е. все заимствованные элементы пакета должны входить в пакет из расширяемой конфигурации с точным совпадением количества и значения свойств.

33.4.10. Web-сервис

Публикация собственного Web-сервиса расширения возможна двумя способами:

1. Безусловным разрешением использовать любой Web-сервис из любого подключенного расширения. Для этого при публикации следует воспользоваться флажком диалога публикации Публиковать Web-сервисы расширений по умолчанию(подробнее см. здесь) или аналогичным по смыслу атрибутом publishExtensionsByDefault элемента ws файла default.vrd(подробнее см. здесь).

2. Вручную указав Web-сервисы расширений, которые могут быть использованы, в файле default.vrd, в элементе point(подробнее см. здесь).

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

33.4.11. HTTP-сервис

При подключении расширения к информационной базе, выполняется контроль уникальности значения свойства Корневой URLсобственных HTTP-сервисов расширения. Расширения, в которых существуют HTTP-сервисы, у которых значение свойства Корневой URL нарушает уникальность, не подключаются.

33.4.12. Предопределенные элементы

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

Также имеется возможность заимствовать в расширение конкретный предопределенный элемент. При этом в расширение переносятся:

● Имя, код и наименование предопределенного элемента;

● Иерархия подчинения в том случае, если подчиненный элемент создан в иерархическом объекте (справочнике и т. д.);

● Тип предопределенного элемента (для плана видов характеристик). Типы, которые отсутствуют в типе плана видов характеристик заимствованного объекта при переносе удаляются из типа элемента.

● Вид и признак забалансовости (для плана счетов).

При подключении расширения проверяется:

● Совпадение имени, кода и наименования элемента;

● Совпадение родителя предопределенного элемента (для иерархического объекта конфигурации);

● Тип элемента (для плана видов характеристик);

● Вид счета (для плана счетов);

● Признак забалансовости счета (для плана счетов);

● Состав признаков счета (для плана счетов);

● Точное совпадение состава настроек субконто счета (для плана счетов).

33.4.13. Табличный документ

При редактировании заимствованного табличного документа предоставляется некоторые возможности, облегчающие редактирование табличного документа. Данные возможности собраны в меню Главное меню ‑ Таблица ‑ Расширение (и соответствующая кнопка командной панели редактирования табличного документа).

Команда Способ расширения позволяет указать, каким образом будет расширяться табличный документ: объединением расширяемой таблицы и таблицы из расширения (способ Объединять) или таблица расширения будет целиком замещать собой расширяемый табличный документ (способ Замещать).

Команда Отображать изменения позволяет цветом выделять области табличного документа.

Рис. 699. Отображение изменений табличного документа

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

Так, в документе, приведенном на рис.699, можно отметить следующие изменения:

● в строках 11 и 12 добавлены ячейки в колонке 4 (отображение колонки Артикул в табличной части документа Расход товара);

● в колонке 6 добавлены ячейки в строках 1-4 и 9-10. Это явилось следствием добавления колонки с артикулом.

● в ячейке, расположенной во 2 колонке 12 строки изменено значение некоторых свойств ячейки, поэтому ячейка отображается с цветом фона, отличным от серого цвета.

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

Рис. 700. Изменения свойств ячейки

Кнопка Показывать только измененные доступна только в тех ячейках заимствованного табличного докмуента, в которых изменены свойства ячеек. При нажатии на эту кнопку, палитра свойств начинает отображать только измененные свойства. Так, в примере на рис.700, видно, что в ячейке, которая находится на во 2 колонке 12 строки, изменено горизонтальное выравнивание. Остальные свойства этой ячейки остались без изменений.

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

Рис. 701. Удаленные ячейки

Видно, что в расширяемом табличном документе между областями Шапка и ТоварыШапка были две строки: 9 и 10. Однако, в расширении одна строка (с номером 10) была удалена.

Команда Показать результат отображает таблицу (в режиме «только просмотр»), которая представляет собой табличный документ, который получится в результате применения расширения, в котором находится расширяемый табличный документ.

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

33.4.14. Планы обмена

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

● Признак участия объекта конфигурации в плане обмена;

● Состояние авторегистрации изменений.

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

При подключении расширения проверяется:

● Совпадение признака участия объекта конфигурации в плане обмена.

● Совпадение состояния авторегистрации изменений.

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

● Собственный план обмена расширения не может участвовать в распределенной информационной базе.

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

33.4.15. Справочники

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

33.4.16. Документы

Документы могут быть как заимствованными, так и собственными. В заимствованных документах имеется возможность добавлять реквизиты, табличные части и реквизиты табличных частей. Для собственных документов расширения не поддерживается использование нумераторов и последовательностей.

Документ может выступать регистратором только для того регистра, которые находится в той же «части» прикладного решения, что и сам документ. Другими словами, документ из расширения может выступать регистратором для собственных и заимствованных регистров расширения и не может выступать регистратором для собственных регистров расширяемой конфигурации. Также и наоборот: собственный документ конфигурации не может являться регистратором для собственного регистра расширения.

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

Смотри также:

● Агрегаты оборотных регистров накопления (см. здесь).

Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.