Сохранится ли подписка на событие и кастомный общий модуль после обновления типовой конфигурации 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При сопровождении типовых решений, таких как 1С:Бухгалтерия 8.3, разработчики часто сталкиваются с необходимостью внедрения собственной логики. Одним из наиболее деликатных способов внедрения является использование механизма подписок на события. Однако возникает закономерный вопрос: насколько такая доработка устойчива к накатыванию очередного типового обновления от фирмы «1С»? Разберем эту ситуацию подробно, проанализируем риски и выясним, как сделать ваши изменения максимально «живучими».

Базовое поведение платформы при обновлении

Рассмотрим основной механизм обновления. Когда мы выполняем обновление через сравнение и объединение (или через автоматическую установку .cfu), платформа анализирует изменения в объектах метаданных. Важно понимать: новые объекты, которые вы создали самостоятельно в основной конфигурации (будь то ПодпискиНаСобытия или ОбщиеМодули), отсутствуют в конфигурации поставщика. Следовательно, при обновлении системе просто «нечем» их затирать. Они остаются в дереве метаданных как пользовательские объекты.

Таким образом, на вопрос «сохранится ли это всё?» мы можем дать утвердительный ответ. Однако это лишь верхушка айсберга. Давайте проанализируем, какие подводные камни ожидают нас в процессе эксплуатации обновленной базы.

Влияние на поддержку и режим обновления

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

  1. Усложнение процесса обновления: Вы больше не сможете обновлять конфигурацию «одной кнопкой» без предварительного контроля. При попытке обновления система пометит вашу конфигурацию как измененную, и вам придется вручную проверять окно сравнения и объединения.
  2. Риск потери контроля: Если по неосторожности при объединении снять галочки с ваших объектов или выбрать режим «Взять из конфигурации поставщика» для всей ветки, объекты могут быть удалены или заменены.

Логическая устойчивость: почему подписка может перестать работать

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

Рассмотрим подробнее пример с событием ОбработкаПроведения. Предположим, ваш код в подписке опирается на то, что в момент выполнения подписки у документа уже сформированы движения в определенном регистре. Если в обновлении 1С изменит логику и перенесет запись движений из основной формы обработки в дополнительные процедуры или изменит режим записи (например, с записи в конце транзакции на запись по ходу выполнения), ваша подписка может внезапно перестать «видеть» эти данные.

Посмотрим на пример кода, который часто размещается в общем модуле для обработки события:


Процедура МояПодпискаПриПроведении(Источник, Отказ, РежимПроведения) Экспорт
    // Если 1С изменит логику очистки движений перед проведением,
    // этот код может отработать некорректно
    Для Каждого Движение Из Источник.Движения.Хозрасчетный Цикл
        // Логика анализа проводок
    КонецЦикла;
КонецПроцедуры

Если после обновления объект Источник.Движения окажется не заполнен в нужный момент времени, ваша логика «сломается», хотя сам объект подписки будет на месте.

Проблема очередности выполнения

Выясним еще один важный момент: очередность. На одно и то же событие (например, ПриЗаписи справочника «Контрагенты») может быть назначено пять типовых подписок и одна ваша. Платформа 1С:Предприятие 8.3 не гарантирует строгого порядка вызова этих подписок. Если ваша логика зависит от того, что типовая подписка уже заполнила какие-то реквизиты, после обновления этот порядок может измениться, или появится новая типовая подписка, которая будет затирать ваши изменения. Это классическая проблема «гонки», которую трудно диагностировать.

Целостность метаданных и типы источников

Проанализируем структуру самой подписки. В поле Источник часто выбираются конкретные типы объектов. Если в новом релизе 1С переименует какой-то документ или изменит составной тип (например, удалит объект из состава определяемого типа, который вы использовали), подписка станет невалидной. Это приведет к ошибке при попытке обновить конфигурацию базы данных (динамическое обновление или обычное обновление F7 просто не пройдет из-за ошибок синтаксического контроля).

Рекомендуемая альтернатива: использование расширений

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

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

Чек-лист проверки после типового обновления

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

  1. Синтаксический контроль: Запустите Конфигурация - Проверка конфигурации. Это позволит выявить случаи, когда типы данных в подписках стали неверными.
  2. Проверка состава реквизитов: Убедитесь, что реквизиты объектов, которые вы используете в своем коде в ОбщемМодуле, не были удалены или переименованы (в типовых конфигурациях 1С часто переводит старые реквизиты в категорию «Удалить...» и создает новые).
  3. Тестирование бизнес-процесса: Проведите документ в ручном режиме и убедитесь, что ваша подписка срабатывает именно тогда, когда это необходимо, и видит все нужные данные в контексте транзакции.
  4. Анализ блокировок: Помните, что ваш код выполняется в той же транзакции. Если типовое проведение стало работать дольше, ваша подписка может спровоцировать ошибки превышения времени ожидания блокировок.

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

← На главную