При работе с расширениями в системе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда после обновления типовой конфигурации расширение перестает применяться (проанализировать ситуацию поможет Analyzer 1C — веб-инструмент для анализа зависимостей). В окне управления расширениями появляется предупреждение: «Проверка применимости: обнаружены ошибки», а в колонке действий предлагается «Восстановить соответствие с методом конфигурации». Попытка выполнить это действие стандартными средствами часто приводит к ошибке об отсутствии настроенной внешней программы слияния. В этой статье мы подробно разберем, почему возникает эта проблема, как настроить инструменты для ее решения и какие существуют альтернативные способы исправления кода (например, конвертер расширения в патч).
Проанализируем механику работы расширений. Большинство современных расширений используют директиву &ИзменениеИКонтроль. Этот механизм позволяет изменять логику типовых процедур и функций, сохраняя при этом контроль над их целостностью. Когда вы добавляете метод в расширение с этой аннотацией, платформа сохраняет не только сам код, но и специальный скрытый идентификатор — хеш-сумму исходного метода из основной конфигурации.
Рассмотрим ситуацию: фирма «1С» выпускает обновление (для контроля стоит выполнить анализ изменений конфигурации). В новой версии в типовой процедуре, которую вы перехватили, изменился хотя бы один символ: добавился пробел, изменился комментарий или порядок параметров. Даже если логика осталась прежней, хеш-сумма метода в основной конфигурации изменилась. Платформа видит, что «эталон», на основе которого строилось расширение, больше не совпадает с реальностью, и блокирует применение расширения, чтобы не допустить непредсказуемого поведения программы (в аудите поможет статический анализатор кода).
Выясним причины, по которым проверка может провалиться даже при визуальном сходстве кода:
Если конфигуратор выдает сообщение «Объединение с помощью внешней программы не настроено», это означает, что система не может автоматически сопоставить ваш измененный код с новым кодом поставщика. Для решения этой задачи профессиональные разработчики используют утилиту KDiff3.
Разберем по шагам процесс настройки:
KDiff3 (это бесплатное ПО с открытым исходным кодом).kdiff3.exe.После настройки, при нажатии на гиперссылку «Восстановить соответствие», откроется окно KDiff3, где в трех панелях будет показан старый типовой код, ваш код из расширения и новый код из обновления. Вам потребуется вручную подтвердить изменения, чтобы платформа сформировала новую актуальную версию метода с правильным хешем.
Если настройка внешних программ кажется избыточной или KDiff3 не справляется (что иногда случается из-за кэширования), проанализируем самый надежный «ручной» способ. Этот метод заключается в полном пересоздании привязки к типовой процедуре.
Выполним следующие действия:
Посмотрим на пример правильного оформления кода внутри метода с контролем:
&ИзменениеИКонтроль("РассчитатьЗарплату")
Процедура РассчитатьЗарплату(Параметры)
// Код типовой конфигурации, который нельзя менять напрямую
Результат = 0;
#Вставка
// Здесь мы добавляем свою логику
Если Параметры.Срочно Тогда
Результат = Результат * 1.5;
КонецЕсли;
#КонецВставки
#Удаление
// Здесь находится код типовой конфигурации, который мы хотим исключить
СтандартныйЛог(Результат);
#КонецУдаления
КонецПроцедуры
Важно: Никогда не меняйте текст, который находится вне блоков #Вставка или #Удаление. Любое изменение в «неприкосновенной» части кода приведет к очередной ошибке применимости при следующем обновлении или проверке.
Проанализируем ситуацию: если типовой метод меняется в каждом релизе (например, расчет налогов в ЗУП), постоянная актуализация &ИзменениеИКонтроль может стать трудозатратной — автоматизировать процесс поможет автоматическая проверка расширений после обновлений. В таких случаях стоит рассмотреть переход на другие аннотации:
&Перед — ваш код выполнится до начала основной процедуры. Отлично подходит для проверок или подготовки данных.&После — ваш код выполнится после завершения основной процедуры. Удобно для модификации уже рассчитанных результатов или записи в дополнительные регистры.Эти директивы не проверяют текст основного метода на полное соответствие, а значит, гораздо устойчивее к обновлениям. Однако они не позволяют «вырезать» или изменить логику в середине типового кода.
Иногда разработчики замечают, что даже при наличии ошибки в окне «Проверка применимости», расширение в режиме предприятия продолжает работать. Рассмотрим, почему это опасное заблуждение. Во-первых, если проверка не пройдена, 1С может использовать старую кэшированную версию метода, которая не учитывает критические изменения законодательства из нового релиза. Во-вторых, при очистке серверного кэша расширение может просто не подключиться, и пользователи внезапно окажутся без необходимых доработок.
Резюмируем: Всегда добивайтесь состояния, когда в окне расширений стоит зеленая галочка, подтверждающая успешную проверку применимости. Это залог стабильной работы информационной системы после любых обновлений — для контроля стабильности поможет набор автотестов для регресс-тестирования 1С.