Доработка 1С без снятия с поддержки: собираем расширение от нуля до рабочей базы
Содержание
Расширение конфигурации
создают в Конфигураторе через меню Конфигурация → Расширения конфигурации → Добавить. Дальше в расширение заимствуют нужные объекты основной конфигурации, добавляют свои реквизиты, формы и код, а затем сохраняют изменения и обновляют конфигурацию базы данных. Основная конфигурация при этом остаётся на поддержке поставщика и обновляется как обычно.
Механизм появился в платформе 8.3.6 и с тех пор стал стандартным способом дорабатывать типовые решения: Бухгалтерию 3.0, ЗУП 3.1, УТ 11. Готовое расширение переносят между базами одним файлом .cfe.
Что подготовить до запуска Конфигуратора
Расширение не трогает основную конфигурацию, но код в нём выполняется в той же базе. Ошибка в обработчике записи документа остановит работу бухгалтерии точно так же, как ошибка в типовом модуле. Поэтому разработку ведут на копии.
Что нужно заранее:
- 🗂 Копия рабочей базы. Выгрузите информационную базу в файл
.dtили скопируйте каталог файловой базы и подключите копию отдельной строкой в списке баз. - 🔑 Пользователь с полными правами. Для работы с расширениями в Конфигураторе нужны административные права.
- 🧩 Платформа не ниже 8.3.6. В актуальных версиях платформы возможностей заметно больше: новые реквизиты в заимствованных объектах, собственные справочники и документы, аннотация
&ИзменениеИКонтроль. - 📝 Чёткое ТЗ. Одно расширение — одна задача. «Расширение со всеми доработками» через год превращается в то, от чего расширения и должны были спасти.
Запуск Конфигуратора: в окне запуска 1С выберите копию базы
и нажмите Конфигуратор. Если основная конфигурация ещё не открыта, откройте её командой Конфигурация → Открыть конфигурацию: без дерева основной конфигурации заимствовать объекты не получится.
Режим совместимости основной конфигурации влияет на то, какие возможности доступны в расширении. Если нужной функции нет в меню, сначала посмотрите режим совместимости в свойствах основной конфигурации.
Создание расширения конфигурации: пошагово
Шаг 1. Откройте список расширений
Меню Конфигурация → Расширения конфигурации. Откроется окно со списком расширений базы. В новой базе оно пустое.
Шаг 2. Добавьте новое расширение
Нажмите Добавить. Платформа создаст расширение и откроет окно его свойств. Здесь задают имя, синоним, префикс и назначение — подробнее о них в следующем разделе.
Шаг 3. Откройте дерево расширения
Дважды щёлкните по строке расширения в списке или выделите его и нажмите кнопку открытия конфигурации. Появится отдельное окно с деревом метаданных — такое же, как у основной конфигурации, только почти пустое.
Корневой элемент дерева — само расширение. Двойной щелчок по нему открывает свойства, которые можно поменять в любой момент.
Шаг 4. Сохраните пустой каркас
Сразу после создания сделайте окно расширения активным и обновите конфигурацию базы данных клавишей F7 или командой обновления в меню Конфигурация. Так вы убедитесь, что расширение применяется к базе, ещё до первой строки кода.
Если окно основной конфигурации и окно расширения открыты одновременно, следите, какое из них активно. Команды сохранения и обновления применяются к активному окну.
Свойства расширения: назначение, префикс, безопасный режим
От свойств зависит, что расширение сможет делать и как будут называться его объекты.
| Свойство | Что задаёт | Что поставить |
|---|---|---|
| Имя | Внутреннее имя расширения | Латиница или кириллица без пробелов, по смыслу задачи: Расш_КонтрольМенеджера |
| Синоним | Название в списке расширений у пользователей | Понятное: «Контроль ответственного менеджера» |
| Префикс | Начало имён новых объектов, реквизитов и методов | Короткий и уникальный: км_. По умолчанию платформа подставляет Расш1_ |
| Назначение | Тип расширения | Исправление, Адаптация или Дополнение |
| Безопасный режим | Ограничение опасных операций в коде | Включён, если коду не нужен доступ к файлам, COM и внешним компонентам |
| Версия | Номер сборки расширения | Заполняйте и увеличивайте при каждой выдаче в работу |
Какое назначение выбрать
- 🩹 Исправление — точечная правка ошибки типовой конфигурации до выхода исправленного релиза. Такое расширение задумано как временное.
- 🔧 Адаптация — подгонка решения под процессы компании: новые реквизиты, правки форм, дополнительные проверки. Самый частый вариант.
- ➕ Дополнение — новая функциональность поверх типовой: свои справочники, документы, отчёты.
Назначение определяет порядок применения: при нескольких расширениях первыми идут исправления, затем адаптации, затем дополнения. На доступные в расширении объекты оно влияет мало, но порядок важен, когда два расширения правят один и тот же метод.
Зачем нужен префикс
Каждый новый объект, реквизит и процедура в расширении должны начинаться с префикса. Если поставщик в следующем релизе добавит в справочник реквизит ОтветственныйМенеджер, ваш км_ОтветственныйМенеджер с ним не столкнётся. Если имя без префикса, Конфигуратор выдаст предупреждение при проверке.
Префикс меняйте до того, как появились объекты. Переименовывать потом придётся вручную, вместе со всеми ссылками в коде.
Заимствование объектов и новые реквизиты
Расширение может менять только то, что в него «взято». Это и есть заимствование.
Как заимствовать объект
- В дереве основной конфигурации найдите объект, например справочник
Контрагенты. - Щёлкните правой кнопкой и выберите
Добавить в расширение. Если расширений несколько, платформа спросит, в какое. - Объект появится в дереве расширения со специальным значком. Это не копия, а ссылка на объект основной конфигурации.
Вместе с объектом заимствуется только то, что вы выбрали. Форму, модуль объекта или макет заимствуют отдельно, той же командой на нужном элементе.
Контролируемые свойства
У заимствованного объекта есть свойства, которые расширение «контролирует»: например, тип реквизита, на который опирается ваш код. Если после обновления основной конфигурации такое свойство изменится, расширение не применится, и платформа сообщит, какое свойство разошлось. Это защита от тихих поломок: лучше явная ошибка при запуске, чем неверные данные.
Новый реквизит в типовом справочнике
- Заимствуйте справочник
Контрагенты. - В дереве расширения раскройте его, на ветке
РеквизитывыберитеДобавить. - Задайте имя с префиксом:
км_ОтветственныйМенеджер, тип —СправочникСсылка.Пользователи. СправочникПользователидля этого тоже придётся заимствовать: тип ссылается на объект основной конфигурации. - Обновите конфигурацию базы данных.
Таким же образом добавляют табличные части в заимствованные документы и справочники. Данные новых реквизитов хранятся в базе, пока расширение подключено.
Свои объекты в расширении
В ветках расширения можно создавать новые справочники, документы, регистры, отчёты и обработки. Они работают как обычные объекты конфигурации, только живут внутри расширения.
Удаление расширения со своими объектами и реквизитами удаляет и их данные. Перед удалением или пересозданием такого расширения сделайте резервную копию базы.
Доработка форм в расширении
Типовые формы правят только через заимствование. Свою форму «с нуля» вместо типовой делать не нужно: при каждом обновлении конфигурации её пришлось бы сверять вручную.
Как добавить поле на форму
- В основной конфигурации раскройте справочник
Контрагенты → Формы, щёлкните правой кнопкой поФормаЭлементаи выберитеДобавить в расширение. - Откройте заимствованную форму в дереве расширения. Откроется редактор форм с полным составом элементов типовой формы.
- На вкладке
РеквизитыраскройтеОбъект: там уже есть вашкм_ОтветственныйМенеджер. - Перетащите реквизит в нужную группу дерева элементов. Задайте заголовок, если синоним реквизита не подходит.
Элементы, которые вы добавили, отмечены в редакторе как принадлежащие расширению. Типовые элементы можно скрывать и перемещать, но удалить их нельзя: форма по-прежнему принадлежит поставщику.
Команды и обработчики формы
В заимствованную форму добавляют свои реквизиты формы, команды и кнопки. Для событий типовой формы, например ПриСозданииНаСервере, в палитре свойств формы при назначении обработчика выбирают, когда он сработает: перед типовым, после него или вместо. Платформа сама создаст процедуру с нужной аннотацией в модуле формы расширения.
Для печатных форм заимствуют макет или модуль менеджера с процедурой печати. Править макет прямо в типовой конфигурации больше не нужно: это одна из главных причин, по которым бухгалтерии переходят на расширения.
Код расширения: аннотации методов и подписки на события
Код расширения не заменяет типовой модуль целиком. Вы перехватываете конкретную процедуру или функцию с помощью аннотации над методом.
| Аннотация | Когда срабатывает | Риск |
|---|---|---|
&Перед("Метод") | До типового метода | Низкий: типовой код выполнится в любом случае |
&После("Метод") | После типового метода | Низкий |
&Вместо("Метод") | Вместо типового метода | Высокий: изменения поставщика в этом методе вы не получите |
&ИзменениеИКонтроль("Метод") | Копия метода с вашими вставками и удалениями | Средний: если поставщик изменит метод, расширение не применится и это будет видно сразу |
Пример: проверка перед записью справочника
Заимствуйте модуль объекта справочника Контрагенты, откройте его в расширении и добавьте:
&Перед("ПередЗаписью")
Процедура км_ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(км_ОтветственныйМенеджер) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Укажите ответственного менеджера контрагента.";
Сообщение.Поле = "км_ОтветственныйМенеджер";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Проверка ОбменДанными.Загрузка нужна, чтобы не мешать обменам и загрузке данных: при загрузке пустой реквизит не должен блокировать запись.
Если в типовом модуле обработчика ПередЗаписью нет, аннотация не нужна: объявите обычный обработчик события с префиксом в имени и назначьте его. Для перехвата существующего метода аннотация обязательна, иначе ваш код не вызовется.
Аннотация &ИзменениеИКонтроль
Платформа копирует текст типового метода в расширение. Вы правите копию, обрамляя изменения инструкциями:
&ИзменениеИКонтроль("ЗаполнитьПоОснованию")
Процедура км_ЗаполнитьПоОснованию(Основание)
// ... типовой код без изменений ...
#Вставка
км_ЗаполнитьОтветственного(Основание);
#КонецВставки
#Удаление
// строка типового кода, которую нужно убрать
#КонецУдаления
КонецПроцедуры
Если поставщик в новом релизе поменяет этот метод, расширение перестанет применяться, и вы увидите это при первом запуске, а не через месяц по неверным данным.
Подписки на события в расширении
Когда одну и ту же проверку нужно выполнить для нескольких документов, удобнее подписка на событие:
- В дереве расширения добавьте общий модуль
км_ПроверкиДокументов, включите флажокСервер. - В ветке
Общие → Подписки на событиядобавьте подписку. В свойствеИсточникотметьте объекты документов. Документы для этого должны быть заимствованы в расширение. - Событие —
ПередЗаписью, обработчик — процедура общего модуля:
Процедура км_ПроверкаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// общая проверка для всех документов-источников
КонецПроцедуры
Права и роли для объектов расширения
Новые объекты и реквизиты расширения без прав пользователи не увидят. Администратор в Конфигураторе всё видит и проверяет, а бухгалтер открывает форму — поля нет. Это самая частая причина вопроса «расширение не работает ».
Что сделать:
- 👤 Создайте свою роль в расширении (
км_ОсновныеПрава) и дайте в ней права на новые объекты: чтение, добавление, изменение — по задаче. - 🧷 Для новых реквизитов заимствованных объектов права выставляют в заимствованной роли. Заимствуйте, например, роль, через которую пользователи работают со справочником, и отметьте права на ваш реквизит.
- 🧑💼 Назначьте роль пользователям. В типовых конфигурациях на БСП роли раздают через профили групп доступа:
Администрирование → Пользователи и права → Профили групп доступа. Новая роль расширения появится в составе профиля, её нужно отметить.
Проверяйте результат не под администратором, а под обычным пользователем с рабочим профилем.
Сохранение, установка, обновление и удаление расширения
Сохранение в файл
В окне расширения: Конфигурация → Сохранить конфигурацию в файл. Получится файл с расширением .cfe. Это и есть поставка, которую переносят в рабочую базу.
Перед выдачей увеличьте номер в свойстве Версия. По нему в рабочей базе видно, какая сборка установлена.
Установка в рабочую базу
Есть два пути.
Через Конфигуратор. Конфигурация → Расширения конфигурации → Добавить, затем в окне расширения загрузите конфигурацию из файла .cfe и отдельно выполните обновление конфигурации
базы данных. Загрузка файла и обновление — два разных шага: после одной загрузки изменения в базу не попадут.
В режиме 1С:Предприятие. В конфигурациях на БСП: Администрирование → Печатные формы, отчеты и обработки → Расширения. Кнопка Добавить из файла, выбор .cfe, затем при необходимости снимите флажок безопасного режима и перезапустите программу. Этот путь удобен, когда у администратора нет доступа к Конфигуратору.
Расширение начинает работать у пользователей после перезапуска их сеансов. Ставьте его в нерабочее время или предупредите людей: незаписанные данные в открытых формах при перезапуске потеряются.
Обновление расширения
Загрузите новый .cfe поверх существующего расширения тем же способом: в Конфигураторе — загрузка из файла в окне этого расширения и обновление конфигурации БД, в пользовательском режиме — команда обновления из файла в списке расширений. Данные в реквизитах и объектах расширения сохраняются, если вы не удаляли сами реквизиты.
Что происходит при обновлении типовой конфигурации
После установки нового релиза БП или ЗУП запустите базу и посмотрите, применились ли расширения. Если поставщик изменил заимствованный объект или метод под &ИзменениеИКонтроль, платформа сообщит, какое расширение и почему не применилось. Исправьте расширение на копии и выдайте новую версию.
Отключение и удаление
- ⏸ Отключить — снимите флажок активности в списке расширений. Данные сохранятся, код и объекты перестанут работать.
- 🗑 Удалить — команда удаления в списке. Данные собственных объектов и реквизитов расширения будут потеряны. Если данные ещё понадобятся, отключайте, а не удаляйте.
Частые вопросы
Слетает ли поддержка типовой конфигурации, если подключить расширение?
Можно ли подключить несколько расширений к одной базе?
&Вместо, сработает только одно — такие пересечения лучше не допускать.