При работе с учебной версией платформы 1С:Предприятие часто возникает ситуация, когда количество записей в справочниках превышает установленный лимит (обычно 2000 записей). В этот момент система блокирует возможность стандартного интерактивного удаления объектов, что делает невозможным использование привычного функционала «Пометить на удаление». Рассмотрим, как решить эту проблему и очистить справочник программным путем.
Самый эффективный способ очистки базы данных от лишних элементов, когда стандартные инструменты перестают отвечать на команды пользователя — это написание собственной обработки на встроенном языке 1С. Рассмотрим алгоритм, который позволяет обойти блокировки платформы и массово удалить записи.
Для реализации этой задачи мы создадим процедуру на сервере, которая последовательно выберет все элементы справочника и удалит их в рамках одной транзакции. Важно: использование транзакции значительно ускоряет процесс и обеспечивает целостность данных в процессе выполнения операции.
Разберем пример кода, который необходимо разместить в модуле обработки или внешней обработке:
&НаСервере
Процедура УдалитьВсеЗаписиНаСервере()
НачатьТранзакцию();
Выборка = Справочники.ВашСправочник.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Если Объект <> Неопределено Тогда
Объект.Удалить();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Сообщить(\"Очистка справочника завершена успешно!\");
КонецПроцедуры
В данном примере мы используем метод Выбрать() для получения всех элементов, а затем через ПолучитьОбъект() открываем каждый из них для удаления. Применение метода Удалить() позволяет физически стереть запись из базы данных, минуя этап пометки на удаление.
Прежде чем прибегать к программированию, попробуем воспользоваться типовыми механизмами, если система еще не заблокирована полностью. Если лимит превышен незначительно, вы можете попробовать выполнить следующие шаги:
Однако, как показывает практика, при достижении критического порога лимита 1С может блокировать даже механизм пометки на удаление. В таком случае этот метод может оказаться неэффективным, и потребуется переход к программному удалению, описанному выше.
Если справочник сильно перегружен, и программное удаление вызывает ошибки доступа к данным, самым надежным архитектурным решением будет создание «чистой» базы. Этот процесс состоит из следующих этапов:
ВыгрузкаЗагрузкаДанныхXML (или аналогичными инструментами КД), чтобы выгрузить только необходимые справочные данные из «переполненной» базы.Этот подход позволяет гарантированно сбросить счетчики записей и исключить «мусор», который накопился в процессе тестирования. Это наиболее чистый путь, который исключает возникновение битых ссылок и нарушение ссылочной целостности, что часто случается при прямом удалении объектов через Удалить().
При использовании метода Удалить() следует помнить о следующем:
Ссылочная целостность: Если записи, которые вы удаляете, используются в других справочниках или документах (на них есть ссылки), 1С может выдать ошибку при попытке удаления. В этом случае сначала необходимо очистить все документы, ссылающиеся на данные элементы. Если же удаление происходит успешно, то в местах, где остались ссылки на удаленный объект, появятся «битые ссылки».
Контроль лимитов: Чтобы не повторять эту процедуру в будущем, старайтесь регулярно контролировать количество записей в справочниках. Помните, что учебная версия предназначена для обучения и базового тестирования, она не рассчитана на работу с большими объемами информации.
Мы проанализировали основные способы решения проблемы. Выбирайте наиболее подходящий вариант в зависимости от текущего состояния вашей базы и объема «лишних» записей.