Влияет ли восстановление границы партионного учета на быстродействие в 1С:Управление торговлей 10.3?

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

При длительной эксплуатации базы данных 1С:Управление торговлей 10.3 на СУБД MS SQL Server часто возникает ситуация, когда граница последовательности партионного учета сильно отстает от текущей даты. В этой статье разберем, влияет ли восстановление границы последовательности на скорость проведения документов и формирование отчетов, а также проанализируем причины замедления работы и рассмотрим варианты решения этой проблемы.

Как зависшая граница и партионный учет влияют на производительность

Рассмотрим детально механику работы регистра ПартииТоваровНаСкладах. Сам по себе факт того, что дата границы последовательности находится далеко в прошлом, непосредственно не влияет на быстродействие СУБД, так как граница — это всего лишь дата в таблице последовательности. Однако неактуальная граница является явным косвенным признаком наличия мусорных данных в регистре.

Когда последовательность не восстанавливается регулярно и документы правятся задним числом, в системе накапливаются учетные ошибки:

  1. Зависшие остатки по партиям («нулевые хвосты»): В результате редактирования документов задним числом возникают ситуации, когда физическое количество товара списано полностью (остаток равен 0), но из-за округлений осталась некорректная сумма (или наоборот — есть количество без суммы).
  2. Раздувание таблицы итогов: Платформа 1С хранит записи с нулевым количеством и не нулевой суммой в таблице итогов регистра накопления как актуальные остатки. В результате таблица итогов разрастается до огромных размеров.
  3. Увеличение времени выполнения запросов: При проведении документов списания платформа обращается к виртуальной таблице остатков ПартииТоваровНаСкладах.Остатки. Из-за раздутой таблицы итогов СУБД MS SQL Server вынуждена обрабатывать избыточный объем данных, что критически замедляет проведение документов и построение отчетов.

Шаги по оптимизации партионного учета и повышению быстродействия

Проанализируем основные рекомендации по наведению порядка в регистре партионного учета для восстановления высокой скорости работы базы данных.

1. Отключение оперативного списания партий в учетной политике

Если оперативное проведение документов вызывает задержки у пользователей, рекомендуется вынести списание партий из оперативного проведения. Разберем по шагам, как настроить данный механизм:

  1. В настройках учетной политики снимаем флаг оперативного списания партий.
  2. Списание партий переводим на выполнение регламентным заданием в фоновом режиме или в нерабочее время.
  3. Границу последовательности сдвигаем ближе к текущей дате после выполнения фоновой обработки партий.

При неоперативном проведении менеджеры не ждут окончания расчета себестоимости и подбора партий, благодаря чему проведение торговых документов происходит мгновенно.

2. Наведение порядка в остатках партий и устранение «хвостов»

Разберем, как избавиться от лишних записей в таблице итогов. Для этого требуется обнулить все зависшие копеечные суммы и количество по старым партиям. Это можно сделать с помощью документа КорректировкаЗаписейРегистров или специализированными обработками очистки.

Когда количество и сумма по конкретной партии одновременно становятся равны нулю, платформа 1С исключает такую запись из таблицы итогов СУБД при последующем пересчете итогов, что существенно сокращает физический размер виртуальных таблиц остатков.

3. Обслуживание СУБД MS SQL Server и пересчет итогов

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

  1. Обновление статистики и реиндексация: Интенсивная запись партионных движений приводит к фрагментации индексов и устареванию статистики оптимизатора MS SQL Server. На стороне SQL-сервера следует выполнять регулярные регламенты дефрагментации/реиндексации таблиц и обновление статистики с помощью UPDATE STATISTICS.
  2. Пересчет итогов регистров: В режиме Конфигуратора или через пункт «Тестирование и исправление» выполним операцию пересчета итогов для регистра накопления ПартииТоваровНаСкладах. Это физически очистит таблицу итогов от нулевых записей.

4. Оптимизация вызова процедуры проведения партий

В стандартном функционале УТ 10.3 при проведении документов данные о списании записываются в регистр сведений СписаниеТоваров, что создает дополнительную нагрузку на базу данных. Можно отказаться от лишней записи в этот регистр, если формировать таблицу списания непосредственно в памяти и передавать ее в процедуру общего модуля ДвижениеПартий.

Рассмотрим пример формирования таблицы списываемых товаров в памяти для передачи в партионный модуль:


// Формирование таблицы списываемых товаров в памяти без записи в РС СписаниеТоваров
ТаблицаСписания = Новый ТаблицаЗначений;
ТаблицаСписания.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаСписания.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТаблицаСписания.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));

// Заполнение таблицы и передача в процедуру расчета партий
ПартионныйУчет.ДвижениеПартий(СсылкаНаДокумент, ТаблицаСписания);

Подведение итогов

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

← На главную