Доработка 1С без снятия с поддержки: собираем расширение от нуля до рабочей базы

· 10 мин

Содержание

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

Механизм появился в платформе 8.3.6 и с тех пор стал стандартным способом дорабатывать типовые решения: Бухгалтерию 3.0, ЗУП 3.1, УТ 11. Готовое расширение переносят между базами одним файлом .cfe.

Что подготовить до запуска Конфигуратора

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

Что нужно заранее:

  • 🗂 Копия рабочей базы. Выгрузите информационную базу в файл .dt или скопируйте каталог файловой базы и подключите копию отдельной строкой в списке баз.
  • 🔑 Пользователь с полными правами. Для работы с расширениями в Конфигураторе нужны административные права.
  • 🧩 Платформа не ниже 8.3.6. В актуальных версиях платформы возможностей заметно больше: новые реквизиты в заимствованных объектах, собственные справочники и документы, аннотация &ИзменениеИКонтроль.
  • 📝 Чёткое ТЗ. Одно расширение — одна задача. «Расширение со всеми доработками» через год превращается в то, от чего расширения и должны были спасти.

Запуск Конфигуратора: в окне запуска 1С выберите копию базы и нажмите Конфигуратор. Если основная конфигурация ещё не открыта, откройте её командой Конфигурация → Открыть конфигурацию: без дерева основной конфигурации заимствовать объекты не получится.

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

Создание расширения конфигурации: пошагово

Шаг 1. Откройте список расширений

Меню Конфигурация → Расширения конфигурации. Откроется окно со списком расширений базы. В новой базе оно пустое.

Шаг 2. Добавьте новое расширение

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

Шаг 3. Откройте дерево расширения

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

Корневой элемент дерева — само расширение. Двойной щелчок по нему открывает свойства, которые можно поменять в любой момент.

Шаг 4. Сохраните пустой каркас

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

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

Свойства расширения: назначение, префикс, безопасный режим

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

СвойствоЧто задаётЧто поставить
ИмяВнутреннее имя расширенияЛатиница или кириллица без пробелов, по смыслу задачи: Расш_КонтрольМенеджера
СинонимНазвание в списке расширений у пользователейПонятное: «Контроль ответственного менеджера»
ПрефиксНачало имён новых объектов, реквизитов и методовКороткий и уникальный: км_. По умолчанию платформа подставляет Расш1_
НазначениеТип расширенияИсправление, Адаптация или Дополнение
Безопасный режимОграничение опасных операций в кодеВключён, если коду не нужен доступ к файлам, COM и внешним компонентам
ВерсияНомер сборки расширенияЗаполняйте и увеличивайте при каждой выдаче в работу

Какое назначение выбрать

  • 🩹 Исправление — точечная правка ошибки типовой конфигурации до выхода исправленного релиза. Такое расширение задумано как временное.
  • 🔧 Адаптация — подгонка решения под процессы компании: новые реквизиты, правки форм, дополнительные проверки. Самый частый вариант.
  • ➕ Дополнение — новая функциональность поверх типовой: свои справочники, документы, отчёты.

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

Зачем нужен префикс

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

Префикс меняйте до того, как появились объекты. Переименовывать потом придётся вручную, вместе со всеми ссылками в коде.

Заимствование объектов и новые реквизиты

Расширение может менять только то, что в него «взято». Это и есть заимствование.

Как заимствовать объект

  1. В дереве основной конфигурации найдите объект, например справочник Контрагенты.
  2. Щёлкните правой кнопкой и выберите Добавить в расширение. Если расширений несколько, платформа спросит, в какое.
  3. Объект появится в дереве расширения со специальным значком. Это не копия, а ссылка на объект основной конфигурации.

Вместе с объектом заимствуется только то, что вы выбрали. Форму, модуль объекта или макет заимствуют отдельно, той же командой на нужном элементе.

Контролируемые свойства

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

Новый реквизит в типовом справочнике

  1. Заимствуйте справочник Контрагенты.
  2. В дереве расширения раскройте его, на ветке Реквизиты выберите Добавить.
  3. Задайте имя с префиксом: км_ОтветственныйМенеджер, тип — СправочникСсылка.Пользователи. Справочник Пользователи для этого тоже придётся заимствовать: тип ссылается на объект основной конфигурации.
  4. Обновите конфигурацию базы данных.

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

Свои объекты в расширении

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

Удаление расширения со своими объектами и реквизитами удаляет и их данные. Перед удалением или пересозданием такого расширения сделайте резервную копию базы.

Доработка форм в расширении

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

Как добавить поле на форму

  1. В основной конфигурации раскройте справочник Контрагенты → Формы, щёлкните правой кнопкой по ФормаЭлемента и выберите Добавить в расширение.
  2. Откройте заимствованную форму в дереве расширения. Откроется редактор форм с полным составом элементов типовой формы.
  3. На вкладке Реквизиты раскройте Объект: там уже есть ваш км_ОтветственныйМенеджер.
  4. Перетащите реквизит в нужную группу дерева элементов. Задайте заголовок, если синоним реквизита не подходит.

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

Команды и обработчики формы

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

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

Код расширения: аннотации методов и подписки на события

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

АннотацияКогда срабатываетРиск
&Перед("Метод")До типового методаНизкий: типовой код выполнится в любом случае
&После("Метод")После типового методаНизкий
&Вместо("Метод")Вместо типового методаВысокий: изменения поставщика в этом методе вы не получите
&ИзменениеИКонтроль("Метод")Копия метода с вашими вставками и удалениямиСредний: если поставщик изменит метод, расширение не применится и это будет видно сразу

Пример: проверка перед записью справочника

Заимствуйте модуль объекта справочника Контрагенты, откройте его в расширении и добавьте:

&Перед("ПередЗаписью")
Процедура км_ПередЗаписью(Отказ)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(км_ОтветственныйМенеджер) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Укажите ответственного менеджера контрагента.";
        Сообщение.Поле = "км_ОтветственныйМенеджер";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;

КонецПроцедуры

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

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

Аннотация &ИзменениеИКонтроль

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

&ИзменениеИКонтроль("ЗаполнитьПоОснованию")
Процедура км_ЗаполнитьПоОснованию(Основание)
    // ... типовой код без изменений ...
    #Вставка
    км_ЗаполнитьОтветственного(Основание);
    #КонецВставки
    #Удаление
    // строка типового кода, которую нужно убрать
    #КонецУдаления
КонецПроцедуры

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

Подписки на события в расширении

Когда одну и ту же проверку нужно выполнить для нескольких документов, удобнее подписка на событие:

  1. В дереве расширения добавьте общий модуль км_ПроверкиДокументов, включите флажок Сервер.
  2. В ветке Общие → Подписки на события добавьте подписку. В свойстве Источник отметьте объекты документов. Документы для этого должны быть заимствованы в расширение.
  3. Событие — ПередЗаписью, обработчик — процедура общего модуля:
Процедура км_ПроверкаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    // общая проверка для всех документов-источников
КонецПроцедуры

Права и роли для объектов расширения

Новые объекты и реквизиты расширения без прав пользователи не увидят. Администратор в Конфигураторе всё видит и проверяет, а бухгалтер открывает форму — поля нет. Это самая частая причина вопроса «расширение не работает ».

Что сделать:

  • 👤 Создайте свою роль в расширении (км_ОсновныеПрава) и дайте в ней права на новые объекты: чтение, добавление, изменение — по задаче.
  • 🧷 Для новых реквизитов заимствованных объектов права выставляют в заимствованной роли. Заимствуйте, например, роль, через которую пользователи работают со справочником, и отметьте права на ваш реквизит.
  • 🧑‍💼 Назначьте роль пользователям. В типовых конфигурациях на БСП роли раздают через профили групп доступа: Администрирование → Пользователи и права → Профили групп доступа. Новая роль расширения появится в составе профиля, её нужно отметить.

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

Сохранение, установка, обновление и удаление расширения

Сохранение в файл

В окне расширения: Конфигурация → Сохранить конфигурацию в файл. Получится файл с расширением .cfe. Это и есть поставка, которую переносят в рабочую базу.

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

Перед установкой в рабочую базу
Выполнено: 0 / 6

Установка в рабочую базу

Есть два пути.

Через Конфигуратор. Конфигурация → Расширения конфигурации → Добавить, затем в окне расширения загрузите конфигурацию из файла .cfe и отдельно выполните обновление конфигурации базы данных. Загрузка файла и обновление — два разных шага: после одной загрузки изменения в базу не попадут.

В режиме 1С:Предприятие. В конфигурациях на БСП: Администрирование → Печатные формы, отчеты и обработки → Расширения. Кнопка Добавить из файла, выбор .cfe, затем при необходимости снимите флажок безопасного режима и перезапустите программу. Этот путь удобен, когда у администратора нет доступа к Конфигуратору.

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

Обновление расширения

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

Что происходит при обновлении типовой конфигурации

После установки нового релиза БП или ЗУП запустите базу и посмотрите, применились ли расширения. Если поставщик изменил заимствованный объект или метод под &ИзменениеИКонтроль, платформа сообщит, какое расширение и почему не применилось. Исправьте расширение на копии и выдайте новую версию.

Отключение и удаление

  • ⏸ Отключить — снимите флажок активности в списке расширений. Данные сохранятся, код и объекты перестанут работать.
  • 🗑 Удалить — команда удаления в списке. Данные собственных объектов и реквизитов расширения будут потеряны. Если данные ещё понадобятся, отключайте, а не удаляйте.

Частые вопросы

Слетает ли поддержка типовой конфигурации, если подключить расширение?
Нет. Основная конфигурация остаётся на поддержке поставщика и обновляется штатно. Расширение хранится отдельно.
Можно ли подключить несколько расширений к одной базе?
Да. Они применяются по порядку: исправления, адаптации, дополнения. Если два расширения перехватывают один метод через &Вместо, сработает только одно — такие пересечения лучше не допускать.
Работают ли расширения в файловой базе?
Да, файловый и клиент-серверный вариант для расширений не различаются. Ограничения задаёт версия платформы и режим совместимости конфигурации.
Почему после установки расширения пользователь не видит новое поле?
Чаще всего у пользователя нет прав на реквизит расширения или он не перезапустил программу. Проверьте роль в профиле группы доступа и перезайдите под этим пользователем.
Можно ли превратить расширение в часть основной конфигурации?
Можно перенести доработки вручную, но тогда конфигурация будет снята с поддержки или переведена в режим с возможностью изменения. Расширения нужны как раз для того, чтобы этого не делать.