Доработка типовой конфигурации 1С так, чтобы она пережила обновления
Содержание
Дорабатывать 1С правильно — значит менять типовую конфигурацию
через расширение (.cfe), а не правкой основной конфигурации, вести изменения в хранилище или Git, проверять всё на копии базы и записывать, что и зачем изменено. Тогда обновление от фирмы-разработчика ставится за час, а не превращается в недельное ручное объединение.
Типичная боль программиста: заказчик просит «одну кнопку», её добавляют прямо в типовой модуль, а через полгода очередной релиз затирает правку или не встаёт вообще. Защищает от этого порядок работы: сначала решить, нужна ли доработка, затем выбрать инструмент, вести историю, тестировать на копии и только потом обновлять.
Подготовка: нужна ли доработка вообще
Самая дешёвая доработка — та, которую не пришлось делать. Прежде чем открывать Конфигуратор, проверьте, не решается ли задача штатно.
🔍 Что проверить в первую очередь:
- 🧩 Дополнительные реквизиты и сведения. В типовых конфигурациях на БСП можно добавить поле в справочник или документ без программирования:
Администрирование → Общие настройки → Дополнительные реквизиты и сведения. - 🖨️ Внешние печатные формы и обработки. Подключаются в пользовательском режиме через
Администрирование → Печатные формы, отчеты и обработки. Конфигурацию не трогают вообще. - ⚙️ Настройки самой программы. Функциональность, учётная политика, настройки параметров учёта. Часто «доработка» на деле — выключенная галочка.
- 📊 Настройка отчёта. Варианты отчётов на СКД позволяют добавить поля, группировки и отборы без кода.
Если штатных средств не хватает, сформулируйте задачу письменно до начала работы. Минимум: что должно происходить, в каком документе или справочнике, кто пользуется, как проверить результат. Без этого доработка расползается по ходу.
Оцените «стоимость владения», а не только разработки. Каждая правка в основной конфигурации добавляет время к каждому будущему обновлению. Правка в расширении — почти не добавляет.
Инструменты доработки 1С: что выбрать под задачу
Способов внести изменения несколько. Они различаются тем, насколько глубоко лезут в типовой код и как ведут себя при обновлении.
| Способ | Когда подходит | Что будет при обновлении |
|---|---|---|
Внешняя обработка или отчёт (.epf, .erf) | Печатная форма, загрузка данных, разовый отчёт, сервисная обработка | Не затрагивается; иногда нужна правка при смене структуры объектов |
Расширение конфигурации (.cfe) | Новые реквизиты, формы, команды, изменение поведения типовых процедур | Остаётся; проверяйте применимость после каждого релиза |
| Правка основной конфигурации с сохранением поддержки | Изменения, которые расширением сделать нельзя | Требует сравнения и объединения при каждом релизе |
| Снятие с поддержки | Практически никогда для типовых решений | Обновление только вручную, полным сравнением |
Средства разработки тоже два. Конфигуратор — классика, есть в любой поставке платформы. 1С:Enterprise Development Tools (EDT) — среда на базе Eclipse: выгрузка конфигурации в файлы, нормальная работа с Git, рефакторинг, проверки кода. Для команды из двух и более разработчиков EDT удобнее; для одиночной правки расширения хватит Конфигуратора.
Для контроля качества кода пригодятся «1С:Автоматизированная проверка конфигураций» (АПК) и открытый BSL Language Server — они находят запросы в цикле, неиспользуемые переменные, нарушения стандартов разработки.
Расширения конфигурации: пошаговая инструкция
Расширения появились в платформе 8.3.6, и с тех пор это основной способ доработки типовых решений. Расширение лежит поверх конфигурации: типовой код не меняется, а ваши процедуры вызываются до, после или вместо типовых.
Создание расширения
- Откройте базу в Конфигураторе:
Конфигурация → Расширения конфигурации. - Нажмите «Добавить». Задайте имя (например,
ДоработкиСклад) и префикс — короткую метку для ваших объектов, напримермр_. - Выберите назначение. «Адаптация» — для доработок под конкретного заказчика, «Исправление» — для точечных исправлений ошибок, «Дополнение» — для тиражируемых модулей.
- Откройте дерево расширения через контекстное меню («Открыть конфигурацию»).
Заимствование объектов и перехват процедур
Чтобы изменить типовой документ, его нужно заимствовать. В дереве основной конфигурации щёлкните правой кнопкой по объекту и выберите «Добавить в расширение». Заимствуйте только то, что реально меняете: каждый лишний объект — лишняя точка проверки при обновлении.
Перехват процедуры делается из модуля типового объекта: правой кнопкой по имени процедуры → «Добавить в расширение» → выбор аннотации.
- ⬅️
&Перед— ваш код выполняется до типового. - ➡️
&После— после типового. Самый безопасный вариант. - 🔁
&Вместо— полностью подменяет типовую процедуру. Вызвать оригинал можно черезПродолжитьВызов(). - ✂️
&ИзменениеИКонтроль— правка внутри типовой процедуры с маркерами#Вставка/#КонецВставкии#Удаление/#КонецУдаления. Если после обновления исходный текст процедуры изменится, расширение не применится и платформа об этом сообщит, а не будет молча работать по-старому.
Пример: запрет записывать документ без комментария, перехват в модуле объекта.
&После("ОбработкаПроверкиЗаполнения")
Процедура мр_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните комментарий: укажите основание операции.";
Сообщение.Поле = "Комментарий";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Применение и выгрузка
- Сохраните расширение и выполните «Обновить конфигурацию
базы данных» в его контексте (кнопка в окне расширения или
F7). - Проверьте свойства: флаг «Безопасный режим» ограничивает расширению доступ к файлам и внешним ресурсам. Снимайте его, только если расширению это действительно нужно.
- Выгрузите расширение в файл
.cfeчерезКонфигурация → Сохранить конфигурацию в файл, находясь в окне расширения. Этот файл и переносится в рабочую базу.
Расширение, которое добавляет реквизиты в типовые объекты, меняет структуру данных. Его загрузка в рабочую базу — это обновление структуры, и делать её нужно вне рабочего времени, когда пользователи не работают.
Контроль версий: как не потерять изменения в 1С
Доработка без истории изменений превращается в лотерею: никто не помнит, кто и когда поправил проведение реализации.
🗂️ Варианты по размеру команды:
- 👤 Один разработчик. Перед каждой серией правок —
Конфигурация → Сохранить конфигурацию в файл(.cf) и отдельно выгрузка каждого расширения (.cfe). Файлы складывайте с датой в имени:2026-10-07_до_задачи_142.cf. - 👥 Команда в Конфигураторе. Хранилище конфигурации:
Конфигурация → Хранилище конфигурации → Подключиться к хранилищу. Объекты захватываются, правятся и помещаются обратно с комментарием. Двое не изменят один модуль одновременно. - 🧑💻 Команда в EDT. Проект лежит в Git: ветки под задачи, слияния, ревью кода. Расширения хранятся там же отдельными проектами.
Если команда работает в Конфигураторе, а историю хочется видеть в Git, используют открытый инструмент GitSync: он выгружает версии хранилища в Git-репозиторий.
Комментарий при помещении в хранилище пишите так, чтобы его понял человек через год: номер задачи и что сделано. «Правки» и «исправил» в истории бесполезны.
Временные файлы при разработке
Временные файлы мешают доработке с двух сторон: устаревший кеш платформы и мусор, который оставляет ваш собственный код.
Кеш платформы
Платформа хранит кеш метаданных конфигурации в профиле пользователя, в папках %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. После обновления или загрузки расширения кеш иногда остаётся старым. Симптомы: форма открывается в прежнем виде, новый реквизит не виден, ошибки ссылаются на несуществующие строки модуля.
Что делать:
- Запустить клиент с ключом
/ClearCache— платформа сбросит кеш для этой базы. - Если не помогло — закрыть все сеансы 1С на компьютере и удалить папки с GUID-именами внутри указанных каталогов.
Чистить кеш на терминальном сервере для всех профилей сразу — только когда пользователи вышли: у работающих сеансов файлы заняты, и 1С может завершиться с ошибкой.
Временные файлы в вашем коде
Если доработка выгружает или загружает файлы, получайте имя через ПолучитьИмяВременногоФайла("xlsx") и удаляйте файл после работы через УдалитьФайлы(). Не пишите в фиксированный путь вроде C:\temp\выгрузка.xlsx: на сервере у рабочего процесса может не быть туда прав, а двое пользователей перезапишут файлы друг друга.
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Попытка
ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
// ... передача файла
Исключение
УдалитьФайлы(ИмяФайла);
ВызватьИсключение;
КонецПопытки;
УдалитьФайлы(ИмяФайла);
Тестирование доработок 1С: как не сломать рабочую базу
Никогда не разрабатывайте в рабочей базе. Ошибка в обработчике проведения в рабочей базе — это остановленная отгрузка у всего отдела.
Где тестировать
- 🧪 Копия рабочей базы. Выгрузка через
Администрирование → Выгрузить информационную базув Конфигураторе (.dt), загрузка в новую пустую базу. На копии реальные данные и реальные объёмы. - 🔒 Обезличивание. Если разработчик внешний, копию с персональными данными сотрудников и клиентов передавать без обезличивания нельзя: это требование закона о персональных данных.
Что проверять
Конфигурация → Проверка конфигурации— синтаксис модулей, ссылки на несуществующие объекты, модальные вызовы. Запускайте и для расширения.- Ручной прогон сценария: создать, записать, провести, распечатать, отменить проведение.
- Права: зайти под пользователем с обычной ролью, а не под администратором. «У меня работает» нередко означает лишь полные права разработчика.
- Производительность на реальном объёме:
Отладка → Замер производительностипоказывает, какие строки кода тратят время. - Регресс: проведите несколько типовых документов, которые доработка не должна была затронуть.
Для регулярных проверок пишут автотесты: открытый фреймворк Vanessa Automation позволяет описать сценарий человеческим языком и прогонять его после каждого изменения и каждого обновления.
Документирование доработок: что записать, кроме кода
Через год вопрос будет не «как это работает», а «зачем это сделали и можно ли убрать». Код на этот вопрос не отвечает.
📝 Минимальный журнал доработок (таблица, вики или файл в репозитории):
| Поле | Пример |
|---|---|
| Номер и дата задачи | 142, 07.10 |
| Заказчик внутри компании | Склад, Иванова А. |
| Что изменено | Расширение «ДоработкиСклад», документ «Реализация товаров и услуг», модуль объекта |
| Зачем | Запрет проводки без основания |
| Как проверить | Записать документ с пустым комментарием — должна быть ошибка |
В самом коде выделяйте вставки в типовые модули метками с автором и задачей:
// ++ мр Петров 07.10 Задача 142
...ваш код...
// -- мр Петров 07.10 Задача 142
Поиск по метке ++ мр сразу показывает все изменения при обновлении. Для расширений это менее критично, но для правок основной конфигурации — обязательно.
Обновление доработанной конфигурации 1С
Если всё сделано в расширениях, обновление почти не отличается от типового.
Конфигурация только с расширениями
- Сделайте резервную копию (
.dt). - Обновите конфигурацию из
.cfu:Конфигурация → Поддержка → Обновить конфигурацию. - Запустите базу и проверьте, что расширения применились. Если перехваченная процедура в новом релизе переименована или удалена, платформа выдаст сообщение о невозможности применить расширение — его нужно поправить под новый код.
- Для
&ИзменениеИКонтрольсравните старый и новый текст процедуры и перенесите вставки. - Прогоните автотесты или ручной сценарий из раздела про тестирование.
Изменённая основная конфигурация
Здесь платформа выполняет сравнение трёх версий: старой конфигурации поставщика, новой конфигурации поставщика и вашей текущей. В окне сравнения и объединения:
- 🟢 объекты, которые вы не меняли, берутся из нового релиза автоматически;
- 🟡 объекты, изменённые и вами, и поставщиком, требуют ручного решения по каждому модулю;
- 🔴 «принять всё от поставщика» без просмотра стирает ваши правки — ровно то, ради чего ведутся метки
++/--.
Если доработок в основной конфигурации много, переносите их в расширение постепенно, при каждом обновлении по несколько объектов. Через два-три релиза обновление перестанет быть проектом.
Частые вопросы
Можно ли подключить расширение без Конфигуратора?
Администрирование → Печатные формы, отчеты и обработки → Расширения. Нужны права администратора.