Доработка типовой конфигурации 1С так, чтобы она пережила обновления

· 10 мин

Содержание

Дорабатывать 1С правильно — значит менять типовую конфигурацию через расширение (.cfe), а не правкой основной конфигурации, вести изменения в хранилище или Git, проверять всё на копии базы и записывать, что и зачем изменено. Тогда обновление от фирмы-разработчика ставится за час, а не превращается в недельное ручное объединение.

Типичная боль программиста: заказчик просит «одну кнопку», её добавляют прямо в типовой модуль, а через полгода очередной релиз затирает правку или не встаёт вообще. Защищает от этого порядок работы: сначала решить, нужна ли доработка, затем выбрать инструмент, вести историю, тестировать на копии и только потом обновлять.

Подготовка: нужна ли доработка вообще

Самая дешёвая доработка — та, которую не пришлось делать. Прежде чем открывать Конфигуратор, проверьте, не решается ли задача штатно.

🔍 Что проверить в первую очередь:

  • 🧩 Дополнительные реквизиты и сведения. В типовых конфигурациях на БСП можно добавить поле в справочник или документ без программирования: Администрирование → Общие настройки → Дополнительные реквизиты и сведения.
  • 🖨️ Внешние печатные формы и обработки. Подключаются в пользовательском режиме через Администрирование → Печатные формы, отчеты и обработки. Конфигурацию не трогают вообще.
  • ⚙️ Настройки самой программы. Функциональность, учётная политика, настройки параметров учёта. Часто «доработка» на деле — выключенная галочка.
  • 📊 Настройка отчёта. Варианты отчётов на СКД позволяют добавить поля, группировки и отборы без кода.

Если штатных средств не хватает, сформулируйте задачу письменно до начала работы. Минимум: что должно происходить, в каком документе или справочнике, кто пользуется, как проверить результат. Без этого доработка расползается по ходу.

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

Инструменты доработки 1С: что выбрать под задачу

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

СпособКогда подходитЧто будет при обновлении
Внешняя обработка или отчёт (.epf, .erf)Печатная форма, загрузка данных, разовый отчёт, сервисная обработкаНе затрагивается; иногда нужна правка при смене структуры объектов
Расширение конфигурации (.cfe)Новые реквизиты, формы, команды, изменение поведения типовых процедурОстаётся; проверяйте применимость после каждого релиза
Правка основной конфигурации с сохранением поддержкиИзменения, которые расширением сделать нельзяТребует сравнения и объединения при каждом релизе
Снятие с поддержкиПрактически никогда для типовых решенийОбновление только вручную, полным сравнением

Средства разработки тоже два. Конфигуратор — классика, есть в любой поставке платформы. 1С:Enterprise Development Tools (EDT) — среда на базе Eclipse: выгрузка конфигурации в файлы, нормальная работа с Git, рефакторинг, проверки кода. Для команды из двух и более разработчиков EDT удобнее; для одиночной правки расширения хватит Конфигуратора.

Для контроля качества кода пригодятся «1С:Автоматизированная проверка конфигураций» (АПК) и открытый BSL Language Server — они находят запросы в цикле, неиспользуемые переменные, нарушения стандартов разработки.

Расширения конфигурации: пошаговая инструкция

Расширения появились в платформе 8.3.6, и с тех пор это основной способ доработки типовых решений. Расширение лежит поверх конфигурации: типовой код не меняется, а ваши процедуры вызываются до, после или вместо типовых.

Создание расширения

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

Заимствование объектов и перехват процедур

Чтобы изменить типовой документ, его нужно заимствовать. В дереве основной конфигурации щёлкните правой кнопкой по объекту и выберите «Добавить в расширение». Заимствуйте только то, что реально меняете: каждый лишний объект — лишняя точка проверки при обновлении.

Перехват процедуры делается из модуля типового объекта: правой кнопкой по имени процедуры → «Добавить в расширение» → выбор аннотации.

  • ⬅️ &Перед — ваш код выполняется до типового.
  • ➡️ &После — после типового. Самый безопасный вариант.
  • 🔁 &Вместо — полностью подменяет типовую процедуру. Вызвать оригинал можно через ПродолжитьВызов().
  • ✂️ &ИзменениеИКонтроль — правка внутри типовой процедуры с маркерами #Вставка / #КонецВставки и #Удаление / #КонецУдаления. Если после обновления исходный текст процедуры изменится, расширение не применится и платформа об этом сообщит, а не будет молча работать по-старому.

Пример: запрет записывать документ без комментария, перехват в модуле объекта.

&После("ОбработкаПроверкиЗаполнения")
Процедура мр_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

	Если Не ЗначениеЗаполнено(Комментарий) Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Заполните комментарий: укажите основание операции.";
		Сообщение.Поле = "Комментарий";
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЕсли;

КонецПроцедуры

Применение и выгрузка

  1. Сохраните расширение и выполните «Обновить конфигурацию базы данных» в его контексте (кнопка в окне расширения или F7).
  2. Проверьте свойства: флаг «Безопасный режим» ограничивает расширению доступ к файлам и внешним ресурсам. Снимайте его, только если расширению это действительно нужно.
  3. Выгрузите расширение в файл .cfe через Конфигурация → Сохранить конфигурацию в файл, находясь в окне расширения. Этот файл и переносится в рабочую базу.

Расширение, которое добавляет реквизиты в типовые объекты, меняет структуру данных. Его загрузка в рабочую базу — это обновление структуры, и делать её нужно вне рабочего времени, когда пользователи не работают.

Контроль версий: как не потерять изменения в 1С

Доработка без истории изменений превращается в лотерею: никто не помнит, кто и когда поправил проведение реализации.

🗂️ Варианты по размеру команды:

  • 👤 Один разработчик. Перед каждой серией правок — Конфигурация → Сохранить конфигурацию в файл (.cf) и отдельно выгрузка каждого расширения (.cfe). Файлы складывайте с датой в имени: 2026-10-07_до_задачи_142.cf.
  • 👥 Команда в Конфигураторе. Хранилище конфигурации: Конфигурация → Хранилище конфигурации → Подключиться к хранилищу. Объекты захватываются, правятся и помещаются обратно с комментарием. Двое не изменят один модуль одновременно.
  • 🧑‍💻 Команда в EDT. Проект лежит в Git: ветки под задачи, слияния, ревью кода. Расширения хранятся там же отдельными проектами.

Если команда работает в Конфигураторе, а историю хочется видеть в Git, используют открытый инструмент GitSync: он выгружает версии хранилища в Git-репозиторий.

Комментарий при помещении в хранилище пишите так, чтобы его понял человек через год: номер задачи и что сделано. «Правки» и «исправил» в истории бесполезны.

Временные файлы при разработке

Временные файлы мешают доработке с двух сторон: устаревший кеш платформы и мусор, который оставляет ваш собственный код.

Кеш платформы

Платформа хранит кеш метаданных конфигурации в профиле пользователя, в папках %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. После обновления или загрузки расширения кеш иногда остаётся старым. Симптомы: форма открывается в прежнем виде, новый реквизит не виден, ошибки ссылаются на несуществующие строки модуля.

Что делать:

  1. Запустить клиент с ключом /ClearCache — платформа сбросит кеш для этой базы.
  2. Если не помогло — закрыть все сеансы 1С на компьютере и удалить папки с GUID-именами внутри указанных каталогов.

Чистить кеш на терминальном сервере для всех профилей сразу — только когда пользователи вышли: у работающих сеансов файлы заняты, и 1С может завершиться с ошибкой.

Временные файлы в вашем коде

Если доработка выгружает или загружает файлы, получайте имя через ПолучитьИмяВременногоФайла("xlsx") и удаляйте файл после работы через УдалитьФайлы(). Не пишите в фиксированный путь вроде C:\temp\выгрузка.xlsx: на сервере у рабочего процесса может не быть туда прав, а двое пользователей перезапишут файлы друг друга.

ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Попытка
	ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
	// ... передача файла
Исключение
	УдалитьФайлы(ИмяФайла);
	ВызватьИсключение;
КонецПопытки;
УдалитьФайлы(ИмяФайла);

Тестирование доработок 1С: как не сломать рабочую базу

Никогда не разрабатывайте в рабочей базе. Ошибка в обработчике проведения в рабочей базе — это остановленная отгрузка у всего отдела.

Где тестировать

  • 🧪 Копия рабочей базы. Выгрузка через Администрирование → Выгрузить информационную базу в Конфигураторе (.dt), загрузка в новую пустую базу. На копии реальные данные и реальные объёмы.
  • 🔒 Обезличивание. Если разработчик внешний, копию с персональными данными сотрудников и клиентов передавать без обезличивания нельзя: это требование закона о персональных данных.

Что проверять

  1. Конфигурация → Проверка конфигурации — синтаксис модулей, ссылки на несуществующие объекты, модальные вызовы. Запускайте и для расширения.
  2. Ручной прогон сценария: создать, записать, провести, распечатать, отменить проведение.
  3. Права: зайти под пользователем с обычной ролью, а не под администратором. «У меня работает» нередко означает лишь полные права разработчика.
  4. Производительность на реальном объёме: Отладка → Замер производительности показывает, какие строки кода тратят время.
  5. Регресс: проведите несколько типовых документов, которые доработка не должна была затронуть.

Для регулярных проверок пишут автотесты: открытый фреймворк Vanessa Automation позволяет описать сценарий человеческим языком и прогонять его после каждого изменения и каждого обновления.

Перед переносом доработки в рабочую базу
Выполнено: 0 / 6

Документирование доработок: что записать, кроме кода

Через год вопрос будет не «как это работает», а «зачем это сделали и можно ли убрать». Код на этот вопрос не отвечает.

📝 Минимальный журнал доработок (таблица, вики или файл в репозитории):

ПолеПример
Номер и дата задачи142, 07.10
Заказчик внутри компанииСклад, Иванова А.
Что измененоРасширение «ДоработкиСклад», документ «Реализация товаров и услуг», модуль объекта
ЗачемЗапрет проводки без основания
Как проверитьЗаписать документ с пустым комментарием — должна быть ошибка

В самом коде выделяйте вставки в типовые модули метками с автором и задачей:

// ++ мр Петров 07.10 Задача 142
...ваш код...
// -- мр Петров 07.10 Задача 142

Поиск по метке ++ мр сразу показывает все изменения при обновлении. Для расширений это менее критично, но для правок основной конфигурации — обязательно.

Обновление доработанной конфигурации 1С

Если всё сделано в расширениях, обновление почти не отличается от типового.

Конфигурация только с расширениями

  1. Сделайте резервную копию (.dt).
  2. Обновите конфигурацию из .cfu: Конфигурация → Поддержка → Обновить конфигурацию.
  3. Запустите базу и проверьте, что расширения применились. Если перехваченная процедура в новом релизе переименована или удалена, платформа выдаст сообщение о невозможности применить расширение — его нужно поправить под новый код.
  4. Для &ИзменениеИКонтроль сравните старый и новый текст процедуры и перенесите вставки.
  5. Прогоните автотесты или ручной сценарий из раздела про тестирование.

Изменённая основная конфигурация

Здесь платформа выполняет сравнение трёх версий: старой конфигурации поставщика, новой конфигурации поставщика и вашей текущей. В окне сравнения и объединения:

  • 🟢 объекты, которые вы не меняли, берутся из нового релиза автоматически;
  • 🟡 объекты, изменённые и вами, и поставщиком, требуют ручного решения по каждому модулю;
  • 🔴 «принять всё от поставщика» без просмотра стирает ваши правки — ровно то, ради чего ведутся метки ++ / --.

Если доработок в основной конфигурации много, переносите их в расширение постепенно, при каждом обновлении по несколько объектов. Через два-три релиза обновление перестанет быть проектом.

Диагностика: выберите симптом

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

Можно ли подключить расширение без Конфигуратора?
Да. В конфигурациях на БСП расширения загружаются в пользовательском режиме: Администрирование → Печатные формы, отчеты и обработки → Расширения. Нужны права администратора.
Расширение тормозит базу?
Само по себе — незаметно. Тормозят тяжёлые запросы и обращения к базе внутри перехватов. Проверяйте замером производительности так же, как обычный код.
Чем плохо снять конфигурацию с поддержки?
Платформа перестаёт знать, какие объекты поставщика вы меняли. Каждое обновление превращается в полное сравнение всей конфигурации вручную.
Нужно ли согласовывать доработку с фирмой 1С?
Нет. Изменение конфигурации у себя лицензией не запрещено. Но платная поддержка обслуживающей организации может не распространяться на доработанные места.
Сколько стоит доработка у внешнего исполнителя?
Обычно считают по часам. Ориентировочно 2–5 тысяч рублей за час программиста в зависимости от региона и квалификации; простая печатная форма — примерно 2–6 часов, доработка проведения документа — от одного до нескольких дней.