Переход на новые версии платформы 1С:Предприятие часто приносит не только новые возможности, но и неожиданные изменения в привычных рабочих процессах. Одной из таких проблем в ветке 8.3.27 стало существенное замедление процесса обновления конфигурации базы данных (БД) при работе с расширениями. Даже минимальное изменение программного кода в модуле расширения может приводить к ожиданию длительностью в минуту и более, что значительно снижает темп разработки.
В этой статье мы подробно разберем, почему так происходит, какие внутренние механизмы платформы задействованы в этом процессе и как можно ускорить обновление конфигурации в условиях современной разработки на базе 1С:Зарплата и Управление Персоналом и других тяжелых решений.
Проанализируем ситуацию: начиная с версии 8.3.27, разработчики 1С значительно усилили контроль целостности данных при применении расширений. Рассмотрим основные факторы, влияющие на скорость:
Как показывает практика и опыт участников профессиональных сообществ, первые релизы ветки 8.3.27 (например, 8.3.27.2130) содержали неоптимальные алгоритмы работы с системными таблицами при наличии в расширениях собственных регистров или документов. Выясним, как исправить ситуацию самым простым способом.
Протестируем поведение системы на более свежих сборках. В релизе 8.3.27.2214 и выше были применены первые патчи, оптимизирующие запросы к метаданным расширений. Пользователи отмечают, что время обновления сокращается примерно на 20–30% по сравнению с первыми выпусками ветки. Поэтому первым шагом при возникновении подобных задержек должна быть проверка наличия более актуального исправительного релиза платформы.
Разберем по шагам архитектурный подход, который поможет минимизировать время ожидания при активной разработке. Если ваше расширение содержит и метаданные, и программную логику, платформа будет проводить полную проверку при каждом изменении кода.
Рассмотрим стратегию разделения:
При таком подходе изменение кода в «легком» расширении будет происходить практически мгновенно, так как платформе не потребуется инициировать процессы проверки целостности таблиц БД.
Проанализируем ситуацию со стороны прикладного решения. Конфигурация Зарплата и Управление Персоналом (ЗУП) является одной из самых сложных с точки зрения метаданных. В ней используется огромное количество функциональных опций и подписок на события. Платформа 8.3.27 при обновлении любого расширения пытается актуализировать связи с этими опциями.
Если ваша основная конфигурация находится в высоком режиме совместимости (например, 8.3.24), то механизмы расширений работают по новым алгоритмам безопасности. Посмотрим на типичный сценарий: вы заимствуете форму документа и добавляете в нее обработчик события. Платформа в версии 8.3.27 проверит не только ваш код, но и все заимствованные элементы формы на предмет их соответствия текущей структуре основной конфигурации, что на тяжелых формах ЗУП занимает значительное время.
Иногда полезно программно анализировать состояние расширений, чтобы понять, какие из них могут замедлять систему. Рассмотрим пример кода, который позволяет получить информацию о подключенных расширениях и их статусе:
// Получим список всех установленных расширений конфигурации
МассивРасширений = РасширенияКонфигурации.Получить();
Для Каждого ТекущееРасширение Из МассивРасширений Цикл
// Проверим, активно ли расширение и нет ли ошибок применения
Если ТекущееРасширение.Активно Тогда
Сообщить("Расширение: " + ТекущееРасширение.Имя + " применено успешно.");
Иначе
Сообщить("Внимание! Расширение: " + ТекущееРасширение.Имя + " не активно.");
КонецЕсли;
КонецЦикла;
Важно помнить, что наличие ошибок в одном расширении может косвенно влиять на скорость валидации всей системы расширений при обновлении конфигурации базы данных.
Для минимизации задержек при обновлении на платформе 8.3.27 рекомендуем выполнить следующие действия:
Config и ConfigSave.Справочник или Документ в неактивном, но подключенном расширении все равно участвует в некоторых проверках при обновлении ИБ.Таким образом, «минутное ожидание» на платформе 8.3.27 — это чаще всего не баг, а следствие работы усиленных механизмов безопасности и валидации метаданных. Однако, используя актуальные билды платформы и грамотно разделяя расширения на логические блоки, мы можем вернуть комфортную скорость разработки.