Свойства расширения
"Назначение" может принимать одно из значений (последовательность важна):
- Исправление - предназначено для исправления ошибок в конфигурации
- Адаптация - предназначено для внесения изменений для конкретного заказчика
- Дополнение - предназначено для внесения дополнительных сервисов и объектов, например отечтов
Расширения с одинаковым назначением не должны пересекаться по функционалу и "мешать друг другу".
При применение системой расширений она учитывает приоритет, указанный выше, но только при условии, что отключены режимы совместимости (свойства расширения Режим совместимости расширения конфигурации, Режим совместимости и свойство Режим совместимости конфигурации должны быть установлены в значение Не использовать).
"Область действия" может принимать одно из значений (последовательность важна):
- Информационная база - применяется ко всей базе
- Разделение данных - может быть установлен для конфигураций, работающих в режиме разделения данных. Разделение может быть создано с помощью общих реквизитов. Например создадим общий реквизит "Организация" и зададим у него свойство "Разделение данные" = "Разделять". В результате в базе будут создано несколько независимых областей, в каждой из которых будут храниться данные только одной Организации. Расширение будет применено только в том случае, если его набор разделителей соответствует значениям разделителей для данного сеанса.
Безопасный режим.
Если прикладное решение работает в файловом варианте или в клиент-серверном варианте без профилей безопасности, то при применении расширения в безопасном режиме исполнения встроенного языка будут расширяться только клиентские методы и серверные обработчики форм, которые установлены через панель свойств. К остальным серверным методам (в т. ч. и к аннотированным серверным методам модулей) расширение применяться не будет.
Если прикладное решение работает в клиент-серверном варианте, то возможность расширения серверных модулей регулируется профилем безопасности. Имя профиля безопасности задается в списке расширений, в колонке Безопасный режим, имя профиля безопасности.
Объекты с одинаковым именем.
Все созданные в расширении объекты по умолчанию имеют в имени префикс, указанный в свойствах расширения. Если все-таки по какой-то причине в расширении будет добавлен объект, который имеет имя, уже существующее в конфигурации или в другом, загруженном ранее расширении, то при попытке записать расширение или применить его будет выдано сообщение об ошибке: " Уже существует объект с именем..."
Создание/подключение расширения
При создании нового расширения из конфигурации автоматически заимствуются следующие свойства: Основной режим запуска, Назначение использования, Основной язык, Режим совместимости интерфейса и Режим совместимости. Эти же свойства помечаются как контролируемые.
При загрузке или изменении расширения в конфигураторе есть возможность проверить "возможность применения расширения". Эта команда доступна в списке расширений в подменю "Конфигурация". Если в расширении найдена критическая ошибка, например отсутствует справочник, то будет выдано соответствующее сообщение. Аналогичная команда есть и в 1С клиенте в форме "Управление расширениями конфигурации" в контекстном меню.
Можно запустить 1С из без проверки, но тогда при запуске клиента 1С будет введено сообщение об ошибку и расширение не будет применено.
Есть специальный метод ПроверитьВозможностьПрименения(), который проверяет применимость новой версии расширения, но только я пока не понял как и когда его надо запускать.
Расширение форм
Механизм применения расширения формы оперирует тремя вариантами формы:
- Расширяемая форма - это форма из основной конфигурации
- Сохраненная форма - эта форма создается в момент добавления формы в расширение. В этой форме хранится визуальная часть формы на момент добавления в расширении
- Расширяющая форма - это форма, которая находится в расширении и в которой внесены изменения
При запуске 1С анализируется каждый элемент сохраненной формы не предмет наличия в нем изменений в расширяемой и расширяющей формы. Если изменения внесены только в конфигурации (расширяемой форме), то элементы формируются на основании данных в конфигурации. В остальных случаях элементы формируются на основании данных расширения.
При внесении изменений в форму в конфигурации в расширении в форме надо выполнит операцию "Обновить расширение формы"
Если добавлено несколько расширений, которые содержат изменения одной формы, то приоритетнее будут изменения из расширения, загруженного последним. Если элемент изменен в разных расширениях, то применены будут только изменения из последнего расширения, остальные будут проигнорированы.
Порядок загрузки расширения задается в свойстве "Назначение" расширения (см. выше). Если расширения имеют одинаковое назначение, то порядок определяется временем загрузки расширения в базу.
Модуль формы
Если несколько расширений дополняют (Перед/После) одну и тоже процедуру, то будут выполнены дополнения из всех расширений в очередности описанной выше.
Отчеты
Отчет в расширении может обращаться только к тем данным которые заимствованы из основной конфигурации. Если попытаться обратиться к незаимствованным данным, то будет выдано сообщение об ошибке. Можно проигнорировать сообщение об ошибке и, если уверены в наличии используемых в запросе данных, сохранить расширение. При этом расширение будет применено и отчет сформирует данные. Однако надо иметь в виду, что при таком подходе легко пропустить существенные изменения в основной конфигурации и ошибка выйдет только в момент первого запуска отчета.
Для доработки отчета можно поступить 2 способами:
- Заимствовать отчет и создать для него собственную схему компоновки данных, после чего задать в её как основную схему.
- Доработать исходную схему компоновки данных отчета. Для этого ее нужно скопировать (не заимствовать!) из конфигурации, назначить основной для заимствованного отчета и изменить так, как вам нужно. Схему компоновки данных надо именно копировать, а не заимствовать в расширение, так как макеты схем компоновки не входят в список расширяемых объектов конфигурации.
Если изменения отчета присутствуют в нескольких расширениях, то применено будет то, которое будет загружено последним в соответствии с порядком, описанном выше.
Макеты
При доработке макета табличного документа можно указать способ расширения Объединять или Замещать.
Расширение макетов похоже на расширение формы. Так же, при добавлении в расширение, сохраняется копия макета. Сопоставление изменений выполняется на уровне именованных строк, отдельных строк и отдельных ячеек. Если эти доработки пересекаются, то применяется расширение.
Для удобства доработки макета можно включить режим отображения изменений в расширяемом макете с помощью команды главного меню Таблица – Расширение – Отображать изменения. В этом режиме зеленым цветом будут отображаться добавленные ячейки, белым - измененные, а серым - неизмененные.
Если макет был изменен в основной конфигурации, то можно посмотреть макет, который будет получен в результате сопоставления изменений расширяемого и расширяющего макета по сравнению с сохраненным макетом. Этот результат можно увидеть еще на этапе разработки с помощью команды главного меню Таблица – Расширение – Показать результат.
Предопределенные значения
При заимствовании объектов с предопределенными значениями, нужно согласиться с предложением платформы установить необходимость контроля состава предопределенных элементов этого справочника (две галочки). В этом случае при применении расширения будет проверяться наличие предопределенных элементов с такими же именем, кодом и наименованием в объекте конфигурации. Если при изменении основной конфигурации был изменен изначальный объект или предопределенное значение, то при применении расширения будет выдана ошибка.
Далее надо открыть список предопределенных значений, выбрать нужное и добавить в расширение.
Если в расширении добавляется запрос (в отчете или в динамическом списке), в котором используются предопределенные значения, то они автоматически добавляются в расширение с контролем.
Расширение модулей
Нельзя расширить глобальные серверные модули. Расширенные привилегированные модули буду выполняться в непривилегированном режиме.
Из расширяющего модуля можно обращаться к переменным и методам расширяемого модуля.
Экспортные методы и переменные, созданные в расширяющем модуле, становятся частью публичного контекста расширяемого модуля, поэтому они вам будут доступны из других модулей расширения.
Для расширения функций можно использовать только расширяющий метод с аннотацией &Вместо (недоступны аннотации Перед и После). Для расширения функций предусмотрен метод глобального контекста ПродолжитьВызов(). Он возвращает результат выполнения расширяемой функции.
ПродолжитьВызов() так же может использоваться для расширения процедур. В этом случае код до этого метода и после него будут выполняться в одном контексте.
Следует учитывать, что если расширяемый метод обрамлен инструкциями препроцессора, то эти инструкции не будут перенесены в расширение.
Директивы компиляции, предваряющие расширяемую процедуру в модуле формы, должны совпадать с директивами этой процедуры в расширении. Иначе расширяющий метод выполняться не будет.
Иллюстрация сценариев исполнения методов встроенного языка при условии применения к конфигурации двух расширений: сначала применяется Расширение1 с назначением Адаптация, а затем применяется Расширение2 с назначением Дополнение:
Модуль объекта
Если в расширении модуля в процедуре необходимо установить значение Отказ, то рекомендуется использовать аннотацию &Перед.
Особенность срабатывания расширенных методов для нескольких расширений:
В первом расширении аннотация &Перед
Во втором расширении аннотация &Перед или &После
Расширяющий метод второго расширения будет иметь аннотацию &Вместо и оно применится первым.
Второе расширение применяется последним и аннотация &Вместо.
Если требуется выполнение метода из обоих расширений, то в расширении с аннотацией &Вместо надо использовать метод ПродолжитьВызов()
Если в основной конфигурации было изменено объявление метода, например изменено количество параметров, то при запуске 1С клиента выйдет ошибка.
Исправить описание метода в расширении можно еще раз добавив метод в расширении, при этом система скажет, что метод уже существует, но различается количество параметров и предложит это исправить.
Расширение ролей
Если расширение не содержит собственных ролей, то доступ к объектам расширения предоставляется всем пользователям информационной базы.
Если в расширении существуют собственные роли, которые регламентируют доступ к объектам расширения, то всем пользователям информационной базы, которые должны иметь доступ к объектам расширения, следует добавить роли из расширения. В противном случае объекты расширения не будут доступны пользователям.
При установке прав для заимствованных ролей в расширении надо учитывать следующее:
- Стандартно права всех заимствованных ролей на заимствованные объекты берутся из конфигурации. Флажки прав при этом затенены.
- Если в расширении флажки явно сняты или установлены, то права берутся из расширения.
Для созданных в расширении ролей можно установить не все права, например нельзя добавить права на запуск приложения и вывод.
Расширение (изменение) командного/основного интерфейса
С помощью расширения можно изменить командный или основной интерфейс. В интерфейс можно добавить или убрать видимость элементов интерфейса, но здесь есть свой нюансы:
- надо добавить не только объект в расширении, но и основной элемент его интерфейса (форму, макет).
- в расширении в свойствах объекта установить признак "Изменять значение при подключении расширения" () для основного элемента интерфейса и выбрать добавленный элемент интерфейса
- надо в расширении включить в состав подсистемы добавленный объект.
Отчеты.
Если нужно убрать из интерфейса ссылку на отчет, надо выполнить следующие действия:
- перенести в расширение отчет
- перенести в расширение схему компоновки данных или другой макет отчета
- в расширении в свойствах отчета установить признак "Изменять значение при подключении расширения" для основной схему компоновки данных.
- если меняем командный интерфейс подсистемы, то надо перенести в расширение саму подсистему и в расширении включить в состав подсистемы нужный отчет.
Только после этих манипуляций в интерфейсе будет возможность изменить видимость. Если этого не сделать, то отчета не будет в списке объектов интерфейса.
Обработки.
У обработки могут быть созданы отдельные команды, которые выводятся в интерфейс в основной конфигурации. Чтобы исправить их видимость, надо:
- добавить команду в расширение
- включить команду в подсистему в расширении
Если у обработки нет отдельных команд и она вводится в интерфейсе в разделе "Сервис", то, чтобы её убрать, надо:
- добавить обработку в расширение
- добавить обработку в подсистему в расширении
- добавить основную обработку в форму расширения
- в расширении в свойствах обработку установить признак "Изменять значение при подключении расширения" () для основной формы в разделе "Представление". Указать расширяемую форму.
После этого выполнить команду "Открыть командный интерфейс" подсистемы и убрать видимость у обработки/команды.
|