Как ускорить долгое обновление базы 1С при использовании расширений с собственными данными?

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

При сопровождении крупных корпоративных систем на базе 1С, таких как 1С:Комплексная автоматизация или 1С:ERP Управление предприятием, специалисты часто сталкиваются с лавинообразным ростом времени обновления конфигурации в режиме Конфигуратора. Процесс сравнения и объединения метаданных, который ранее занимал не более часа, со временем может растянуться на 5 и более часов.

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

Выясняем причину: почему расширения замедляют сравнение метаданных?

Многие разработчики ошибочно полагают, что на скорость работы Конфигуратора влияет исключительно физический размер базы данных (размер таблиц на СУБД) или кэш локального компьютера. Однако на практике даже после очистки устаревших данных и уменьшения объема базы (например, с 17 Гб до 4 Гб) время сравнения конфигураций может оставаться прежним.

Рассмотрим подробнее, что происходит «под капотом» платформы 1С при обновлении базы, в которой установлено расширение с собственными данными:

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

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

---

Решение 1. Технологический метод: Обновление через предварительную подготовку CF-файла на копии

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

Разберем этот процесс по шагам:

  1. Создаем резервную копию рабочей базы данных. Разворачиваем её на тестовом сервере или локальном компьютере программиста.
  2. На копии базы полностью удаляем проблемное расширение конфигурации. Внимание: при этом физически удалятся все данные, которые хранятся в объектах этого расширения на копии, но для тестовой базы это не имеет значения.
  3. Выполняем стандартное обновление конфигурации на копии до нужного релиза. Поскольку расширение удалено, процесс сравнения и объединения пройдет максимально быстро (обычно в пределах 1–1.5 часов для крупных конфигураций типа КА 2.4).
  4. После успешного обновления основной конфигурации на копии, выгружаем файл конфигурации в локальный каталог (меню Конфигурация -> Сохранить конфигурацию в файл...). На выходе мы получаем готовый файл 1cv8.cf нужного релиза, адаптированный под наши доработки.
  5. Переходим в Конфигуратор рабочей (продуктивной) базы данных, где расширение и все его данные находятся в исходном, нетронутом состоянии.
  6. Выполняем команду меню Конфигурация -> Загрузить конфигурацию из файла... и выбираем наш подготовленный файл 1cv8.cf.

Крайне важно: необходимо использовать именно команду Загрузить конфигурацию из файла, а не команду Сравнить, объединить с конфигурацией из файла. При полной загрузке файла конфигурации платформа 1С не запускает дерево интерактивного сравнения объектов, а просто замещает структуру основной конфигурации на новую. При этом таблицы расширения и данные в них на рабочей базе остаются в полной безопасности, так как само расширение никак не затрагивается в процессе импорта .cf. После загрузки выполняем обновление конфигурации базы данных клавишей F7.

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

---

Решение 2. Архитектурный метод: Перенос метаданных из расширения в основную конфигурацию

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

Рассмотрим алгоритм безопасного переноса данных на примере справочника:

  1. В основной конфигурации создаем новый справочник (например, _Демо_СправочникНовый) с точно такой же структурой реквизитов, как и в расширении (например, Расш_СправочникНовый).
  2. Пишем простую обработку для переноса данных. Пример кода для переноса элементов справочника:

ВыборкаИсточника = Справочники.Расш_СправочникНовый.Выбрать();
Пока ВыборкаИсточника.Следующий() Цикл
    НовыйЭлемент = Справочники._Демо_СправочникНовый.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, ВыборкаИсточника);
    НовыйЭлемент.Код = ВыборкаИсточника.Код;
    НовыйЭлемент.Наименование = ВыборкаИсточника.Наименование;
    
    // Если есть иерархия, не забываем переносить Родителя после создания всех элементов
    Попытка
        НовыйЭлемент.Записать();
    Исключение
        ЗаписьЖурналаРегистрации("ПереносДанных", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;
  1. Запускаем обработку в режиме 1С:Предприятие и убеждаемся, что все данные успешно скопированы в объект основной конфигурации. Для сопоставления ссылок в связанных документах также потребуется написать код поиска и замены значений.
  2. После успешного переноса данных и перенастройки кода модулей на работу с новым справочником из основной конфигурации, мы можем безопасно удалить старый справочник из расширения.

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

Дополнительные рекомендации по профилактике Конфигуратора

Для поддержания высокой скорости работы Конфигуратора мы рекомендуем регулярно выполнять следующие действия:

← На главную