Доработка типовой конфигурации 1С: расширения против прямой правки
Содержание
Менять типовую конфигурацию
можно тремя путями, и выбор между ними определяет, насколько тяжело вам будет обновляться потом. Расширение конфигурации
(Конфигурация → Расширения конфигурации) дорабатывает типовую, не трогая её код, — это текущий стандарт. Прямое редактирование требует снять конфигурацию с поддержки через Конфигурация → Поддержка → Настройка поддержки, после чего каждое обновление превращается в ручное сравнение-объединение. Внешние печатные формы и обработки меняют поведение вообще без правки конфигурации.
Ниже — чем отличаются эти способы, как настроить режим совместимости, что происходит при обновлении снятой с поддержки базы и как собрать первое расширение с нуля. Все пути даны для платформы 8.3 с интерфейсом «Такси».
Три способа внести изменения и когда какой брать
Задача почти всегда сводится к одному из трёх: изменить печатную форму , добавить реквизит или команду, поправить логику проведения. Под каждую задачу есть свой инструмент с разной ценой сопровождения.
| Способ | Что меняет | Обновление типовой | Когда брать |
|---|---|---|---|
| Расширение конфигурации | Формы, реквизиты, модули, печатные формы — поверх типовой | Переживает автоматически в большинстве случаев | Почти любая доработка на 8.3 |
| Прямое редактирование | Любой объект конфигурации напрямую | Ручное объединение при каждом релизе | Только если расширение не справляется |
| Внешняя обработка / печатная форма | Поведение без изменения конфигурации | Не зависит от обновлений вовсе | Печатные формы, разовые операции, регламенты |
Логика выбора простая: сначала проверяете, решается ли задача расширением. Если да — делаете расширение. Если расширение технически не вытягивает (а таких случаев всё меньше) — только тогда снимаете конфигурацию с поддержки.
Отдельно стоят внешние печатные формы и обработки. Они подключаются в пользовательском режиме через Администрирование → Печатные формы, отчёты и обработки (в типовых конфигурациях на БСП) и вообще не требуют открывать Конфигуратор для подключения. Минус — они не могут менять логику типовых документов, только добавлять свою печать, заполнение или регламентную операцию. Для печатных форм это чаще всего и нужно.
Администрирование → Печатные формы, отчёты и обработки. Конфигурацию не трогаем.Прямое редактирование и его настоящая цена
Чтобы править объекты типовой напрямую, конфигурацию снимают с поддержки. Открываете Конфигурация → Поддержка → Настройка поддержки, нажимаете «Включить возможность изменения» и в диалоге разрешаете изменение объектов поставщика.
После этого замок (пиктограмма в виде снежинки) рядом с объектами меняется: жёлтый замок — объект на поддержке без права изменения, снятый замок — можно менять. Правило простое:
- 🔒 Жёлтый замок — объект поставщика, править нельзя. Обновляется автоматически.
- 🔓 Снятый замок — объект поставщика с правом изменения. Можно менять, но объединение при обновлении — ручное.
- ⚪ Без замка — ваш собственный объект. Поставщик о нём ничего не знает.
Цена прямого редактирования проявляется при обновлении. Пока конфигурация на полной поддержке, обновление «докатывается» одной кнопкой. Как только вы сняли с поддержки хотя бы один объект и изменили его, обновление становится трёхсторонним сравнением: старая версия поставщика, новая версия поставщика и ваша. Конфигуратор показывает окно сравнения-объединения, где по каждому изменённому объекту приходится решать вручную, чьи правки оставить.
Чем больше объектов снято с поддержки и изменено, тем дольше каждое обновление. На крупной доработке один релиз — это часы работы специалиста вместо пяти минут.
Есть и промежуточный режим — частичная поддержка. В настройке поддержки по каждому объекту можно оставить «полную поддержку» (меняться будет только поставщиком) или разрешить изменение с сохранением поддержки — тогда объект сравнивается при обновлении, но вы помните, что он на поддержке. Это лучше сплошного снятия: обновление видит меньше ручных конфликтов.
Перед первым снятием с поддержки сделайте выгрузку информационной базы в файл .dt (Администрирование → Выгрузить информационную базу). Откатить снятие с поддержки штатными средствами нельзя — только восстановлением из копии.
Расширения конфигурации — доработка, которую переживает обновление
Расширение — это отдельная мини-конфигурация, которая накладывается на основную в момент запуска. Типовая остаётся на полной поддержке и обновляется как обычно, а ваши изменения живут в отдельном файле .cfe.
Механизм построен на заимствовании. Вы берёте объект основной конфигурации (документ, справочник, общий модуль, форму) и добавляете его в расширение. В расширении появляется копия, которую можно дорабатывать: добавлять реквизиты, команды, обработчики событий, менять расположение элементов на форме.
Что умеет расширение:
- добавлять реквизиты и табличные части к типовым объектам;
- добавлять команды, кнопки и собственные формы;
- переопределять и дополнять процедуры через аннотации
&Перед,&После,&Вместо; - добавлять собственные справочники, документы, регистры, отчёты;
- менять расположение элементов на заимствованной форме.
Вклиниться в чужой код позволяют аннотации перед процедурами заимствованного модуля:
&Перед("ИмяПроцедуры")— ваш код выполняется до типовой процедуры. Удобно, когда нужно подготовить данные или проверить условие.&После("ИмяПроцедуры")— ваш код идёт после типовой. Самый безопасный вариант: типовая логика отработала, вы добавили своё.&Вместо("ИмяПроцедуры")— типовая процедура не вызывается вообще, выполняется только ваша. Внутри можно вызвать исходную черезПродолжитьВызов(...). Это самый рискованный способ: при обновлении типовой ваша замена не узнает об изменениях в оригинале.
Правило простое: &После — по умолчанию, &Перед — когда нужно вмешаться заранее, &Вместо — только если без полной замены не обойтись.
Главное ограничение по смыслу: расширение дополняет типовую, а не переписывает её структуру целиком. Для подавляющего большинства задач — добавить поле, повесить свою печатную форму, вклиниться в проведение — этого достаточно.
Расширения появились в платформе 8.3.6. Если база работает на более раннем номере платформы — механизм недоступен, сначала обновляют платформу.
Режим совместимости и технические ограничения
Режим совместимости — свойство конфигурации, которое говорит платформе, по правилам какой версии исполнять код. Открывается в свойствах корня конфигурации (правой кнопкой по имени конфигурации вверху дерева → «Свойства» → «Режим совместимости»).
Для расширений это свойство критично. Действует правило: режим совместимости расширения не должен быть выше, чем у основной конфигурации. Если основная конфигурация работает в режиме «Версия 8.3.21», а расширение вы собрали с более новым режимом, расширение просто не подключится — платформа откажется его загружать.
Поэтому при создании расширения режим совместимости выставляют равным режиму основной конфигурации или ниже. Посмотреть режим типовой можно там же — в свойствах её корня.
Технические ограничения, о которых стоит знать заранее:
- не все объекты доступны для заимствования — часть служебных объектов платформа не отдаёт;
- глубокое изменение структуры метаданных (например, смена типа у существующего реквизита поставщика) расширением не делается;
- несколько расширений на одной базе выполняются в порядке, который задаётся их свойствами, — при конфликте методов важно, какое подключается первым.
Если задача упирается в эти ограничения — это и есть тот редкий случай, когда оправдано прямое редактирование.
Как создать расширение: пошагово
Соберём расширение с нуля. Предварительно откройте конфигурацию (Конфигурация → Открыть конфигурацию) и убедитесь, что знаете режим совместимости основной конфигурации.
- Откройте
Конфигурация → Расширения конфигурации. Появится список расширений (пустой на старте). - Нажмите «Добавить». В окне задайте имя (латиницей, без пробелов, например
Dorabotki), синоним (человекочитаемое название) и префикс — короткий набор символов, который платформа подставит ко всем вашим объектам, чтобы они не конфликтовали с типовыми. - Выберите назначение расширения: «Исправление», «Адаптация» или «Дополнение». Назначение влияет на порядок подключения и на поведение при обновлении типовой. Для обычной доработки берут «Адаптация».
- Откройте конфигурацию расширения (кнопка «Открыть конфигурацию расширения» в том же окне). Дерево будет пустым.
- Заимствуйте нужный объект: переключитесь на основную конфигурацию, найдите объект (например, документ «Реализация товаров и услуг»), правой кнопкой → «Добавить в расширение». Копия появится в дереве расширения.
- Дорабатывайте заимствованную копию: добавьте реквизит, команду, измените форму, напишите обработчик с аннотацией
&Послеили&Вместо. - Проверьте режим совместимости расширения (свойства корня расширения) — он не должен быть выше основного.
- Обновите конфигурацию базы данных:
Конфигурация → Обновить конфигурацию базы данных(F7). Расширение подключится и начнёт действовать.
Готовое расширение можно сохранить в файл .cfe (Конфигурация → Сохранить конфигурацию расширения в файл) и загрузить в другую базу через Загрузить конфигурацию расширения из файла. После загрузки .cfe обязательно выполните «Обновить конфигурацию базы данных» — это отдельный шаг, без него изменения не вступят в силу.
Как перевести старые доработки из прямой правки в расширение
Если база уже снята с поддержки и обросла правками, перевод на расширения разгружает будущие обновления. Делается это поэтапно и обязательно на копии.
Порядок перевода:
- Снимите копию рабочей базы и разворачивайте миграцию только на ней.
- Соберите список изменённых объектов: в окне
Настройка поддержкивидны объекты со снятым замком — это ваши правки. - Для каждой доработки проверьте, воспроизводится ли она расширением. Добавленные реквизиты, команды, вставки в процедуры через
&После/&Вместо— переносятся. Глубокая перекройка структуры — редко. - Создайте расширение и перенесите в него то, что переносится.
- Верните переносимые объекты основной конфигурации на поддержку: там же, в настройке поддержки, установите по ним полную поддержку обратно.
- Сравните поведение рабочей базы и копии с расширением — отчёты, проведение, печатные формы.
- Только убедившись в совпадении, переносите расширение в рабочую базу.
Полностью вернуть базу на поддержку удаётся не всегда — что-то может остаться в прямой правке. Это нормально: цель миграции не идеал, а сокращение ручного объединения при каждом релизе.
Частые ошибки при доработке 1С
Ошибки здесь стоят дорого — либо не подключается расширение, либо рушится обновление.
- Снятие с поддержки «на всякий случай». Сняли всю конфигурацию, ничего не поменяли — и уже получили ручное объединение при обновлениях. Снимайте только то, что реально правите, и только когда расширение не справилось.
- Режим совместимости расширения выше основного. Расширение не подключается без внятной ошибки в пользовательском режиме. Проверяйте режим в свойствах корня.
- Пустой или совпадающий префикс. Без префикса объекты расширения конфликтуют с типовыми и между расширениями. Префикс задают сразу при создании.
- Правка на рабочей базе без копии. Любая доработка сначала проверяется на копии. Откат снятия с поддержки — только из .dt.
- Забыли «Обновить конфигурацию базы данных» после загрузки .cfe. Загрузка файла и обновление структуры БД — два разных действия; без второго изменения не видны.
- Доработка через прямую правку там, где хватило бы расширения. Самая частая стратегическая ошибка — она копит долг сопровождения на годы вперёд.