Всем привет! Этим материалом открываю большой цикл статей про расширения. Сперва разберем базовые вещи, вроде того - что такое расширение, чем отличается от конфигурации, для чего расширение нужно, и как его подключить. И постепенно будем усложнять - смотреть на всякие тонкости и нюансы.
При разработке в среде 1С очень часто возникает задача доработать типовое решение под требования конкретного владельца системы - будь то специфика какого-то бизнеса, или особенности учета конкретного бюджетного учреждения, или еще что-нибудь. Раньше для этого приходилось снимать конфигурацию с поддержки. Это превращало каждое последующее обновление системы в затяжную рутину с кучей ручного слияния измененного кода.
Механизм расширений решает эту проблему изящнее. По сути, расширение — это отдельная мини-конфигурация, которая как бы «навешивается» поверх основной. Представьте себе прозрачную пленку, которую вы накладываете на бумажный чертеж и дорисовываете там новые элементы, не пачкая оригинальный лист. При запуске сеанса платформа считывает метаданные основной конфигурации, затем накладывает на них ваше расширение и собирает в памяти готовое к работе приложение. Основной код остается на замке поставщика, база легко обновляется, а ваши доработки продолжают спокойно жить в своем изолированном слое.
Управление расширениями конфигурации в конфигураторе
Выше вы видите окно, где будут отображаться все расширения, установленные в текущей базе. В каждой базе они могут быть свои. У нас тут пока еще пусто, но мы это скоро исправим.
Разбираем форму управления расширениями: что значат все эти колонки
Колонка с именем расширения содержит его уникальный идентификатор в системе. По этому имени платформа понимает, к какому контейнеру метаданных обращаться, и именно его мы используем при вызовах в коде (Да-да, с расширениями можно работать средствами языка 1С, и мы этой темы тоже обязательно коснемся). Имя расширения, следовательно, должно соответствовать требованиям к именам переменных.
Колонка с версией нужна исключительно для порядка, чтобы разработчик и администратор могли легко контролировать, какое именно обновление сейчас накатано на базу.
Колонка назначения определяет глобальную роль расширения в системе. Здесь можно выбрать один из вариантов: Исправление, Адаптация или Дополнение. Эта настройка напрямую влияет на приоритет применения расширений. Платформа сначала накладывает патчи (исправления), затем адаптационные модули, а уже в конце — новые дополнения.
Чтобы добавить расширение, в конфигураторе, в окне Расширения конфигурации нужно нажать "Действия / Добавить" или зеленую круглую кнопку с плюсом. Дальше следует заполнить имя, синоним, префикс и назначение. Префикс - крайне важная штука! Пока просто запомните, что у каждого расширения префикс должен быть уникальным в пределах одной базы, с тем чтобы не пересекались пространства имен и не возникло конфликтов при добавлении реквизитов, объектов, процедур и т.п.
Ну а после добавления расширения можно приступить к его дополнительным настройкам.
Флажок "Активно" — это ваш главный рубильник. Снимая его, вы временно отключаете расширение. Код перестает выполняться, но при этом вся структура метаданных и данные в созданных реквизитах никуда не исчезают. Это отличный способ для локализации ошибок при дебаге. Если после обновления что-то сломалось, можно поочередно отключать расширения и смотреть, пропала ли проблема, не удаляя при этом код физически.
Используется в распределенной ИБ (или просто РИБ). В крупных компаниях базы часто синхронизируются между собой через механизм распределенных информационных баз (РИБ). У вас есть центральный узел (главная база, например, в головном офисе) и куча периферийных узлов (например, кассовые узлы в отдаленных магазинах). Флажок "Используется в распределенной ИБ" определяет, улетит ли ваше расширение на периферийные узлы при очередной синхронизации данных.
Колонка "Область действия". Если ваша конфигурация не использует разделители ресурсов (то есть это обычная локальная база для одной фирмы), у вас в этой колонке всегда будет стоять значение "Информационная база", и изменить его платформа не разрешит. Общее расширение устанавливается один раз на всю систему администратором и работает для всех областей данных сразу. Разделенное расширение подключается только в конкретную область данных. Это означает, что одна организация получит новые печатные формы или отчеты, а для всех остальных пользователей база останется в стандартном виде. Как правило, для начинающих разработчиков этой информации достаточно, так как работа в модели сервиса - отдельная большая и достаточно сложная тема.
"Использовать основные роли для всех пользователей". Данная настройка предназначена для того, чтобы упростить выдачу прав на объекты расширения. В одном из материалов цикла мы подробнее остановимся на работе с правами и ролями в расширениях.
Безопасный режим против Защиты от опасных действий
Про эти две настройки поговорим отдельно, так как с ними достаточно часто возникает путаница - когда ставить, когда снимать, и на что влияют.
Безопасный режим — это жесткий программный запрет прямо внутри среды исполнения платформы. Если этот флаг установлен в свойствах расширения, платформа физически блокирует выполнение потенциально опасного кода. В безопасном режиме расширение не сможет вызвать внешнюю компоненту, открыть COM-соединение, обратиться по HTTP к стороннему веб-сервису или прочитать файл на диске сервера. Код просто прервется ошибкой времени выполнения. Кроме того, в этом режиме существенно урезаны возможности перехвата серверных процедур через аннотаци. Если вам нужно делать серьезную интеграцию, этот флаг придется снять, иначе ваш код просто не запустится.
Защита от опасных действий работает совершенно иначе. Это не автоматический программный запрет, а интерактивный диалог с пользователем. Когда этот флаг установлен, платформа при первом запуске расширения или при попытке выполнить сомнительное действие (например, запуск системной команды операционной системы) выведет на экран предупреждение с вопросом, доверяет ли пользователь этому источнику. Если пользователь нажмет кнопку согласия, действие успешно выполнится. Снятие этого флажка означает, что мы безоговорочно доверяем разработчику расширения, и платформа больше не будет утомлять администратора или пользователей предупреждающими диалоговыми окнами при выполнении потенциально опасных операций.
Понимание разницы между этими настройками избавит вас от бесцельного поиска причин, почему написанный вами код интеграции упорно отказывается работать в модуле расширения. При работе на реальных базах всегда держите безопасность в приоритете и не отключайте эти защитные флажки без реальной технической необходимости.
Порядок применения расширений
Если в вашей базе крутится сразу несколько расширений, важным становится порядок их применения. Платформа загружает и применяет их строго по очереди, двигаясь по списку сверху вниз. Сперва срабатывают расширение с назначением Исправление, потом Адаптация, и в последнюю очередь - Дополнение. Внутри одного назначения расширения выстраиваются в том порядке, в каком были добавлены в базу.
Когда несколько расширений пытаются доработать один и тот же модуль или форму, итоговое поведение системы будет зависеть от их взаимного расположения. Код расширения, находящегося ниже в списке, применится последним и переопределит изменения, сделанные вышестоящими расширениями. Вы всегда можете скорректировать этот приоритет с помощью стрелок перемещения в окне управления расширениями.
Чувствуете, что застряли в основах 1С?
Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.
