Патч-расширение в 1С 8.3: от заимствования метода до установки в рабочую базу

· 9 мин

Содержание

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

Многие до сих пор уверены, что исправить ошибку в типовой 1С можно только через «снятие с поддержки» и правку модуля. Так делали во времена 8.2. Сейчас этот путь создаёт больше проблем, чем решает: каждое обновление превращается в ручное сравнение и объединение. Патч-расширение снимается одной галочкой и не трогает исходный код.

Что считается патчем в 1С и когда его делать

Патч — небольшое расширение конфигурации , которое меняет поведение одного-двух методов. От обычного расширения его отличает назначение «Исправление» в свойствах. Платформа применяет расширения по назначению в порядке: сначала «Исправление», затем «Адаптация», затем «Дополнение». Поэтому патч срабатывает раньше доработок, сделанных другими расширениями.

Фирма 1С сама распространяет исправления в таком виде. Типовые патчи для БП 3.0, ЗУП 3.1, УТ 11 приходят через интернет -поддержку и ставятся из режима Предприятия. Свой патч устроен так же, только делаете его вы.

Когда патч уместен:

  • 🐞 ошибка в типовом модуле мешает работать, а исправленный релиз выйдет нескоро;
  • 🧮 нужно поправить расчёт, проверку заполнения или печать в одном конкретном месте;
  • ⏱ требуется временная заплатка до обновления, которую потом удалят;
  • 🔒 конфигурация на полной поддержке, и снимать её с поддержки нельзя.

Когда патч делать не нужно:

  • ❌ ошибку уже исправили в вышедшем релизе — проще обновиться;
  • ❌ задача — новая функциональность (отчёт, справочник, обработка). Это расширение с назначением «Дополнение» или «Адаптация»;
  • ❌ проблема в данных, а не в коде. Битые остатки или задвоенные движения патчем не лечатся.

Чем патч-расширение отличается от других способов

СпособКогда подходитРиски
Расширение «Исправление»Точечная правка типового кодаПерестаёт применяться, если в обновлении изменился заимствованный метод
Правка основной конфигурацииКонфигурация уже сильно доработанаРучное объединение при каждом обновлении
Файл .cf с изменениями + сравнение/объединениеПеренос правки между копиями нетиповой базыОшибки при объединении, нужна квалификация
Внешняя обработкаРазовое действие с даннымиНе меняет поведение программы

Что проверить перед созданием патча

Подготовка занимает меньше времени, чем кажется, и спасает от неприятных сюрпризов.

  1. Версия платформы и режим совместимости. Расширения появились в платформе 8.3.6. Аннотация &ИзменениеИКонтроль, удобная именно для патчей, работает в новых версиях платформы и при соответствующем режиме совместимости. Посмотрите Справка → О программе и свойство «Режим совместимости» в корне конфигурации.
  2. Точное место ошибки. Найдите модуль и метод, где возникает сбой. Помогает отладчик: включите Сервис → Параметры → Отладка при необходимости, поставьте точку останова и повторите действие пользователя.
  3. Контекст вызова. Метод может вызываться на клиенте и на сервере, из формы и из модуля менеджера. Проверьте все места через Поиск ссылок (контекстное меню на имени метода).
  4. Резервная копия. Перед первым тестом сделайте выгрузку Администрирование → Выгрузить информационную базу в Конфигураторе. Получится файл .dt.
  5. Тестовая копия. Разверните .dt в отдельную базу. Писать и отлаживать патч на рабочей базе нельзя.

Сначала воспроизведите ошибку на тестовой копии. Если она там не повторяется, причина, скорее всего, в данных или настройках рабочей базы, а не в коде.

Создание патча в Конфигураторе: пошагово

Шаг 1. Новое расширение

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

Шаг 2. Заимствование объекта

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

Заимствуйте только то, что меняете. Лишние объекты в патче — лишние точки, где он может перестать применяться после обновления.

Шаг 3. Перехват метода

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

АннотацияЧто делаетКогда брать
&ПередВыполняет ваш код до исходногоПодготовить параметры, добавить проверку
&ПослеВыполняет ваш код после исходногоДописать результат, заполнить поле
&ВместоЗаменяет вызов; исходный можно вызвать через ПродолжитьВызов()Нужно переписать логику целиком
&ИзменениеИКонтрольКопирует текст метода, правки отмечаются директивамиТочечная правка нескольких строк

Для патчей лучше всего подходит &ИзменениеИКонтроль. Платформа хранит копию исходного текста и при обновлении сверяет её с новой версией метода. Если 1С поменяла метод, расширение перестанет применяться и сообщит об этом. Молча старый код не выполнится.

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

&ИзменениеИКонтроль("РассчитатьСумму")
Функция Патч1_РассчитатьСумму(Количество, Цена)
	#Удаление
	Возврат Количество * Цена;
	#КонецУдаления
	#Вставка
	Возврат Окр(Количество * Цена, 2);
	#КонецВставки
КонецФункции

Если нужно заменить метод, но иногда оставлять исходное поведение, используйте &Вместо:

&Вместо("РассчитатьСумму")
Функция Патч1_РассчитатьСумму(Количество, Цена)
	Если Цена < 0 Тогда
		Возврат 0;
	КонецЕсли;
	Возврат ПродолжитьВызов(Количество, Цена);
КонецФункции

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

Шаг 4. Свойства расширения

В свойствах расширения (корень его дерева) проверьте два флага:

  • «Безопасный режим». Включён по умолчанию. Если патч работает с файлами, COM или внешними компонентами, флаг придётся снять;
  • «Защита от опасных действий». Аналогично: снимайте только при реальной необходимости.

Снимать «Безопасный режим» у расширения из непроверенного источника нельзя. Такое расширение получает полный доступ к серверу 1С.

Шаг 5. Сохранение и применение

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

Тестирование патча на копии базы

Тест патча — это не «запустилось без ошибок». Нужно убедиться, что ошибка ушла, а соседние сценарии не сломались.

  1. Запустите базу в режиме Предприятия. Перейдите Администрирование → Печатные формы, отчеты и обработки → Расширения (в БП 3.0, ЗУП 3.1, УТ 11) и убедитесь, что расширение активно.
  2. Повторите сценарий, на котором возникала ошибка. Сравните результат с ожидаемым.
  3. Проверьте соседние операции, которые вызывают тот же метод. Их вы нашли через Поиск ссылок на этапе подготовки.
  4. Если метод выполняется на сервере, проверьте и под пользователем с ограниченными правами. Патч не должен требовать прав администратора.
  5. Обновите тестовую копию на следующий релиз конфигурации, если он уже доступен, и проверьте, что расширение применяется.
Патч готов к переносу в рабочую базу
Выполнено: 0 / 6

Готовый патч выгрузите в файл: Конфигурация → Расширения конфигурации, выделите расширение, команда сохранения в файл. Получится .cfe. Имя давайте с датой и номером задачи, например Патч_РасчетСуммы_2026-10-07.cfe.

Как установить патч в рабочую базу

Есть два пути. Выбор зависит от того, у кого есть доступ к Конфигуратору.

Из режима Предприятия (без Конфигуратора)

  1. Под администратором откройте Администрирование → Печатные формы, отчеты и обработки → Расширения.
  2. Нажмите «Добавить из файла» и выберите .cfe.
  3. Программа покажет предупреждение о безопасности. Прочитайте его и подтвердите.
  4. Перезапустите программу. Пользователи увидят изменения после перезапуска своих сеансов.

Типовые исправления фирмы 1С ставятся в том же разделе или через Администрирование → Интернет-поддержка и сервисы, в блоке обновления программы. Там же видно список установленных исправлений.

Через Конфигуратор

  1. Откройте рабочую базу в Конфигураторе.
  2. Конфигурация → Расширения конфигурации, кнопка «Добавить», затем загрузка из файла .cfe.
  3. Обновите конфигурацию базы данных для расширения.

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

Если у базы настроен обмен или РИБ, ставьте патч и в подчинённые узлы. Иначе один и тот же документ будет считаться по-разному в разных базах.

Автоматизация: загрузка патча из командной строки

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

Пример для файловой базы:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" ^
 /LoadCfg "D:\Patches\Патч_РасчетСуммы.cfe" -Extension Патч_РасчетСуммы ^
 /UpdateDBCfg -Extension Патч_РасчетСуммы ^
 /DisableStartupDialogs /Out "D:\Patches\log.txt"

Для клиент-серверной базы вместо /F укажите /S "Сервер\ИмяБазы". Номер платформы в пути подставьте свой.

Что важно при автоматизации:

  • 📄 всегда пишите лог через /Out и проверяйте его после запуска. Код завершения не всегда показывает проблему применимости;
  • 🔑 не храните пароль в открытом виде в общем .bat. Используйте отдельного технического пользователя с ролью администратора;
  • 📦 выгрузить расширение из эталонной базы можно параметром /DumpCfg "файл.cfe" -Extension ИмяРасширения;
  • 🧰 для конвейеров CI есть утилита ibcmd и сторонние инструменты вроде vanessa-runner. Синтаксис их команд смотрите в справке своей версии (ibcmd help).
Каким способом ставить патч?

Когда патч перестаёт работать: типичные проблемы

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

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

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

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