Как адаптировать расширения и доработки при переходе на УТ 11.5.22 и платформу 8.3.27

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

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

Выясняем причину: Новая парадигма платформы 8.3.27

Основная причина глобальных изменений кроется не просто в желании методистов 1С переименовать модули, а во внедрении технологии оптимизации менеджеров объектов для пакетной обработки. Разберем по шагам, что это означает для производительности и архитектуры кода. Ранее при изменении любой строки в документе (например, количества товара) система инициировала серверный вызов для пересчета суммы, НДС или скидки конкретно для этой строки. Если пользователь вставлял в документ 100 строк через буфер обмена, происходило 100 последовательных вызовов сервера. Это создавало огромную нагрузку на сетевой трафик и СУБД, особенно в облачных решениях и веб-клиенте.

В платформе 8.3.27 реализован механизм, позволяющий передавать на сервер сразу массив строк или всю таблицу целиком. Платформа на уровне ядра теперь поддерживает массовые расчеты с использованием временных таблиц, что кардинально снижает количество "round-trips" (обращений между клиентом и сервером). В связи с этим вся логика типовых конфигураций была переписана под этот стандарт.

Проанализируем изменения в общих модулях

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

  1. Было: ОбработкаТабличнойЧастиКлиент — Стало: ПакетнаяОбработкаТабличнойЧастиКлиент
  2. Было: ОбработкаТабличнойЧастиСервер — Стало: ПакетнаяОбработкаТабличнойЧастиСервер
  3. Аналогичные изменения затронули модули ценообразования, скидок и распределения запасов, что также косвенно влияет на формирование отчета «Валовая прибыль предприятия».

Если в вашем расширении использовались вызовы методов из этих модулей, или, что более критично, вы использовали аннотации &Вместо, &Перед или &После для перехвата стандартной логики, стоит провести анализ подписок на события, иначе ваш код просто перестанет компилироваться или выполняться.

Разберем изменение сигнатур методов

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


// Старый формат (до УТ 11.5.22)
Процедура РассчитатьСуммуНДС(ТекущаяСтрока, ПараметрыРасчета) Экспорт
    // Логика расчета для ОДНОЙ строки
КонецПроцедуры

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


// Новый формат (УТ 11.5.22 + Платформа 8.3.27)
Процедура РассчитатьСуммуНДС(МассивСтрок, ПараметрыРасчета) Экспорт
    // Логика массового расчета через временные таблицы или циклы по массиву
КонецПроцедуры

Важный момент: если ваше расширение подменяло старую процедуру через &Вместо, то после обновления система может "тихо" перестать вызывать ваш код. Типовая конфигурация просто переключится на использование новых пакетных методов, а старые методы могут остаться в коде для обратной совместимости (помеченные как устаревшие), но реально вызываться больше не будут. Это приведет к тому, что ваши специфические расчеты перестанут работать без каких-либо явных ошибок в журнале регистрации.

Пошаговый план адаптации разработок

Для того чтобы привести наши расширения в соответствие с требованиями УТ 11.5.22, нам необходимо выполнить следующие действия:

1. Проверка минимальной версии платформы

Убедимся, что на сервере и у клиентов установлена платформа не ниже 8.3.27. Попытка запустить новую УТ на старой платформе приведет к ошибкам при обращении к новым методам менеджеров объектов, которые поддерживают пакетную обработку.

2. Поиск и замена обращений к модулям

Выполним глобальный поиск по конфигурации расширения. Все вызовы ОбработкаТабличнойЧастиКлиент и ОбработкаТабличнойЧастиСервер должны быть заменены на новые пакетные аналоги. Однако помните, что простого переименования недостаточно — нужно проверить контекст вызова.

3. Адаптация логики под массивы данных

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


// Пример адаптации вызова пересчета в расширении
&НаКлиенте
Процедура Мое_КоличествоПриИзмененииПосле(Элемент)
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    
    // Создаем массив из одной строки для совместимости с новым API
    МассивСтрок = Новый Массив;
    МассивСтрок.Добавить(ТекущаяСтрока.НомерСтроки - 1); // Часто передаются индексы или структуры
    
    ПараметрыРасчета = ПакетнаяОбработкаТабличнойЧастиКлиент.ПараметрыСтруктуры();
    // Заполняем параметры...
    
    ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьИзменениеРеквизита(
        Объект, 
        "Товары", 
        МассивСтрок, 
        "Количество", 
        ПараметрыРасчета);
КонецПроцедуры

4. Работа с ценообразованием и скидками

Особое внимание уделим подсистеме ценообразования. В версии 11.5.22 механизмы расчета цен "на лету" были полностью переведены на пакетные рельсы. Если ваше расширение модифицировало алгоритм расчета автоматических скидок или заполнения цен по статистике, вам придется переписать логику взаимодействия с модулем ЦенообразованиеКлиент и его серверными частями, ориентируясь на новые методы массовой обработки данных.

Риски и сложности отладки

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

Подводя итог, можно сказать, что обновление на УТ 11.5.22 — это не просто очередной технический релиз, а смена парадигмы программирования в экосистеме 1С. Переход на пакетную обработку требует от нас не только переименования модулей, но и переосмысления подходов к работе с данными табличных частей. Рекомендуется заранее подготовить тестовые базы и провести полный аудит всех расширений на предмет использования старых программных интерфейсов.

← На главную