Куда исчезают ключи аналитики учета номенклатуры после удаления документов и как очистить базу от «мусора»

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

При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как 1С:ERP Управление предприятием 2, 1С:Управление торговлей 11 или 1С:Комплексная автоматизация 2, многие технические специалисты и администраторы баз данных сталкиваются с вопросом: почему после удаления документов или строк в табличных частях справочник КлючиАналитикиУчетаНоменклатуры продолжает расти в объеме? Разберем детально механику работы этого объекта, выясним причины его «раздувания» и рассмотрим способы эффективной очистки системы.

Что такое ключи аналитики и какова их роль в системе

Для начала проанализируем, зачем вообще был введен этот справочник. В старых редакциях конфигураций (например, УТ 10.3) в регистрах накопления каждое измерение (Номенклатура, Склад, Характеристика, Серия) хранилось в отдельной колонке таблицы базы данных. В новых версиях архитекторы 1С применили механизм оптимизации хранения данных. Вместо записи множества ссылок в каждой строке регистра, система создает один элемент в справочнике КлючиАналитикиУчетаНоменклатуры, который содержит в себе всю комбинацию этих параметров.

Рассмотрим пример. Если мы приходуем товар «Болт» на «Склад №1» с «Характеристикой А», система не записывает эти три ссылки в регистр ТоварыНаСкладах. Она сначала проверяет, есть ли в справочнике КлючиАналитикиУчетаНоменклатуры элемент с такой комбинацией. Если нет — создает его, а в регистр записывает только одну короткую ссылку на этот ключ. Это позволяет значительно сократить ширину таблиц регистров накопления и ускорить выполнение запросов к базе данных.

Почему элементы справочника не удаляются автоматически

Выясним причину, по которой при удалении строки в документе поступления (или любого другого товарного документа) соответствующий элемент справочника ключей «никуда не девается», а остается в базе. Рассмотрим ситуацию с точки зрения производительности:

  1. Ресурсоемкость проверки: Если бы при каждом проведении или отмене проведения документа система проверяла, используется ли данный ключ аналитики в других записях всех существующих регистров, скорость работы пользователей упала бы в несколько раз. Поиск ссылок по всей базе данных — это одна из самых «тяжелых» операций в 1С.
  2. Принцип «однократной записи»: Система спроектирована так, чтобы один раз создать аналитическую комбинацию и использовать ее повторно. Даже если сейчас вы удалили документ, велика вероятность, что в будущем вы создадите аналогичный, и ключ снова потребуется.
  3. Целостность данных: Справочник является служебным и его элементы напрямую связаны с итогами в регистрах. Прямое удаление ключа без анализа всех движений может привести к фатальным ошибкам в отчетах.

Как избыточные ключи влияют на работу 1С

Хотя наличие «лишних» записей в справочнике КлючиАналитикиУчетаНоменклатуры не является критической ошибкой, разберем, к каким последствиям может привести накопление миллионов неиспользуемых элементов:

Стандартный механизм очистки в современных конфигурациях

Посмотрим, какие инструменты предлагают разработчики 1С для решения проблемы «мусорных» ключей. В последних релизах ERP и УТ 11 (начиная с версий 2.4/2.5) встроен штатный механизм очистки. Разберем его работу по шагам:

Перейдем в раздел НСИ и администрирование — Обслуживание — Регламентные операции. Здесь мы можем найти регламентное задание с названием ОчисткаНеиспользуемыхКлючейАналитики. Это задание выполняет следующие действия:

  1. Сканирует справочники ключей аналитики (не только номенклатуры, но и партий, расчетов с партнерами и др.).
  2. Проверяет наличие ссылок на эти ключи во всех связанных регистрах накопления и сведений.
  3. Помечает неиспользуемые элементы на удаление или физически удаляет их, если это настроено в системе.

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

Программный подход к анализу и удалению ключей

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

Рассмотрим логику поиска ссылок через встроенный язык 1С:


// Пример логики поиска ссылок на ключи аналитики
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ССЫЛКА(Справочник.КлючиАналитикиУчетаНоменклатуры) КАК Ключ
    |ИЗ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Ключи
    |ГДЕ НЕ Ключи.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ АналитикаУчетаНоменклатуры ИЗ РегистрНакопления.ТоварыНаСкладах)";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Здесь реализуется логика пометки на удаление или непосредственного удаления
    // Внимание: перед удалением требуется проверка по ВСЕМ регистрам, где используется данный тип данных!
КонецЦикла;

Нужно учитывать, что объект КлючиАналитикиУчетаНоменклатуры может использоваться в десятках регистров: ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж, ТоварыОрганизаций, СвободныеОстатки и многих других. Поэтому простой запрос по одному регистру недостаточен для принятия решения об удалении.

Меры предосторожности при ручной очистке

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

Другие виды ключей аналитики

Выясним, какие еще технические справочники работают по аналогичному принципу. В современных конфигурациях мы встретим:

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

Подведем итог: «исчезновение» ключей аналитики при удалении строк документов не предусмотрено логикой системы ради сохранения высокой производительности. Однако, используя штатное регламентное задание ОчисткаНеиспользуемыхКлючейАналитики, мы можем эффективно избавляться от накопившегося «мусора», обеспечивая стабильную и быструю работу нашей программы.

← На главную