Перехваты 1С - контроль расширений после обновления типовой конфигурации

06.11.26

База данных - Обновление 1С

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

Лицензии

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Перехваты 1С — контроль расширений после обновления типовой
.zip 37,02Kb ver:1.0
0 6 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Обновление типовой прошло успешно. Пользователь заходит в «Обмен электронными документами» — и получает:

Ошибка применения расширения конфигурации. Имя: Расширение3

 

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

Решение отвечает на три вопроса до того, как начнутся звонки:

  1. Какие перехваты устарели после обновления.
  2. Что именно изменилось в методе.
  3. Как должен выглядеть перехват под новую версию — готовый текст.

 

Три выгрузки

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

Поэтому выгрузок три:

Выгрузка Что это
Исходная ваша конфигурация до обновления, со всеми доработками
Текущая она же после обновления
Расширения  выгрузки расширений, можно указать родительский каталог

 

 

Проверено на практике

Это не «инструмент, который что-то показывает». Мы прогнали полный цикл на реальной базе УНФ 3.0.14:

  1. Расширения с перехватами, написанными под 3.0.12, установлены в базу 3.0.14 — инструмент показал по ним «Расходится» и «Метод удалён».
  2. Предложенные файлы перенесены в расширения — без правок руками.
  3. Расширения пересобраны и загружены в ту же базу.
  4. Повторный прогон: статус «Совпадает» по всем исправленным перехватам.

Цикл «нашли проблему → получили готовый текст → применили → проверили» замкнут.

 

 

Пример А. Один блок: метод переписан целиком

Реальный перехват ПередПериодическойОтправкойДанныхКлиентаНаСервер, написанный под 3.0.12. В 3.0.14 поставщик заменил логику и добавил Экспорт.

До (расширение на 3.0.12):

&ИзменениеИКонтроль("ПередПериодическойОтправкойДанныхКлиентаНаСервер")
Процедура Расш3_ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры)
	#Удаление
	
	Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОжидания = ПараметрыОжидания();
	
	Если ПараметрыОжидания.Включено = Ложь
		Или Не ПериодОжиданияЗавершен(ПараметрыОжидания.ДатаПолучения) Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыСобытия = НовыеПараметрыСобытияПередПолучением();
	Оповестить(ИмяСобытияПередПолучением(), ПараметрыСобытия);
	
	Если Не ПараметрыСобытия.ЕстьОткрытыеФормы Тогда
		Возврат;
	КонецЕсли;
	
	Если ПараметрыОжидания.Включено = Неопределено
		И ИнтеграцияБСПБЭДКлиентСервер.УведомленияКлиентаДоступны() Тогда
		МенеджерУведомлений = Вычислить("УведомленияКлиента");
		Обработчик = Новый ОписаниеОповещения("ОповеститьОПолученииЭДО", АвтоматическоеПолучениеЭДОКлиент);
		//@skip-check dynamic-access-method-not-found
		МенеджерУведомлений.ПодключитьОбработчик(
			АвтоматическоеПолучениеЭДОКлиентСервер.КлючУведомленийКлиента(), Обработчик);
		ПараметрыОжидания.ИспользоватьУведомленияКлиента = Истина;
	КонецЕсли;
	
	ПараметрыОжидания.ДатаПолучения = ОбщегоНазначенияКлиент.ДатаСеанса();
	ПараметрыОтправки = НовыеПараметрыПериодическойОтправкиДанных();
	ПараметрыОтправки.Включено = ПараметрыОжидания.Включено;
	ПараметрыОтправки.ИспользоватьУведомленияКлиента = ПараметрыОжидания.ИспользоватьУведомленияКлиента;
	Параметры.Вставить(АвтоматическоеПолучениеЭДОКлиентСервер.КлючПараметраПериодическойОтправкиДанных(),
		ПараметрыОтправки);
	
	#КонецУдаления
	#Вставка
	// Доработка расширения: отметка о вызове (клиентский модуль, без серверных вызовов)
	ПерехватВыполнен = Истина;
	
	#КонецВставки
КонецПроцедуры

После (сгенерировано инструментом под 3.0.14):

&ИзменениеИКонтроль("ПередПериодическойОтправкойДанныхКлиентаНаСервер")
Процедура Расш3_ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры) Экспорт
	#Удаление
	
	Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОжидания = ПараметрыОжидания();
	
	Если ПараметрыОжидания.Включено = Ложь
		Или Не ПериодОжиданияЗавершен(ПараметрыОжидания.ДатаПолучения) Тогда
		Возврат;
	КонецЕсли;
	
	Если ПараметрыОжидания.Включено = Истина Тогда
		
		ПараметрыСобытия = НовыеПараметрыСобытияПередПолучением();
		Оповестить(ИмяСобытияПередПолучением(), ПараметрыСобытия);
		
		Если Не ПараметрыСобытия.ЕстьОткрытыеФормы Тогда
			Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
	Если ПараметрыОжидания.Включено = Неопределено
		И ИнтеграцияБСПБЭДКлиентСервер.УведомленияКлиентаДоступны() Тогда
		МенеджерУведомлений = Вычислить("УведомленияКлиента");
		Обработчик = Новый ОписаниеОповещения("ОповеститьОПолученииЭДО", АвтоматическоеПолучениеЭДОКлиент);
		//@skip-check dynamic-access-method-not-found
		МенеджерУведомлений.ПодключитьОбработчик(
			АвтоматическоеПолучениеЭДОКлиентСервер.КлючУведомленийКлиента(), Обработчик);
		ПараметрыОжидания.ИспользоватьУведомленияКлиента = Истина;
	КонецЕсли;
	
	ПараметрыОжидания.ДатаПолучения = ОбщегоНазначенияКлиент.ДатаСеанса();
	ПараметрыОтправки = НовыеПараметрыПериодическойОтправкиДанных();
	ПараметрыОтправки.Включено = ПараметрыОжидания.Включено;
	ПараметрыОтправки.ИспользоватьУведомленияКлиента = ПараметрыОжидания.ИспользоватьУведомленияКлиента;
	Параметры.Вставить(АвтоматическоеПолучениеЭДОКлиентСервер.КлючПараметраПериодическойОтправкиДанных(),
		ПараметрыОтправки);
	
	#КонецУдаления
	#Вставка
	// Доработка расширения: отметка о вызове (клиентский модуль, без серверных вызовов)
	ПерехватВыполнен = Истина;
	#КонецВставки
КонецПроцедуры

Пример Б. Два блока: структура сохраняется

Тот же метод, но перехват разрезан на два фрагмента, и вторая вставка использует переменную из первой. Порядок менять нельзя.

До:

&ИзменениеИКонтроль("ПередПериодическойОтправкойДанныхКлиентаНаСервер")
Процедура Расш7_ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры)
	#Удаление
	
	Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОжидания = ПараметрыОжидания();
	
	Если ПараметрыОжидания.Включено = Ложь
		Или Не ПериодОжиданияЗавершен(ПараметрыОжидания.ДатаПолучения) Тогда
		Возврат;
	КонецЕсли;
	#КонецУдаления
	#Вставка
	ПараметрыДляЛога = "вставка-1";
	#КонецВставки
	#Удаление
	
	ПараметрыСобытия = НовыеПараметрыСобытияПередПолучением();
	Оповестить(ИмяСобытияПередПолучением(), ПараметрыСобытия);
	
	Если Не ПараметрыСобытия.ЕстьОткрытыеФормы Тогда
		Возврат;
	КонецЕсли;
	
	Если ПараметрыОжидания.Включено = Неопределено
		И ИнтеграцияБСПБЭДКлиентСервер.УведомленияКлиентаДоступны() Тогда
		МенеджерУведомлений = Вычислить("УведомленияКлиента");
		Обработчик = Новый ОписаниеОповещения("ОповеститьОПолученииЭДО", АвтоматическоеПолучениеЭДОКлиент);
		//@skip-check dynamic-access-method-not-found
		МенеджерУведомлений.ПодключитьОбработчик(
			АвтоматическоеПолучениеЭДОКлиентСервер.КлючУведомленийКлиента(), Обработчик);
		ПараметрыОжидания.ИспользоватьУведомленияКлиента = Истина;
	КонецЕсли;
	
	ПараметрыОжидания.ДатаПолучения = ОбщегоНазначенияКлиент.ДатаСеанса();
	ПараметрыОтправки = НовыеПараметрыПериодическойОтправкиДанных();
	ПараметрыОтправки.Включено = ПараметрыОжидания.Включено;
	ПараметрыОтправки.ИспользоватьУведомленияКлиента = ПараметрыОжидания.ИспользоватьУведомленияКлиента;
	Параметры.Вставить(АвтоматическоеПолучениеЭДОКлиентСервер.КлючПараметраПериодическойОтправкиДанных(),
		ПараметрыОтправки);
	
	#КонецУдаления
	#Вставка
	Сообщить("Лог: " + ПараметрыДляЛога);
	#КонецВставки
КонецПроцедуры

После:

&ИзменениеИКонтроль("ПередПериодическойОтправкойДанныхКлиентаНаСервер")
Процедура Расш7_ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры) Экспорт
	#Удаление
	
	Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОжидания = ПараметрыОжидания();
	
	Если ПараметрыОжидания.Включено = Ложь
		Или Не ПериодОжиданияЗавершен(ПараметрыОжидания.ДатаПолучения) Тогда
		Возврат;
	КонецЕсли;
	#КонецУдаления
	#Вставка
	ПараметрыДляЛога = "вставка-1";
	#КонецВставки
	#Удаление
	
	Если ПараметрыОжидания.Включено = Истина Тогда
		
		ПараметрыСобытия = НовыеПараметрыСобытияПередПолучением();
		Оповестить(ИмяСобытияПередПолучением(), ПараметрыСобытия);
		
		Если Не ПараметрыСобытия.ЕстьОткрытыеФормы Тогда
			Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
	Если ПараметрыОжидания.Включено = Неопределено
		И ИнтеграцияБСПБЭДКлиентСервер.УведомленияКлиентаДоступны() Тогда
		МенеджерУведомлений = Вычислить("УведомленияКлиента");
		Обработчик = Новый ОписаниеОповещения("ОповеститьОПолученииЭДО", АвтоматическоеПолучениеЭДОКлиент);
		//@skip-check dynamic-access-method-not-found
		МенеджерУведомлений.ПодключитьОбработчик(
			АвтоматическоеПолучениеЭДОКлиентСервер.КлючУведомленийКлиента(), Обработчик);
		ПараметрыОжидания.ИспользоватьУведомленияКлиента = Истина;
	КонецЕсли;
	
	ПараметрыОжидания.ДатаПолучения = ОбщегоНазначенияКлиент.ДатаСеанса();
	ПараметрыОтправки = НовыеПараметрыПериодическойОтправкиДанных();
	ПараметрыОтправки.Включено = ПараметрыОжидания.Включено;
	ПараметрыОтправки.ИспользоватьУведомленияКлиента = ПараметрыОжидания.ИспользоватьУведомленияКлиента;
	Параметры.Вставить(АвтоматическоеПолучениеЭДОКлиентСервер.КлючПараметраПериодическойОтправкиДанных(),
		ПараметрыОтправки);
	
	#КонецУдаления
	#Вставка
	Сообщить("Лог: " + ПараметрыДляЛога);
	#КонецВставки
КонецПроцедуры

Обратите внимание: блоков #Удаление осталось два, вставка ПараметрыДляЛога = "вставка-1"; по-прежнему между фрагментами, а Сообщить(...) — после второго. При этом во втором типовом фрагменте появился новый блок поставщика Если ПараметрыОжидания.Включено = Истина.

 

Пример В. Доработка, на которую опиралось расширение, исчезла

Расширение вызывает метод, который вы сами добавили в доработанную конфигурацию, а в новой версии доработку не перенесли.

Расширение Метод Директива Статус Замечание
Расш6_Доработка АвтоматическоеПолучениеЭДО.ПечатьКомплектаСИЗ Вызов Метод исчез Вызывался в расширении, в текущей конфигурации отсутствует

Расширение при этом устанавливается и компилируется. Ошибка проявится только в работе.

 

CLI для CI/CD

В поставку входит консольная утилита PerehvatyCli.exe с исходным кодом — для автоматической проверки расширений в конвейере, а не руками перед релизом.

PerehvatyCli.exe --source C:\dumps\old --current C:\dumps\new ^
                 --ext "C:\dumps\extensions" --out report.csv

Полный комплект УНФ (две выгрузки, ~3 ГБ, 130 тыс. файлов) — около 30 секунд.

Важно. Утилита предоставляется «как есть», без гарантий, и запускается на ваш страх и риск. Она только читает выгрузки и пишет один CSV, исходный код приложен.

 

Честно об ограничениях

  • Ничего не меняет в базе и расширениях: читает выгрузки, пишет CSV и файлы в папку Предложено.
  • Не запускает никаких программ и не пишет во временные каталоги — только средствами 1С.
  • Читает только нужные модули (десятки файлов), а не десятки тысяч.
  • Только Designer XML, EDT-выгрузки — в планах.
  • Не заменяет Конфигуратор: перенести перехват и пересобрать .cfe — вручную.

 

Характеристики

Параметр Значение
Тип Расширение конфигурации (.cfe)
Платформа 1С 8.3.24 и выше (проверено на 8.5.1 x64)
Конфигурации БСП-совместимые: УНФ 3.0 (проверено), УТ 11, БП 3.0, ERP 2.5, КА 2.5
Выгрузки три каталога Designer XML
Изменения в базе   Нет
Лицензия

 Бессрочная, одна организация

 

Вопросы и ответы

Нужно ли публиковать базу или давать права администратора?

Нет. Работа идёт с выгрузками в файлы.

Он сам исправит расширение?

Готовит файл перехвата в папке Предложено. Перенос и пересборку .cfe делаете вы — осознанное ограничение.

Что если расширений несколько?

Укажите родительский каталог — обработает все за один прогон.

Есть ли ограничения по числу модулей?

Нет. Полная версия без демо-режимов.

 

Буду рад любой обратной связи, пишите предложения, обсудим.

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.362

Вступайте в нашу телеграмм-группу Инфостарт

Расширение БСП Обновление CI/CD УНФ

См. также

Архивирование (backup) Обновление 1С Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Платформа 8.3.17, MS SQL Server: обновление конфигурации падает через 15 секунд на этапе обновления предопределённых данных, и конфигуратор при каждом входе предлагает только повторить. Проверьте у себя, когда сделана последняя полная копия базы: у нас её не было почти месяц. Разбор по минутам: что не помогло (перезапуск агента сервера 1С, перезагрузка, пакетный /UpdateDBCfg, три совета со стороны) и почему. Как ibcmd достал .dt из базы, которая не открывается, и как новую базу подставили под старым именем в кластере 1С через rac, не трогая пользователей. Простой 57 минут, потерь данных нет. Отдельно ошибки ИИ-агента Claude, который работал на сервере, и порядок действий на случай, если это случилось у вас.

03.11.2026    425    nedomolkov.ivan    10    

5

Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

Вторая часть серии о переходе ERP 2.5 на 2.6. Я сравнил чистые выгрузки 2.5.27.88, 2.6.1.70 и 2.6.2.59 и выписал то, чего нет в официальных описаниях версий: какие экспортные методы удалены поимённо, какие документы больше нельзя создать и при каком условии, что переименовали без предупреждения. Из двенадцати механизмов, от которых отказывается 1С, к 2.6.2 удалены только два, а большая часть удалённого к ним не относится. Отдельно разбираю, почему перехватчики &ИзменениеИКонтроль ломаются на процедурах, где поменялся только английский текст, и почему доработки выгоднее готовить сразу под 2.6.2. Будет полезно разработчикам, которые сопровождают расширения и внешние обработки на ERP 2.5.27, и тем, кто планирует сроки перехода.

20.10.2026    865    lexatsch    6    

8

Обновление 1С Разработчик 1С 8.3 1С 8.5 Абонемент ($m)

Перед обновлением типовой конфигурации обработка читает код ваших доработок — внешних обработок, отчетов и расширений — и сверяет каждое обращение к конфигурации со старым и новым релизом. Результат — один отчет по всем доработкам: файл и строка, сам фрагмент кода и понятная причина («метод теперь принимает один параметр», «значение перечисления удалено», «перехватываемый метод не найден»). Исходники релизов и обработок можно подготовить прямо из обработки — пакетным запуском Конфигуратора.

3 стартмани

19.10.2026    283    1    InShallaH    0    

3

Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

1С считает, что перейти с ERP 2.5 на 2.6 не сложнее, чем обновиться между версиями длительной поддержки, а обязательным переход станет не раньше 30 апреля 2027 года. Я решил проверить это заранее на нашей доработанной ERP 2.5.27, где есть два больших расширения и 517 внешних отчётов и обработок. Форма готовности нашла четыре механизма, которые надо перевести, а про код промолчала. Проверка применимости на чистой 2.6.1 выдала 478 проблем, и настоящих среди них меньше сотни. А сверка кода со словарём изменений нашла ещё 63 проблемы, которых проверка применимости вообще не видит. Часть из них не даст открыть модуль, остальные вылезут уже у пользователей. Рассказываю, как проверить применимость расширения к 2.6.1 без записи в базу, что ловит компилятор, что ломается чаще всего и чем это заменить.

16.10.2026    592    lexatsch    0    

3

Инструментарий разработчика Обновление 1С Разработчик 1С 8.3 Бесплатно (free)

Бесплатная внешняя обработка: до обновления типовой показывает, какие ваши внешние обработки и печатные формы после него упадут. Находит в их коде вызовы общих модулей и менеджеров типовой и сверяет каждый с текущей конфигурацией и с выгрузкой нового релиза: есть ли метод, экспортный ли, сходится ли число параметров. Обработки берёт из справочника или из папки .epf и .erf, без конфигуратора. У каждого вызова статус, строка и причина.

29.09.2026    1160    139    nedomolkov.ivan    2    

9

Рефакторинг и качество кода Обновление 1С Разработчик 1С 8.3 Бесплатно (free)

Первоначальная задача заключалась в локальном переносе добавленных объектов метаданных (справочников, документов) и кастомной логики в расширение без потери накопленных данных. Но в ходе проекта, когда работы были уже практически завершены, заказчик принял решение полностью вернуть конфигурацию к типовому виду и перенести в расширение все измененные свойства стандартных объектов, включая изменения типов реквизитов.

22.09.2026    1142    1c-izh    2    

7
Для отправки сообщения требуется регистрация/авторизация