Как ускорить долгое обновление 1С:Управление торговлей с редакции 11.4 на 11.5?

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

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

В чем причина долгой обработки данных?

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

Разберем основные факторы, замедляющие этот процесс:

  1. Объем исторических данных: Если база ведется много лет и содержит сотни тысяч незакрытых заказов или накладных, обработчик будет пытаться сопоставить аналитику для каждого из них.
  2. Генерация ключей аналитики: Огромное количество времени тратится на создание записей в регистре РасчетыСКлиентамиПоДокументам и пересчет ключей аналитики учета номенклатуры.
  3. Логические тупики: При наличии «битых» ссылок или некорректно заполненной иерархии в справочнике Контрагенты, процедура Справочники.Контрагенты.ЗарегистрироватьДанныеКГенерацииОбъектовРасчетов может уходить в бесконечный цикл или выполнять крайне тяжелые SQL-запросы.

Шаг 1. Предварительная подготовка и очистка базы

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

Выполним следующие действия:

Шаг 2. Настройка серверной инфраструктуры

Выясним, как железо влияет на процесс. Хотя многие считают, что SSD формата M.2 решает все проблемы, практика показывает, что при обновлении УТ 11.5 узким местом часто становится процессор (частота на одно ядро) и настройки СУБД.

Рассмотрим рекомендации по настройке сервера:

Шаг 3. Оптимизация обработчиков обновления через БСП

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

Посмотрим, как настроить многопоточность:

  1. Зайдите в раздел Администрирование — Обслуживание — Результаты обновления программы.
  2. Перейдите по ссылке «Все обработчики обновления».
  3. Если вы видите, что система «зависла» на одном тяжелом обработчике, попробуйте временно изменить количество потоков в константе КоличествоПотоковОбновленияДанных.

Важный нюанс: Для таких процедур, как ЗарегистрироватьДанныеКГенерацииОбъектовРасчетов, иногда эффективнее использовать 1 или 2 потока. Это позволяет избежать Deadlocks (взаимных блокировок) на уровне таблиц SQL, из-за которых процесс может стоять на месте часами.

Шаг 4. Работа с конкретными проблемными процедурами

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


// Пример проблемного участка, где может происходить долгое сопоставление
Процедура ЗарегистрироватьДанныеКГенерацииОбъектовРасчетов()
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Взаиморасчеты.Ссылка КАК Ссылка,
    |    Взаиморасчеты.Партнер КАК Партнер
    |ИЗ
    |    РегистрНакопления.РасчетыСКлиентами КАК Взаиморасчеты
    |ГДЕ
    |    Взаиморасчеты.ОбъектРасчетов = ЗНАЧЕНИЕ(Справочник.ОбъектыРасчетов.ПустаяСсылка)";
    // ... дальнейшая логика сопоставления
КонецПроцедуры

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

Шаг 5. Стратегия «Обновление на копии + перенос»

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

  1. Снимаем копию базы в конце рабочего дня.
  2. Запускаем обновление на мощном стороннем сервере (или локально на производительном ПК).
  3. Пока копия обновляется (это может занять 2-3 дня), пользователи продолжают работать в старой базе 11.4.
  4. После завершения обновления на копии, фиксируем период работы в 11.4, выгружаем все измененные и новые документы через Enterprise Data или самописную обработку.
  5. Загружаем эти данные в обновленную базу 11.5.

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

Выводы и рекомендации

Подведем итог. Долгое обновление УТ 11.4 на 11.5 — это не приговор, а следствие сложности структуры данных. Чтобы минимизировать простои, придерживайтесь следующего алгоритма:

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

← На главную