Патч-расширение в 1С 8.3: от заимствования метода до установки в рабочую базу
Содержание
Патч для 1С 8.3 делают не правкой основной конфигурации, а расширением с назначением «Исправление». В Конфигураторе откройте Конфигурация → Расширения конфигурации, добавьте новое расширение, укажите назначение «Исправление», заимствуйте объект с ошибкой и перекройте нужную процедуру. Основная конфигурация остаётся на поддержке. Следующее обновление встанет штатно.
Многие до сих пор уверены, что исправить ошибку в типовой 1С можно только через «снятие с поддержки» и правку модуля. Так делали во времена 8.2. Сейчас этот путь создаёт больше проблем, чем решает: каждое обновление превращается в ручное сравнение и объединение. Патч-расширение снимается одной галочкой и не трогает исходный код.
Что считается патчем в 1С и когда его делать
Патч — небольшое расширение конфигурации , которое меняет поведение одного-двух методов. От обычного расширения его отличает назначение «Исправление» в свойствах. Платформа применяет расширения по назначению в порядке: сначала «Исправление», затем «Адаптация», затем «Дополнение». Поэтому патч срабатывает раньше доработок, сделанных другими расширениями.
Фирма 1С сама распространяет исправления в таком виде. Типовые патчи для БП 3.0, ЗУП 3.1, УТ 11 приходят через интернет -поддержку и ставятся из режима Предприятия. Свой патч устроен так же, только делаете его вы.
Когда патч уместен:
- 🐞 ошибка в типовом модуле мешает работать, а исправленный релиз выйдет нескоро;
- 🧮 нужно поправить расчёт, проверку заполнения или печать в одном конкретном месте;
- ⏱ требуется временная заплатка до обновления, которую потом удалят;
- 🔒 конфигурация на полной поддержке, и снимать её с поддержки нельзя.
Когда патч делать не нужно:
- ❌ ошибку уже исправили в вышедшем релизе — проще обновиться;
- ❌ задача — новая функциональность (отчёт, справочник, обработка). Это расширение с назначением «Дополнение» или «Адаптация»;
- ❌ проблема в данных, а не в коде. Битые остатки или задвоенные движения патчем не лечатся.
Чем патч-расширение отличается от других способов
| Способ | Когда подходит | Риски |
|---|---|---|
| Расширение «Исправление» | Точечная правка типового кода | Перестаёт применяться, если в обновлении изменился заимствованный метод |
| Правка основной конфигурации | Конфигурация уже сильно доработана | Ручное объединение при каждом обновлении |
Файл .cf с изменениями + сравнение/объединение | Перенос правки между копиями нетиповой базы | Ошибки при объединении, нужна квалификация |
| Внешняя обработка | Разовое действие с данными | Не меняет поведение программы |
Что проверить перед созданием патча
Подготовка занимает меньше времени, чем кажется, и спасает от неприятных сюрпризов.
- Версия платформы и режим совместимости. Расширения появились в платформе 8.3.6. Аннотация
&ИзменениеИКонтроль, удобная именно для патчей, работает в новых версиях платформы и при соответствующем режиме совместимости. ПосмотритеСправка → О программеи свойство «Режим совместимости» в корне конфигурации. - Точное место ошибки. Найдите модуль и метод, где возникает сбой. Помогает отладчик: включите
Сервис → Параметры → Отладкапри необходимости, поставьте точку останова и повторите действие пользователя. - Контекст вызова. Метод может вызываться на клиенте и на сервере, из формы и из модуля менеджера. Проверьте все места через
Поиск ссылок(контекстное меню на имени метода). - Резервная копия. Перед первым тестом сделайте выгрузку
Администрирование → Выгрузить информационную базув Конфигураторе. Получится файл.dt. - Тестовая копия. Разверните
.dtв отдельную базу. Писать и отлаживать патч на рабочей базе нельзя.
Сначала воспроизведите ошибку на тестовой копии. Если она там не повторяется, причина, скорее всего, в данных или настройках рабочей базы, а не в коде.
Создание патча в Конфигураторе: пошагово
Шаг 1. Новое расширение
- Откройте тестовую базу в режиме Конфигуратор.
- Меню
Конфигурация → Расширения конфигурации. - Нажмите «Добавить». Задайте имя латиницей или кириллицей без пробелов, например
Патч_РасчетСуммы, и префикс, напримерПатч1_. Префикс получат все новые методы. - В поле «Назначение» выберите «Исправление».
- Откройте конфигурацию расширения двойным щелчком: появится отдельное дерево объектов.
Шаг 2. Заимствование объекта
В дереве основной конфигурации найдите объект с ошибкой: общий модуль, документ, форму. В контекстном меню выберите «Добавить в расширение». Объект появится в дереве расширения с пометкой заимствованного.
Заимствуйте только то, что меняете. Лишние объекты в патче — лишние точки, где он может перестать применяться после обновления.
Шаг 3. Перехват метода
Откройте модуль заимствованного объекта в расширении. Для метода основной конфигурации доступны аннотации:
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед | Выполняет ваш код до исходного | Подготовить параметры, добавить проверку |
&После | Выполняет ваш код после исходного | Дописать результат, заполнить поле |
&Вместо | Заменяет вызов; исходный можно вызвать через ПродолжитьВызов() | Нужно переписать логику целиком |
&ИзменениеИКонтроль | Копирует текст метода, правки отмечаются директивами | Точечная правка нескольких строк |
Для патчей лучше всего подходит &ИзменениеИКонтроль. Платформа хранит копию исходного текста и при обновлении сверяет её с новой версией метода. Если 1С поменяла метод, расширение перестанет применяться и сообщит об этом. Молча старый код не выполнится.
Пример: в основной конфигурации сумма считается без округления, а нужно до копеек.
&ИзменениеИКонтроль("РассчитатьСумму")
Функция Патч1_РассчитатьСумму(Количество, Цена)
#Удаление
Возврат Количество * Цена;
#КонецУдаления
#Вставка
Возврат Окр(Количество * Цена, 2);
#КонецВставки
КонецФункции
Если нужно заменить метод, но иногда оставлять исходное поведение, используйте &Вместо:
&Вместо("РассчитатьСумму")
Функция Патч1_РассчитатьСумму(Количество, Цена)
Если Цена < 0 Тогда
Возврат 0;
КонецЕсли;
Возврат ПродолжитьВызов(Количество, Цена);
КонецФункции
Чтобы не набирать заготовку вручную: в модуле основной конфигурации встаньте на имя метода, в контекстном меню выберите добавление в расширение и тип перехвата. Конфигуратор создаст метод с правильной аннотацией сам.
Шаг 4. Свойства расширения
В свойствах расширения (корень его дерева) проверьте два флага:
- «Безопасный режим». Включён по умолчанию. Если патч работает с файлами, COM или внешними компонентами, флаг придётся снять;
- «Защита от опасных действий». Аналогично: снимайте только при реальной необходимости.
Снимать «Безопасный режим» у расширения из непроверенного источника нельзя. Такое расширение получает полный доступ к серверу 1С.
Шаг 5. Сохранение и применение
Сохраните расширение и выполните Конфигурация → Обновить конфигурацию базы данных в контексте расширения (кнопка F7, когда активно окно расширения). Конфигуратор выполнит проверку применимости. Ошибки покажет в окне сообщений.
Тестирование патча на копии базы
Тест патча — это не «запустилось без ошибок». Нужно убедиться, что ошибка ушла, а соседние сценарии не сломались.
- Запустите базу в режиме Предприятия. Перейдите
Администрирование → Печатные формы, отчеты и обработки → Расширения(в БП 3.0, ЗУП 3.1, УТ 11) и убедитесь, что расширение активно. - Повторите сценарий, на котором возникала ошибка. Сравните результат с ожидаемым.
- Проверьте соседние операции, которые вызывают тот же метод. Их вы нашли через
Поиск ссылокна этапе подготовки. - Если метод выполняется на сервере, проверьте и под пользователем с ограниченными правами. Патч не должен требовать прав администратора.
- Обновите тестовую копию на следующий релиз конфигурации, если он уже доступен, и проверьте, что расширение применяется.
Готовый патч выгрузите в файл: Конфигурация → Расширения конфигурации, выделите расширение, команда сохранения в файл. Получится .cfe. Имя давайте с датой и номером задачи, например Патч_РасчетСуммы_2026-10-07.cfe.
Как установить патч в рабочую базу
Есть два пути. Выбор зависит от того, у кого есть доступ к Конфигуратору.
Из режима Предприятия (без Конфигуратора)
- Под администратором откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Нажмите «Добавить из файла» и выберите
.cfe. - Программа покажет предупреждение о безопасности. Прочитайте его и подтвердите.
- Перезапустите программу. Пользователи увидят изменения после перезапуска своих сеансов.
Типовые исправления фирмы 1С ставятся в том же разделе или через Администрирование → Интернет-поддержка и сервисы, в блоке обновления программы. Там же видно список установленных исправлений.
Через Конфигуратор
- Откройте рабочую базу в Конфигураторе.
Конфигурация → Расширения конфигурации, кнопка «Добавить», затем загрузка из файла.cfe.- Обновите конфигурацию базы данных для расширения.
Если патч не добавляет реквизиты, таблицы и другие хранимые данные, монопольный доступ к базе обычно не нужен. Если расширение меняет структуру данных, планируйте установку на время, когда в базе никто не работает : при обновлении структуры потребуется монопольный режим, а сеансы пользователей придётся завершить.
Если у базы настроен обмен или РИБ, ставьте патч и в подчинённые узлы. Иначе один и тот же документ будет считаться по-разному в разных базах.
Автоматизация: загрузка патча из командной строки
Когда баз десятки, ставить патч руками долго. Платформа умеет загружать расширение в пакетном режиме Конфигуратора.
Пример для файловой базы:
"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С уже исправила в релизе, отключайте и удаляйте: они замедляют запуск и путают при разборе ошибок.