При длительной эксплуатации базы данных 1С:Управление торговлей 10.3 на СУБД MS SQL Server часто возникает ситуация, когда граница последовательности партионного учета сильно отстает от текущей даты. В этой статье разберем, влияет ли восстановление границы последовательности на скорость проведения документов и формирование отчетов, а также проанализируем причины замедления работы и рассмотрим варианты решения этой проблемы.
Рассмотрим детально механику работы регистра ПартииТоваровНаСкладах. Сам по себе факт того, что дата границы последовательности находится далеко в прошлом, непосредственно не влияет на быстродействие СУБД, так как граница — это всего лишь дата в таблице последовательности. Однако неактуальная граница является явным косвенным признаком наличия мусорных данных в регистре.
Когда последовательность не восстанавливается регулярно и документы правятся задним числом, в системе накапливаются учетные ошибки:
ПартииТоваровНаСкладах.Остатки. Из-за раздутой таблицы итогов СУБД MS SQL Server вынуждена обрабатывать избыточный объем данных, что критически замедляет проведение документов и построение отчетов.Проанализируем основные рекомендации по наведению порядка в регистре партионного учета для восстановления высокой скорости работы базы данных.
Если оперативное проведение документов вызывает задержки у пользователей, рекомендуется вынести списание партий из оперативного проведения. Разберем по шагам, как настроить данный механизм:
При неоперативном проведении менеджеры не ждут окончания расчета себестоимости и подбора партий, благодаря чему проведение торговых документов происходит мгновенно.
Разберем, как избавиться от лишних записей в таблице итогов. Для этого требуется обнулить все зависшие копеечные суммы и количество по старым партиям. Это можно сделать с помощью документа КорректировкаЗаписейРегистров или специализированными обработками очистки.
Когда количество и сумма по конкретной партии одновременно становятся равны нулю, платформа 1С исключает такую запись из таблицы итогов СУБД при последующем пересчете итогов, что существенно сокращает физический размер виртуальных таблиц остатков.
Посмотрим на технические операции, которые необходимо регулярно выполнять на стороне базы данных и платформы:
UPDATE STATISTICS.ПартииТоваровНаСкладах. Это физически очистит таблицу итогов от нулевых записей.В стандартном функционале УТ 10.3 при проведении документов данные о списании записываются в регистр сведений СписаниеТоваров, что создает дополнительную нагрузку на базу данных. Можно отказаться от лишней записи в этот регистр, если формировать таблицу списания непосредственно в памяти и передавать ее в процедуру общего модуля ДвижениеПартий.
Рассмотрим пример формирования таблицы списываемых товаров в памяти для передачи в партионный модуль:
// Формирование таблицы списываемых товаров в памяти без записи в РС СписаниеТоваров
ТаблицаСписания = Новый ТаблицаЗначений;
ТаблицаСписания.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаСписания.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТаблицаСписания.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
// Заполнение таблицы и передача в процедуру расчета партий
ПартионныйУчет.ДвижениеПартий(СсылкаНаДокумент, ТаблицаСписания);
Простое смещение границы последовательности без исправления остатков не даст существенного прироста скорости. Однако восстановление партионного учета с очисткой зависших остатков в регистре, выполнением пересчета итогов и переносом списания партий в регламентный режим позволяет кардинально ускорить проведение документов и выборку данных из СУБД.