При сопровождении крупных корпоративных систем на базе 1С, таких как 1С:Комплексная автоматизация или 1С:ERP Управление предприятием, специалисты часто сталкиваются с лавинообразным ростом времени обновления конфигурации в режиме Конфигуратора. Процесс сравнения и объединения метаданных, который ранее занимал не более часа, со временем может растянуться на 5 и более часов.
Особенно остро эта проблема проявляется в информационных базах, где активно применяются расширения конфигурации (файлы с расширением .cfe), содержащие собственные объекты метаданных: новые справочники, документы или дополнительные реквизиты заимствованных объектов. В этой статье мы подробно проанализируем причины такого поведения платформы 1С:Предприятие и разберем два эффективных метода решения проблемы, которые помогут сократить время обновления в несколько раз.
Многие разработчики ошибочно полагают, что на скорость работы Конфигуратора влияет исключительно физический размер базы данных (размер таблиц на СУБД) или кэш локального компьютера. Однако на практике даже после очистки устаревших данных и уменьшения объема базы (например, с 17 Гб до 4 Гб) время сравнения конфигураций может оставаться прежним.
Рассмотрим подробнее, что происходит «под капотом» платформы 1С при обновлении базы, в которой установлено расширение с собственными данными:
Активно для расширения в списке отключает его работу исключительно в режиме 1С:Предприятие. Для Конфигуратора структура метаданных расширения остается видимой и активной, поэтому процедура сравнения конфигураций по-прежнему занимает много времени. Только полное физическое удаление расширения (вместе со всеми его данными) убирает эту нагрузку.Для решения этой проблемы мы можем использовать два принципиально разных подхода: технологический обходной путь (обновление через подготовленный файл конфигурации) и архитектурную реорганизацию метаданных.
---
Этот метод является самым быстрым в реализации и не требует немедленного изменения архитектуры вашей системы. Суть метода заключается в том, чтобы полностью исключить тяжелый процесс интерактивного сравнения и объединения метаданных на рабочей (продуктивной) базе данных.
Разберем этот процесс по шагам:
1cv8.cf нужного релиза, адаптированный под наши доработки.1cv8.cf.Крайне важно: необходимо использовать именно команду Загрузить конфигурацию из файла, а не команду Сравнить, объединить с конфигурацией из файла. При полной загрузке файла конфигурации платформа 1С не запускает дерево интерактивного сравнения объектов, а просто замещает структуру основной конфигурации на новую. При этом таблицы расширения и данные в них на рабочей базе остаются в полной безопасности, так как само расширение никак не затрагивается в процессе импорта .cf. После загрузки выполняем обновление конфигурации базы данных клавишей F7.
Используя этот подход, вы переносите все временные затраты на сравнение конфигураций на тестовый контур, а простой рабочей базы во время технического окна сводится к минимуму.
---
Если ваша основная конфигурация уже снята с поддержки (находится в режиме редактирования с сохранением поддержки), то хранить новые справочники, документы и реквизиты внутри расширения становится нецелесообразным. Более правильным решением будет перенос физической структуры данных непосредственно в основную конфигурацию, оставив в расширении только исполняемый код и формы.
Рассмотрим алгоритм безопасного переноса данных на примере справочника:
_Демо_СправочникНовый) с точно такой же структурой реквизитов, как и в расширении (например, Расш_СправочникНовый).
ВыборкаИсточника = Справочники.Расш_СправочникНовый.Выбрать();
Пока ВыборкаИсточника.Следующий() Цикл
НовыйЭлемент = Справочники._Демо_СправочникНовый.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйЭлемент, ВыборкаИсточника);
НовыйЭлемент.Код = ВыборкаИсточника.Код;
НовыйЭлемент.Наименование = ВыборкаИсточника.Наименование;
// Если есть иерархия, не забываем переносить Родителя после создания всех элементов
Попытка
НовыйЭлемент.Записать();
Исключение
ЗаписьЖурналаРегистрации("ПереносДанных", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
1С:Предприятие и убеждаемся, что все данные успешно скопированы в объект основной конфигурации. Для сопоставления ссылок в связанных документах также потребуется написать код поиска и замены значений.Рекомендуемое разделение логики в вашей системе:
&Вместо, &Перед, &После), новые формы объектов, отчеты, обработки, а также макеты. Эти элементы не влияют на физическую структуру хранения данных на СУБД и не вызывают замедления Конфигуратора при обновлении.Для поддержания высокой скорости работы Конфигуратора мы рекомендуем регулярно выполнять следующие действия:
EF_). Периодически удаляйте старые патчи, которые уже вошли в состав установленных вами новых релизов конфигурации. Наличие десятков неактивных патчей создает лишний информационный «шум» для алгоритмов сравнения платформы.