Доброго времени!
Платформа 8.3.10.2667, конфигурация ERP 2.2.1.115, режим совместимости Версия 8.3.9.
Возникло желание перенести мною и моими коллегами написанный код из модулей основной конфигурации в расширение, используя тип вызова "&Вместо".
Т.е. имеется общий модуль "X" в нём процедура "Y", а в конце процедуры "Y" наш код. Перенеся весь код (и типовой, и не типовой) в расширение я затираю в основной конфе не типовой код и обновляю в дальнейшем конфу без проблем.
Начали терзать смутные сомнения:
Если тип вызова процедуры расширения "Y" будет "&Вместо", а при обновление релиза в процедуру "Y" (основной конфы) добавится строчка кода, то как я узнаю, что эта процедура у меня была когда-то добавлена в расширение и её надо тоже обновить?
Есть ли какой-нибудь механизм или минимально затратный способ сопоставления обновляемых модулей основной конфы с модулями расширения?
---
"&Вместо" логичнее использовать с ПродолжитьВызов()

т.е. когда отрабатывается и ваш код и типовой

я так и делаю, причем если в вашем коде есть асинхронные диалоги, открытие форм, вопросов и т.д., то в лоб это решение
не катит.

Но возможет финт когда в обработчике завершения этих диалогов мы вызываем тот же метод, что заключен во "&Вместо" с уже расширенными после выбора параметрами.
---
на сегодня способ только такой - открываем нужный модуль и вручную сравниваем нужные процедуры. Есть надежда, что в будущем появится какая-нибудь автопроверка.
---
Жаль. Спасибо!
---
"&Вместо" логичнее использовать с ПродолжитьВызов()

т.е. когда отрабатывается и ваш код и типовой

я так и делаю, причем если в вашем коде есть асинхронные диалоги, открытие форм, вопросов и т.д., то в лоб это решение
не катит.

Но возможет финт когда в обработчике завершения этих диалогов мы вызываем тот же метод, что заключен во "&Вместо" с уже расширенными после выбора параметрами.
---
Где-то наш код написан после типового, а где-то исправлен / закомментирован типовой.
Но спасибо за совет.
---
вот рабочий пример как во &Вместо решить задачу выполнения своего когда с ассихронным диалогом и выполнением типового кода. Получается такая скрытая рекурсия, но работает и по поводу изменения в типовой особо можно не беспокоиться

```1c
    // КадровыйУчетРасширенныйКлиент.ПередЗаписьюКадровогоДокументаВФормеЗавершение
    // Расширим функционал клиентского метода общего модуля ЗУП для вызова асихронных форм
    #Область Расш1_ПередЗаписьюКадровогоДокументаВФормеЗавершение

    //
    // После выбора УпрОргПараметры мы попадем во 2-ой вызов ЭТОГО ЖЕ метода, но уже в
    // ПродолжитьВызов(СтруктураПроверки, ДополнительныеПараметры) где в ДополнительныеПараметры.ПараметрыЗаписи
    // будет свойство "УпрОргПараметры". Если нет необходимости в выборе УпрОргПараметры, то пападем сразу
    // в ПродолжитьВызов(), т.е. в стандартное выполнение кода типовой конфигурации.
    //
    &Вместо("ПередЗаписьюКадровогоДокументаВФормеЗавершение")
    Процедура Расш1ПередЗаписьюКадровогоДокументаВФормеЗавершение(СтруктураПроверки, ДополнительныеПараметры)

    // Выделим параметры записи в переменную
    ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;

    // Определим свойство "УпрОрг" из параметров записи, // Устанавливается в методе модуля формы ЗаписатьНаКлиенте() или подобных для вида документа
    УпрОрг = Неопределено;
    ПараметрыЗаписи.Свойство("УпрОрг", УпрОрг);
    Если НЕ (ЗначениеЗаполнено(УпрОрг) И ТипЗнч(УпрОрг) = Тип("СправочникСсылка.Организации")) Тогда
    ПродолжитьВызов(СтруктураПроверки, ДополнительныеПараметры);
    Возврат; // Выбор параметров упр орг не предусмотрен для документа этого вида или это, например, 2-ой приказ о приеме по другой регламетной организации, т.е. в методе модуля формы ЗаписатьНаКлиенте() не инициализировали свойство "УпрОрг"
    КонецЕсли;

    // Сверим организацию текущего документа с управленческой
    ТекОбъект = ДополнительныеПараметры.Форма.Объект;
    ТекОрг = ТекОбъект.Организация;
    УпрОргРавноТекОрг = ?(УпрОрг = ТекОрг, Истина, Ложь);
    Если УпрОргРавноТекОрг Тогда
    ПродолжитьВызов(СтруктураПроверки, ДополнительныеПараметры);
    Возврат; // Выбор параметров упр орг не нужен, т.к. это документ по упр орг
    КонецЕсли;

    // Определим переменные режимов
    ПроведенПередЗаписью = ТекОбъект.Проведен;
    РежимЗаписи = ДополнительныеПараметры.ПараметрыЗаписи.РежимЗаписи;

    // Определим переменные необходимости выбора параметров упр орг
    УпрОргПараметрыВыбрать = НЕ ПроведенПередЗаписью И РежимЗаписи = РежимЗаписиДокумента.Проведение;
    УпрОргПараметрыВыбраны = ДополнительныеПараметры.ПараметрыЗаписи.Свойство("УпрОргПараметры");

    // Блок выбора параметров упр орг(на 1-ом проходе) и типового продолжения вызова(на 2-ом проходе)
    Если УпрОргПараметрыВыбрать И НЕ УпрОргПараметрыВыбраны Тогда
    Расш1УпрОргПараметрыВыбрать_ПередЗаписьюКадровогоДокументаВФ­орме(СтруктураПроверки, ДополнительныеПараметры);
    Иначе
    ПродолжитьВызов(СтруктураПроверки, ДополнительныеПараметры);
    КонецЕсли;

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

    //
    // Этот метод открывает дополнительные формы выбора при записи кадровых документов
    // определенных видов
    //
    // Главное назначение метода: В ДополнительныеПараметры.ПараметрыЗаписи(тип Структура)
    // добавить новый элемент с ключем "УпрОргПараметры".
    // ДополнительныеПараметры.ПараметрыЗаписи - "видят" обработчики событий
    // ПередЗаписью(), ПриЗаписи() в форме, объекте и подписках на события
    //
    // Если значение элемента по ключу "УпрОргПараметры" станет равно пустая структура,
    // значит для документа этого вида предусмотрен выбор, но в форме выбора выбор произвели НЕ полностью.
    // В этом случае документ НЕ будет скопирован в управленческую организацию и выдано предупреждение.
    //
    // Если значение элемента по ключу "УпрОргПараметры" станет равно НЕ пустая структура,
    // значит для документа этого вида предусмотрен выбор и в форме выбора выбор произвели полностью.
    // В этом случае документ будет скопирован в управленческую организацию.
    //
    // Если тип значения элемента по ключу "УпрОргПараметры" НЕ равен структура, например Неопределено,
    // значит для документа этого вида не предусмотрен выбор значений управленческой организации.
    // В этом случае документ НЕ будет скопирован в управленческую организацию.
    //
    Процедура Расш1УпрОргПараметрыВыбрать_ПередЗаписьюКадровогоДокументаВФ­орме(СтруктураПроверки, ДополнительныеПараметры)

    ФормаВладелец = ДополнительныеПараметры.Форма;
    ДокСсылка = ФормаВладелец.Объект.Ссылка;

    // Определим общие параметры формы вызова
    ФормаВызоваПараметры = Новый Структура;
    ФормаВызоваПараметры.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); // Системный параметр открытия формы
    ФормаВызоваПараметры.Вставить("УпрОрг", ДополнительныеПараметры.ПараметрыЗаписи.УпрОрг); // Дополнительный праметр формы вызова

    // Определим по типу документа полное имя формы вызова и параметры формы вызова
    ФормаВызоваИмя = "Обработка.Расш1ПараметрыВыбрать.Форма.";
    Если ТипЗнч(ДокСсылка) = Тип("ДокументСсылка.ПриемНаРаботу") Тогда
    ФормаВызоваИмя = ФормаВызоваИмя + "ПриемНаРаботу";
    Иначе
    ДополнительныеПараметры.ПараметрыЗаписи.Вставить("УпрОргПараметры", Неопределено); // Для такого типа документа не предусмотрен выбор УпрОргПараметры, уходим на стандарное выполнение метода
    КадровыйУчетРасширенныйКлиент.ПередЗаписьюКадровогоДокументаВФормеЗавершение(СтруктураПроверки, ДополнительныеПараметры);
    Возврат;
    КонецЕсли;

    // Установим дополнительные параметры обработчика оповещения формы вызова
    ФормаВызоваДополнительныеПараметры = Новый Структура;
    ФормаВызоваДополнительныеПараметры.Вставить("СтруктураПроверки", СтруктураПроверки);
    ФормаВызоваДополнительныеПараметры.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);

    // Определим обработчик асинхронного выбора и откроем форму вызова
    ФормаВызоваОбработчикЗакрытия =
    Новый ОписаниеОповещения("Расш1УпрОргПараметрыВыбрать_ПередЗаписьюКадровогоДокументаВ­ФормеЗавершение",
    КадровыйУчетРасширенныйКлиент, ФормаВызоваДополнительныеПараметры);

    ОткрытьФорму(ФормаВызоваИмя, ФормаВызоваПараметры, ФормаВладелец,,,,ФормаВызоваОбработчикЗакрытия);

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

    Процедура Расш1УпрОргПараметрыВыбрать_ПередЗаписьюКадровогоДокументаВФ­ормеЗавершение(РезультатЗакрытия, ФормаВызоваДополнительныеПараметры) Экспорт

    СтруктураПроверки = ФормаВызоваДополнительныеПараметры.СтруктураПроверки;
    ДополнительныеПараметры = ФормаВызоваДополнительныеПараметры.ДополнительныеПараметры;

    Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
    ДополнительныеПараметры.ПараметрыЗаписи.Вставить("УпрОргПараметры", РезультатЗакрытия); // Все выбрано для упр огр, необходимо создать копию документа в управленческой организации
    КадровыйУчетРасширенныйКлиент.ПередЗаписьюКадровогоДокументаВФормеЗавершение(СтруктураПроверки, ДополнительныеПараметры);
    Иначе
    СообщениеП = Новый СообщениеПользователю;
    СообщениеП.Текст ="Для документа не выбраны обязательные значения по управленческой организации, запись и проведение не выполнены!";
    СообщениеП.Сообщить();
    ДополнительныеПараметры.ПараметрыЗаписи.Вставить("УпрОргПараметры", Новый Структура); // НЕ Все выбрано для упр огр, НЕ создаем копию документа в управленческой организации
    КонецЕсли;

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

    #КонецОбласти
```