При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как 1С:ERP Управление предприятием 2, 1С:Управление торговлей 11 или 1С:Комплексная автоматизация 2, многие технические специалисты и администраторы баз данных сталкиваются с вопросом: почему после удаления документов или строк в табличных частях справочник КлючиАналитикиУчетаНоменклатуры продолжает расти в объеме? Разберем детально механику работы этого объекта, выясним причины его «раздувания» и рассмотрим способы эффективной очистки системы.
Для начала проанализируем, зачем вообще был введен этот справочник. В старых редакциях конфигураций (например, УТ 10.3) в регистрах накопления каждое измерение (Номенклатура, Склад, Характеристика, Серия) хранилось в отдельной колонке таблицы базы данных. В новых версиях архитекторы 1С применили механизм оптимизации хранения данных. Вместо записи множества ссылок в каждой строке регистра, система создает один элемент в справочнике КлючиАналитикиУчетаНоменклатуры, который содержит в себе всю комбинацию этих параметров.
Рассмотрим пример. Если мы приходуем товар «Болт» на «Склад №1» с «Характеристикой А», система не записывает эти три ссылки в регистр ТоварыНаСкладах. Она сначала проверяет, есть ли в справочнике КлючиАналитикиУчетаНоменклатуры элемент с такой комбинацией. Если нет — создает его, а в регистр записывает только одну короткую ссылку на этот ключ. Это позволяет значительно сократить ширину таблиц регистров накопления и ускорить выполнение запросов к базе данных.
Выясним причину, по которой при удалении строки в документе поступления (или любого другого товарного документа) соответствующий элемент справочника ключей «никуда не девается», а остается в базе. Рассмотрим ситуацию с точки зрения производительности:
Хотя наличие «лишних» записей в справочнике КлючиАналитикиУчетаНоменклатуры не является критической ошибкой, разберем, к каким последствиям может привести накопление миллионов неиспользуемых элементов:
Посмотрим, какие инструменты предлагают разработчики 1С для решения проблемы «мусорных» ключей. В последних релизах ERP и УТ 11 (начиная с версий 2.4/2.5) встроен штатный механизм очистки. Разберем его работу по шагам:
Перейдем в раздел НСИ и администрирование — Обслуживание — Регламентные операции. Здесь мы можем найти регламентное задание с названием ОчисткаНеиспользуемыхКлючейАналитики. Это задание выполняет следующие действия:
Важный момент: Мы рекомендуем запускать это задание в периоды минимальной нагрузки на систему (например, ночью), так как процесс требует значительных ресурсов процессора и дисковой подсистемы.
Если штатные механизмы по каким-то причинам не справляются или вам необходимо реализовать собственную логику очистки, проанализируем пример кода, который позволяет найти неиспользуемые ключи. Подобные алгоритмы часто используются в специализированных обработках.
Рассмотрим логику поиска ссылок через встроенный язык 1С:
// Пример логики поиска ссылок на ключи аналитики
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ССЫЛКА(Справочник.КлючиАналитикиУчетаНоменклатуры) КАК Ключ
|ИЗ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Ключи
|ГДЕ НЕ Ключи.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ АналитикаУчетаНоменклатуры ИЗ РегистрНакопления.ТоварыНаСкладах)";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Здесь реализуется логика пометки на удаление или непосредственного удаления
// Внимание: перед удалением требуется проверка по ВСЕМ регистрам, где используется данный тип данных!
КонецЦикла;
Нужно учитывать, что объект КлючиАналитикиУчетаНоменклатуры может использоваться в десятках регистров: ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж, ТоварыОрганизаций, СвободныеОстатки и многих других. Поэтому простой запрос по одному регистру недостаточен для принятия решения об удалении.
Проанализируем риски, связанные с ручным удалением данных из этого справочника, особенно если вы планируете использовать прямые SQL-запросы к базе данных (что иногда практикуется для ускорения процесса в крупных инсталляциях):
Объект не найден.Выясним, какие еще технические справочники работают по аналогичному принципу. В современных конфигурациях мы встретим:
КлючиАналитикиУчетаПартий — объединяют информацию о партии, поставщике и стоимости.КлючиАналитикиРасчетовСПартнерами — связывают партнера, контрагента, договор и направление деятельности.КлючиАналитикиУчетаНоменклатурыДляЦелейНДС — используются для раздельного учета налогов.Все они требуют регулярного обслуживания и внимания со стороны администратора системы. Мы рекомендуем включить автоматическое выполнение регламентных заданий по очистке всех видов ключей для поддержания базы данных в оптимальном состоянии.
Подведем итог: «исчезновение» ключей аналитики при удалении строк документов не предусмотрено логикой системы ради сохранения высокой производительности. Однако, используя штатное регламентное задание ОчисткаНеиспользуемыхКлючейАналитики, мы можем эффективно избавляться от накопившегося «мусора», обеспечивая стабильную и быструю работу нашей программы.