При обновлении комплектов регламентированной отчетности (особенно часто это встречается в конфигурациях «1С:Бухгалтерия государственного учреждения» редакций 1.0 и 2.0) пользователи могут столкнуться с критической ошибкой [V8XC0000] [SMXC0110]. Текст ошибки гласит: «Ошибка удаления: Некоторые объекты не могут быть удалены в соответствии с выбранной настройкой загрузки комплекта». Эта ситуация блокирует процесс обновления отчетных форм, что критично в период сдачи квартальной или годовой отчетности.
В данной статье мы подробно разберем причины возникновения этой проблемы, проанализируем механизмы работы платформы 1С, которые приводят к конфликту, и рассмотрим несколько эффективных способов решения задачи.
Для начала проанализируем ситуацию с технической точки зрения. Когда мы загружаем новый комплект отчетности, встроенный загрузчик выполняет сопоставление объектов. Если в настройках загрузки выбрана «Полная замена» или если комплект предполагает удаление устаревших версий показателей, строк или операндов, система пытается программно удалить старые элементы справочников.
Ошибка [V8XC0000] [SMXC0110] возникает в тот момент, когда платформа обнаруживает, что на объект, предназначенный к удалению, существуют ссылки в других объектах или системных регистрах. В контексте данной проблемы главным «виновником» чаще всего выступает механизм версионирования объектов.
В системе существует служебный регистр сведений ИсторияЗаписиОбъектов (или аналогичные механизмы версионирования). Если для справочников отчетности (например, Операнды показателей или Строки отчетов) включено хранение истории изменений, то при каждой записи элемента в этом регистре создается запись. Когда загрузчик пытается удалить элемент справочника, платформа проверяет целостность данных и видит, что этот элемент «упоминается» в истории. Система защиты данных блокирует удаление, чтобы не оставлять «битых» ссылок в истории, и выдает ошибку загрузки.
Рассмотрим самый быстрый и эффективный метод, который помог большинству пользователей. Если проблема заключается в записях истории, нам необходимо очистить этот регистр от ссылок на объекты отчетности. Рассмотрим пример кода, который может быть использован в обработке для решения этой задачи.
Нам нужно создать набор записей регистра сведений ИсторияЗаписиОбъектов, установить фильтр по метаданным объектов отчетности и очистить их. Посмотрим на логику работы такой очистки:
// Пример логики очистки регистра истории для справочника ОперандыПоказателей
НаборЗаписей = РегистрыСведений.ИсторияЗаписиОбъектов.СоздатьНаборЗаписей();
// Устанавливаем фильтр по типу объекта, если это предусмотрено структурой регистра
// В некоторых версиях БГУ используется специфическая структура,
// поэтому важно очистить именно те записи, которые ссылаются на "Операнды показателей"
НаборЗаписей.Отбор.Объект.Установить(СсылкаНаУдаляемыйОбъект);
// Но лучше делать очистку по типам метаданных через программный перебор
Попытка
НаборЗаписей.Записать(); // Записываем пустой набор, тем самым удаляя старые записи
Сообщить("История записей для объектов отчетности успешно очищена.");
Исключение
Сообщить("Ошибка при очистке регистра: " + ОписаниеОшибки());
КонецПопытки;
Важно понимать, что очистка этого регистра не удаляет сами отчеты или данные учета, она лишь удаляет «логи» изменений, которые мешают платформе выполнить штатную процедуру замены элементов справочника при обновлении комплекта.
Если вы не хотите использовать сторонние обработки, проанализируем, как можно решить проблему штатными средствами администрирования. Этот метод безопаснее для тех, кто боится работать с кодом напрямую.
Операнды показателей;Строки отчетов;Макеты отчетов.После выполнения этих действий попробуем снова загрузить комплект отчетности. Как правило, после удаления истории ошибка [SMXC0110] исчезает.
Если ошибка сохраняется, разберем ситуацию, когда ссылки могут находиться не только в истории, но и в других местах. Мы можем воспользоваться стандартным инструментом «Групповое изменение реквизитов».
С помощью этого инструмента можно отобрать объекты справочников отчетности, которые подлежат замене, и проверить, нет ли на них пометок на удаление, которые конфликтуют с загрузчиком. Однако наиболее полезным действием здесь будет очистка регистров через «Выполнение произвольного алгоритма» (доступно в режиме разработчика в данной обработке), где можно прописать команду очистки записей в регистре ИсторияЗаписиОбъектов без написания полноценной внешней обработки.
Проанализируем ситуацию, описанную в современных рекомендациях фирмы «1С». В некоторых случаях ошибка удаления возникает из-за того, что в базе уже существуют дублирующиеся элементы с одинаковыми кодами, возникшие при предыдущих некорректных обменах. Для этого рекомендуется использовать типовую обработку «Удаление дублей регламентированной отчетности».
Эта обработка позволяет:
Чтобы в будущем не сталкиваться с ошибкой [V8XC0000], разберем правильный алгоритм обновления программы и отчетности:
Тестирование и исправление в конфигураторе с выбранным пунктом «Очистка ссылок на несуществующие объекты». Это удалит «фантомные» ссылки, которые могут провоцировать ошибки удаления.Резюме: В подавляющем большинстве случаев ошибка загрузки комплекта отчетности вызвана избыточным хранением истории изменений объектов. Очистка системного регистра ИсторияЗаписиОбъектов является ключом к решению проблемы. После очистки истории не забудьте вернуть настройки версионирования в исходное состояние, если они необходимы для работы вашей бухгалтерии.