Доработка типовой 1С без снятия с поддержки: своё расширение с нуля
Содержание
Расширение конфигурации
1С создают в Конфигураторе: Конфигурация → Расширения конфигурации → Добавить. Задаёте имя, префикс и назначение, открываете дерево расширения, заимствуете нужные объекты типовой и дорабатываете их. Основная конфигурация при этом остаётся на поддержке, обновления ставятся штатно.
Частое заблуждение — «расширение можно сделать только программисту в отдельной базе». Создать расширение конфигурации может любой пользователь с правами администратора, а механизм работает на платформе 8.3 начиная с версии 8.3.6. Тонкость в другом: чем больше вы заимствуете и переопределяете, тем больше работы после каждого обновления типовой. Поэтому дорабатывать надо точечно.
Что подготовить перед созданием расширения
Расширение — отдельный слой поверх типовой. Платформа применяет его при запуске базы, а в основной конфигурации ничего не меняется. Но экспериментировать сразу на рабочей базе не стоит.
Перед стартом проверьте:
- 🗂️ Копия базы. Разрабатывайте на копии: выгрузка
Администрирование → Выгрузить информационную базув Конфигураторе или копия файлового каталога базы. Готовое расширение потом переносится файлом.cfe. - 🔑 Права. У пользователя должна быть роль «Полные права» или право администрирования. Иначе пункт расширений в Конфигураторе будет недоступен для изменения.
- 🧩 Версия платформы. Номер не ниже 8.3.6 — сами расширения. Аннотация
&ИзменениеИКонтрольпоявилась позже, в 8.3.11. Если база работает в режиме совместимости со старой версией, часть возможностей будет закрыта. - 📌 Задача сформулирована. «Добавить поле „Ответственный склад“ в реализацию и выводить его в печатную форму» — это задача. «Доработать документ» — нет. От формулировки зависит, какие объекты заимствовать.
Какое назначение выбрать
У каждого расширения есть свойство «Назначение». От него зависит порядок применения, если расширений несколько.
| Назначение | Для чего | Применяется |
|---|---|---|
| Исправление | Срочная правка ошибки типовой до выхода релиза | Первым |
| Адаптация | Подгонка типовой под свой учёт: поля, формы, проверки | Вторым |
| Дополнение | Новая функциональность: свои справочники, отчёты, обработки | Последним |
Для большинства доработок у бухгалтерии подходит «Адаптация». Это же назначение платформа предлагает по умолчанию.
Создание расширения конфигурации в Конфигураторе по шагам
Шаг 1. Откройте список расширений
Запустите базу в режиме «Конфигуратор» и откройте основную конфигурацию: Конфигурация → Открыть конфигурацию. Затем выберите Конфигурация → Расширения конфигурации. Откроется окно со списком — в чистой типовой оно пустое или содержит расширения, загруженные пользователями.
Шаг 2. Добавьте новое расширение
Нажмите «Добавить». Платформа создаст расширение и откроет его свойства:
- Имя — латиница или кириллица без пробелов, например
ДоработкиСклада. - Синоним — то, что увидят пользователи в списке расширений.
- Префикс — по умолчанию
Расш1_. Замените на осмысленный:Скл_. Префикс добавляется к именам всех новых объектов, реквизитов и процедур. Так ваши имена не столкнутся с будущими объектами типовой. - Назначение — см. таблицу выше.
- Режим совместимости — платформа подставляет значение основной конфигурации. Менять его без причины не нужно.
Префикс задайте сразу. После того как вы добавите десяток реквизитов и процедур, переименовывать всё вручную долго.
Шаг 3. Откройте дерево расширения
Двойной щелчок по расширению в списке открывает его дерево метаданных. Оно выглядит как обычное дерево конфигурации, но почти пустое: только корень и Общие → Языки. Всё остальное появится по мере заимствования.
Шаг 4. Сохраните пустое расширение
Нажмите «Обновить конфигурацию
базы данных» (F7), когда активно окно расширения. Так вы убедитесь, что расширение записалось в базу и применяется без ошибок. Дальше обновляйте после каждого законченного куска работы, а не после каждой строчки.
Как добавить реквизит и изменить форму через расширение
Расширение не может менять объект типовой, которого «не знает». Сначала объект нужно заимствовать.
Заимствование объекта
- В дереве основной конфигурации найдите объект, например документ
РеализацияТоваровУслуг. - Щёлкните по нему правой кнопкой и выберите «Добавить в расширение».
- Если расширений несколько, укажите нужное.
В дереве расширения появится этот документ с пометкой заимствования. Вместе с ним платформа заберёт то, без чего объект не работает , — например, типы реквизитов.
Новый реквизит в заимствованном документе
Откройте заимствованный документ в дереве расширения и добавьте реквизит на закладке «Данные». Имя получится с префиксом: Скл_ОтветственныйСклад. Тип задайте как обычно — например, СправочникСсылка.Склады. Справочник складов для этого тоже придётся заимствовать.
Данные такого реквизита хранятся отдельно от таблиц основной конфигурации. Отсюда важное следствие:
При удалении расширения, которое добавило реквизиты, удаляются и данные этих реквизитов. Если нужно временно выключить доработку, снимите флажок «Активно», а не удаляйте расширение.
Изменение формы
Реквизит в документе ещё не виден пользователю — его нужно вывести на форму:
- В основной конфигурации раскройте документ → «Формы», найдите форму документа (обычно
ФормаДокумента). - Правой кнопкой → «Добавить в расширение».
- Откройте заимствованную форму в расширении. В редакторе вы увидите все элементы типовой формы.
- Перетащите новый реквизит из списка реквизитов объекта в дерево элементов — например, в группу шапки рядом со складом.
F7и запуск в режиме «1С:Предприятие» для проверки.
Расширение хранит не копию формы, а только отличия от неё. Поэтому если в следующем релизе типовая форма изменится, ваше поле, как правило, просто встанет на своё место в обновлённой форме.
Код в расширении: аннотации и обработчики
Самое мощное в механизме — возможность вмешаться в процедуры типовой, не трогая её модули. Для этого служат аннотации.
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед("Имя") | Ваш код выполняется до типового | Дополнительные проверки, заполнение полей |
&После("Имя") | Ваш код выполняется после типового | Донастройка результата, дописать данные |
&Вместо("Имя") | Ваш код заменяет типовой | Полная замена логики; типовой можно вызвать через ПродолжитьВызов() |
&ИзменениеИКонтроль("Имя") | Копия типовой процедуры с вставками #Вставка и #Удаление | Правка в середине процедуры |
Быстрее всего создать обработчик так: откройте модуль в основной конфигурации, встаньте курсором в нужную процедуру, правой кнопкой → «Добавить в расширение» и выберите тип аннотации. Платформа сама заимствует модуль и создаст заготовку с правильными параметрами.
Пример: проверка перед проведением
Задача: не давать провести реализацию без заполненного нового поля. В модуле объекта документа типовой есть процедура ПередЗаписью. Расширяем её аннотацией &Перед:
&Перед("ПередЗаписью")
Процедура Скл_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если РежимЗаписи = РежимЗаписиДокумента.Проведение
И Не ЗначениеЗаполнено(Скл_ОтветственныйСклад) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Укажите ответственный склад перед проведением.";
Сообщение.Поле = "Скл_ОтветственныйСклад";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Параметры процедуры должны совпадать с параметрами типовой. Если заготовку создала платформа, это уже так.
Почему &ИзменениеИКонтроль лучше, чем &Вместо
С &Вместо вы полностью переписываете процедуру. Когда 1С в новом релизе исправит в ней ошибку, вы об этом не узнаете — ваша старая копия продолжит работать.
&ИзменениеИКонтроль хранит текст типовой процедуры. Если после обновления он перестал совпадать, расширение не применится, а платформа покажет, что изменилось. Вы осознанно переносите свою вставку в новую версию. Поэтому для правок в середине типовой процедуры берите именно эту аннотацию.
Комментируйте вставки: что, зачем, по чьей заявке. Через год это сэкономит разбор чужого кода — даже если чужой код ваш.
Выгрузка .cfe и подключение расширения в рабочей базе
Когда доработка проверена на копии, её переносят в рабочую базу файлом.
Выгрузка из Конфигуратора
В окне Конфигурация → Расширения конфигурации выделите расширение и в меню «Конфигурация» этого окна выберите «Сохранить в файл…». Получится файл с расширением .cfe.
Загрузка в рабочую базу: два способа
| Способ | Где | Особенности |
|---|---|---|
| Через Конфигуратор | Конфигурация → Расширения конфигурации → «Конфигурация» → «Загрузить из файла…», затем F7 | Загрузка файла и обновление конфигурации базы данных — два отдельных шага |
| Из режима «1С:Предприятие» | В типовых на БСП: Администрирование → Печатные формы, отчеты и обработки → Расширения | Без Конфигуратора; расширение применится при следующем запуске сеанса |
В списке расширений в режиме «1С:Предприятие» есть флажки, на которые стоит посмотреть сразу после загрузки:
- ✅ Активно — включает и выключает расширение без удаления.
- 🛡️ Безопасный режим — код расширения работает с ограничениями: без доступа к файлам, внешним компонентам и привилегированным операциям. Для простых доработок форм и проверок этого достаточно. Снимайте флажок, только если доработке действительно нужен такой доступ и вы доверяете источнику.
- ⚠️ Защита от опасных действий — предупреждает пользователя, если код пытается выполнить потенциально опасную операцию.
Если расширение добавляет реквизиты или объекты с данными, его загрузка меняет структуру хранения. Ставьте такие расширения, когда в базе нет активной работы, и предупредите пользователей: им нужно будет перезайти.
Обновление типовой, когда к ней подключены расширения
Ради этого расширения и придуманы: основная конфигурация остаётся на поддержке, обновление ставится обычным способом. Но проверить совместимость после обновления всё равно нужно.
Что может пойти не так:
- 🔄 1С переименовала или удалила заимствованный объект, реквизит или форму.
- 📝 Изменился текст процедуры, перехваченной через
&ИзменениеИКонтроль. - 🧾 Поменялись параметры процедуры, к которой привязаны
&Передили&После. - 🏷️ В типовой появился объект с тем же именем, что у вашего, — от этого защищает префикс.
Порядок проверки простой: обновите копию базы, откройте расширение в Конфигураторе, запустите синтаксический контроль модулей и затем режим «1С:Предприятие». Расширение, которое не может быть применено, платформа отключает при запуске и показывает сообщение с причиной.
Ограничения механизма и типичные ошибки
Расширения закрывают большинство доработок, но не все. Учитывайте границы заранее.
Что расширение не умеет или умеет с оговорками:
- 🚫 Удалить объект или реквизит типовой. Скрыть с формы — можно, удалить из структуры — нет.
- 🚫 Поменять тип существующего реквизита основной конфигурации.
- ⚠️ Работать на старых режимах совместимости: часть возможностей привязана к версии платформы.
- ⚠️ Переживать тяжёлые обновления без правок, если заимствовано пол-конфигурации.
Ошибки, которые чаще всего приходится разбирать:
- Заимствовали «на всякий случай». Каждый лишний заимствованный объект — точка, где расширение может сломаться при обновлении. Заимствуйте только то, что реально меняете или используете.
- Оставили префикс
Расш1_у трёх разных расширений. Имена начинают пересекаться, разобраться, чья процедура, сложно. - Удалили расширение вместо отключения — и потеряли данные добавленных реквизитов.
- Переписали процедуру через
&Вместоцеликом ради одной строки. После обновления в ней остались старые ошибки типовой. - Загрузили .cfe и забыли про
F7в Конфигураторе. Файл в базе, а изменений нет. - Сняли «Безопасный режим» у расширения из непроверенного источника. Такой код получает доступ к файлам сервера и внешним компонентам.
Частые вопросы
Нужно ли снимать типовую с поддержки ради расширения?
Можно ли создать расширение без Конфигуратора?
Администрирование → Печатные формы, отчеты и обработки → Расширения.