Доработка типовой конфигурации 1С: расширения против прямой правки

· 9 мин

Содержание

Менять типовую конфигурацию можно тремя путями, и выбор между ними определяет, насколько тяжело вам будет обновляться потом. Расширение конфигурации (Конфигурация → Расширения конфигурации) дорабатывает типовую, не трогая её код, — это текущий стандарт. Прямое редактирование требует снять конфигурацию с поддержки через Конфигурация → Поддержка → Настройка поддержки, после чего каждое обновление превращается в ручное сравнение-объединение. Внешние печатные формы и обработки меняют поведение вообще без правки конфигурации.

Ниже — чем отличаются эти способы, как настроить режим совместимости, что происходит при обновлении снятой с поддержки базы и как собрать первое расширение с нуля. Все пути даны для платформы 8.3 с интерфейсом «Такси».

Три способа внести изменения и когда какой брать

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

СпособЧто меняетОбновление типовойКогда брать
Расширение конфигурацииФормы, реквизиты, модули, печатные формы — поверх типовойПереживает автоматически в большинстве случаевПочти любая доработка на 8.3
Прямое редактированиеЛюбой объект конфигурации напрямуюРучное объединение при каждом релизеТолько если расширение не справляется
Внешняя обработка / печатная формаПоведение без изменения конфигурацииНе зависит от обновлений вовсеПечатные формы, разовые операции, регламенты

Логика выбора простая: сначала проверяете, решается ли задача расширением. Если да — делаете расширение. Если расширение технически не вытягивает (а таких случаев всё меньше) — только тогда снимаете конфигурацию с поддержки.

Отдельно стоят внешние печатные формы и обработки. Они подключаются в пользовательском режиме через Администрирование → Печатные формы, отчёты и обработки (в типовых конфигурациях на БСП) и вообще не требуют открывать Конфигуратор для подключения. Минус — они не могут менять логику типовых документов, только добавлять свою печать, заполнение или регламентную операцию. Для печатных форм это чаще всего и нужно.

Какой способ доработки выбрать?

Прямое редактирование и его настоящая цена

Чтобы править объекты типовой напрямую, конфигурацию снимают с поддержки. Открываете Конфигурация → Поддержка → Настройка поддержки, нажимаете «Включить возможность изменения» и в диалоге разрешаете изменение объектов поставщика.

После этого замок (пиктограмма в виде снежинки) рядом с объектами меняется: жёлтый замок — объект на поддержке без права изменения, снятый замок — можно менять. Правило простое:

  • 🔒 Жёлтый замок — объект поставщика, править нельзя. Обновляется автоматически.
  • 🔓 Снятый замок — объект поставщика с правом изменения. Можно менять, но объединение при обновлении — ручное.
  • ⚪ Без замка — ваш собственный объект. Поставщик о нём ничего не знает.

Цена прямого редактирования проявляется при обновлении. Пока конфигурация на полной поддержке, обновление «докатывается» одной кнопкой. Как только вы сняли с поддержки хотя бы один объект и изменили его, обновление становится трёхсторонним сравнением: старая версия поставщика, новая версия поставщика и ваша. Конфигуратор показывает окно сравнения-объединения, где по каждому изменённому объекту приходится решать вручную, чьи правки оставить.

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

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

Перед первым снятием с поддержки сделайте выгрузку информационной базы в файл .dt (Администрирование → Выгрузить информационную базу). Откатить снятие с поддержки штатными средствами нельзя — только восстановлением из копии.

Расширения конфигурации — доработка, которую переживает обновление

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

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

Что умеет расширение:

  • добавлять реквизиты и табличные части к типовым объектам;
  • добавлять команды, кнопки и собственные формы;
  • переопределять и дополнять процедуры через аннотации &Перед, &После, &Вместо;
  • добавлять собственные справочники, документы, регистры, отчёты;
  • менять расположение элементов на заимствованной форме.

Вклиниться в чужой код позволяют аннотации перед процедурами заимствованного модуля:

  • &Перед("ИмяПроцедуры") — ваш код выполняется до типовой процедуры. Удобно, когда нужно подготовить данные или проверить условие.
  • &После("ИмяПроцедуры") — ваш код идёт после типовой. Самый безопасный вариант: типовая логика отработала, вы добавили своё.
  • &Вместо("ИмяПроцедуры") — типовая процедура не вызывается вообще, выполняется только ваша. Внутри можно вызвать исходную через ПродолжитьВызов(...). Это самый рискованный способ: при обновлении типовой ваша замена не узнает об изменениях в оригинале.

Правило простое: &После — по умолчанию, &Перед — когда нужно вмешаться заранее, &Вместо — только если без полной замены не обойтись.

Главное ограничение по смыслу: расширение дополняет типовую, а не переписывает её структуру целиком. Для подавляющего большинства задач — добавить поле, повесить свою печатную форму, вклиниться в проведение — этого достаточно.

Расширения появились в платформе 8.3.6. Если база работает на более раннем номере платформы — механизм недоступен, сначала обновляют платформу.

Режим совместимости и технические ограничения

Режим совместимости — свойство конфигурации, которое говорит платформе, по правилам какой версии исполнять код. Открывается в свойствах корня конфигурации (правой кнопкой по имени конфигурации вверху дерева → «Свойства» → «Режим совместимости»).

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

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

Технические ограничения, о которых стоит знать заранее:

  • не все объекты доступны для заимствования — часть служебных объектов платформа не отдаёт;
  • глубокое изменение структуры метаданных (например, смена типа у существующего реквизита поставщика) расширением не делается;
  • несколько расширений на одной базе выполняются в порядке, который задаётся их свойствами, — при конфликте методов важно, какое подключается первым.

Если задача упирается в эти ограничения — это и есть тот редкий случай, когда оправдано прямое редактирование.

Как создать расширение: пошагово

Соберём расширение с нуля. Предварительно откройте конфигурацию (Конфигурация → Открыть конфигурацию) и убедитесь, что знаете режим совместимости основной конфигурации.

  1. Откройте Конфигурация → Расширения конфигурации. Появится список расширений (пустой на старте).
  2. Нажмите «Добавить». В окне задайте имя (латиницей, без пробелов, например Dorabotki), синоним (человекочитаемое название) и префикс — короткий набор символов, который платформа подставит ко всем вашим объектам, чтобы они не конфликтовали с типовыми.
  3. Выберите назначение расширения: «Исправление», «Адаптация» или «Дополнение». Назначение влияет на порядок подключения и на поведение при обновлении типовой. Для обычной доработки берут «Адаптация».
  4. Откройте конфигурацию расширения (кнопка «Открыть конфигурацию расширения» в том же окне). Дерево будет пустым.
  5. Заимствуйте нужный объект: переключитесь на основную конфигурацию, найдите объект (например, документ «Реализация товаров и услуг»), правой кнопкой → «Добавить в расширение». Копия появится в дереве расширения.
  6. Дорабатывайте заимствованную копию: добавьте реквизит, команду, измените форму, напишите обработчик с аннотацией &После или &Вместо.
  7. Проверьте режим совместимости расширения (свойства корня расширения) — он не должен быть выше основного.
  8. Обновите конфигурацию базы данных: Конфигурация → Обновить конфигурацию базы данных (F7). Расширение подключится и начнёт действовать.
Перед выпуском расширения в рабочую базу
Выполнено: 0 / 5

Готовое расширение можно сохранить в файл .cfe (Конфигурация → Сохранить конфигурацию расширения в файл) и загрузить в другую базу через Загрузить конфигурацию расширения из файла. После загрузки .cfe обязательно выполните «Обновить конфигурацию базы данных» — это отдельный шаг, без него изменения не вступят в силу.

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

Если база уже снята с поддержки и обросла правками, перевод на расширения разгружает будущие обновления. Делается это поэтапно и обязательно на копии.

Порядок перевода:

  1. Снимите копию рабочей базы и разворачивайте миграцию только на ней.
  2. Соберите список изменённых объектов: в окне Настройка поддержки видны объекты со снятым замком — это ваши правки.
  3. Для каждой доработки проверьте, воспроизводится ли она расширением. Добавленные реквизиты, команды, вставки в процедуры через &После/&Вместо — переносятся. Глубокая перекройка структуры — редко.
  4. Создайте расширение и перенесите в него то, что переносится.
  5. Верните переносимые объекты основной конфигурации на поддержку: там же, в настройке поддержки, установите по ним полную поддержку обратно.
  6. Сравните поведение рабочей базы и копии с расширением — отчёты, проведение, печатные формы.
  7. Только убедившись в совпадении, переносите расширение в рабочую базу.

Полностью вернуть базу на поддержку удаётся не всегда — что-то может остаться в прямой правке. Это нормально: цель миграции не идеал, а сокращение ручного объединения при каждом релизе.

Частые ошибки при доработке 1С

Ошибки здесь стоят дорого — либо не подключается расширение, либо рушится обновление.

  • Снятие с поддержки «на всякий случай». Сняли всю конфигурацию, ничего не поменяли — и уже получили ручное объединение при обновлениях. Снимайте только то, что реально правите, и только когда расширение не справилось.
  • Режим совместимости расширения выше основного. Расширение не подключается без внятной ошибки в пользовательском режиме. Проверяйте режим в свойствах корня.
  • Пустой или совпадающий префикс. Без префикса объекты расширения конфликтуют с типовыми и между расширениями. Префикс задают сразу при создании.
  • Правка на рабочей базе без копии. Любая доработка сначала проверяется на копии. Откат снятия с поддержки — только из .dt.
  • Забыли «Обновить конфигурацию базы данных» после загрузки .cfe. Загрузка файла и обновление структуры БД — два разных действия; без второго изменения не видны.
  • Доработка через прямую правку там, где хватило бы расширения. Самая частая стратегическая ошибка — она копит долг сопровождения на годы вперёд.

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

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