Как адаптировать расширения и доработки при переходе на УТ 11.5.22 и ERP 2.5.22 из-за переименования общих модулей?

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

С выходом обновлений для торговых конфигураций, таких как УТ 11.5.22, КА 2.5.22 и ERP 2.5.22, многие разработчики столкнулись с критической проблемой: перестал работать программный код, отвечающий за создание документов, расчет цен, пересчет сумм и заполнение табличных частей. В этой статье мы подробно разберем, почему это произошло, что именно изменилось в архитектуре конфигураций и как эффективно адаптировать свои расширения и внешние обработки под новые реалии платформы 1С:Предприятие 8.3.27.

Выясним причину: масштабный рефакторинг ядра

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

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

Разберем конкретные изменения в именах модулей

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

  1. ОбработкаТабличнойЧастиКлиент — теперь называется ПакетнаяОбработкаТабличнойЧастиКлиент.
  2. ОбработкаТабличнойЧастиСервер — теперь называется ПакетнаяОбработкаТабличнойЧастиСервер.
  3. ОбщегоНазначенияУТ — во многих местах заменяется на модули с префиксом Пакетная или переносится в модули менеджеров.

Важно понимать, что изменились не только названия. Изменились и сигнатуры методов. Многие процедуры теперь ожидают на вход не конкретные значения, а структуры, описывающие пакет изменений. Это означает, что простое переименование модуля в коде может привести к ошибке «Недостаточно фактических параметров».

Способ 1: Прямая адаптация кода и расширений

Посмотрим на пример того, как выглядел вызов раньше, и как он должен выглядеть теперь. Предположим, вы вызывали пересчет суммы в строке:


// Старый вариант (не работает в 11.5.22)
ОбработкаТабличнойЧастиКлиент.РассчитатьСуммуТабличнойЧасти(ТекущаяСтрока, Объект);

// Новый вариант (упрощенно)
ПакетнаяОбработкаТабличнойЧастиКлиент.РассчитатьСуммуТабличнойЧасти(ТекущаяСтрока, Объект);

Однако, если ваше расширение использует аннотацию &Вместо для перехвата процедур в старом модуле ОбработкаТабличнойЧастиКлиент, расширение просто не применится при запуске, так как объект-источник отсутствует в метаданных. В этом случае вам необходимо:

  1. Добавить в расширение новый модуль ПакетнаяОбработкаТабличнойЧастиКлиент.
  2. Перенести в него логику из старого обработчика.
  3. Тщательно проверить состав параметров, так как 1С могла добавить новые обязательные параметры в типовую процедуру.

Способ 2: Создание «обертки» для обратной совместимости

Если у вас большое количество внешних обработок и отчетов, которые сложно обновить одномоментно, проанализируем более гибкий подход. Мы можем создать в основной конфигурации (или через расширение) новый общий модуль со старым именем (например, ОбработкаТабличнойЧастиКлиент) и прописать в нем вызовы новых методов.

Рассмотрим пример реализации такого модуля-прослойки:


// В модуле ОбработкаТабличнойЧастиКлиент
Процедура РассчитатьСуммуТабличнойЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт
    // Пробрасываем вызов в новый пакетный модуль
    ПакетнаяОбработкаТабличнойЧастиКлиент.РассчитатьСуммуТабличнойЧасти(СтрокаТабличнойЧасти, ДокументОбъект);
КонецПроцедуры

Этот метод позволяет застраховаться от ошибок во внешних компонентах, но требует осторожности, если логика внутренней работы процедуры существенно изменилась (например, стала асинхронной).

Способ 3: Универсальный вызов с проверкой релиза

Для разработчиков тиражных решений, которые должны работать как на старых (11.5.19), так и на новых (11.5.22) релизах, целесообразно использовать проверку версии конфигурации или проверку существования модуля. Выясним, как это реализовать программно:


Если Метаданные.ОбщиеМодули.Найти("ПакетнаяОбработкаТабличнойЧастиКлиент") <> Неопределено Тогда
    Выполнить("ПакетнаяОбработкаТабличнойЧастиКлиент.РассчитатьСумму(Параметры)");
Иначе
    Выполнить("ОбработкаТабличнойЧастиКлиент.РассчитатьСумму(Параметры)");
КонецЕсли;

Использование Выполнить() или Вычислить() позволяет избежать ошибок компиляции модуля на разных версиях платформы, так как проверка наличия модуля происходит в момент исполнения кода.

Особенности работы с асинхронностью

Проанализируем еще один важный аспект: новые пакетные модули тесно завязаны на асинхронные вызовы и длительные операции. Теперь расчеты в табличных частях могут выполняться не мгновенно. Если ваш код ожидает, что сразу после вызова процедуры РассчитатьСумму значение в поле Объект.СуммаДокумента обновится, вы можете столкнуться с тем, что данные еще не рассчитаны.

Рекомендация: При работе с новыми механизмами всегда проверяйте, не требуется ли использование процедур обратного вызова (оповещений), которые стали стандартом для современных конфигураций на базе БСП.

Итоги и рекомендации

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

  1. Провести аудит всех расширений на предмет использования модулей ОбработкаТабличнойЧасти... и ОбщегоНазначенияУТ....
  2. При использовании &Вместо — перенести перехватчики в модули с припиской Пакетная.
  3. По возможности минимизировать зависимость от глобальных общих модулей, перенося логику в модули менеджеров объектов или используя программный интерфейс (API), который 1С старается сохранять более стабильным.
  4. Обратить внимание на новый механизм «Длительные операции при расчете в табличных частях», если вы работаете с очень большими документами.

Такой подход позволит не только исправить текущие ошибки, но и подготовить вашу систему к дальнейшим архитектурным изменениям, которые неизбежно последуют в развитии линейки ERP 2.5/2.6.

← На главную