При работе в современных конфигурациях на базе 1С:Предприятие 8.3, таких как Управление торговлей 11.4, пользователи часто сталкиваются с ситуацией, когда невозможно снять пометку на удаление с номенклатуры или другого объекта. Система выдает предупреждение: «Выбранный элемент удаляется, так как был помечен на удаление». Эта проблема может поставить в тупик даже опытных пользователей, так как обычные методы отмены удаления не срабатывают.
В этой статье мы подробно разберем, почему возникает данная блокировка, изучим внутренние механизмы Библиотеки стандартных подсистем (БСП) и рассмотрим несколько проверенных способов решения проблемы — от простых пользовательских настроек до манипуляций со служебными данными системы.
Прежде чем переходить к активным действиям, выясним причину такого поведения программы. В старых версиях 1С удаление объектов происходило монопольно и сразу. В УТ 11.4 реализован механизм фонового удаления объектов. Рассмотрим, что происходит «под капотом» системы:
РегистрСведений.УдаляемыеОбъекты.Проблема «зависания» пометки обычно связана с тем, что фоновое задание по какой-то причине прервалось (аварийное завершение сеанса, перезагрузка сервера), а запись в регистре осталась. Система «думает», что удаление все еще идет, и продолжает блокировать элемент.
Проанализируем ситуацию: если регламентное задание уже не выполняется, а блокировка висит, значит, нам нужно вручную очистить записи в служебной таблице. Это наиболее прямой и быстрый способ решения проблемы.
Для реализации этого метода выполним следующие шаги:
Удаляемые объекты.После удаления записи из этого регистра блокировка будет снята, и вы сможете стандартным способом (через контекстное меню в справочнике) снять пометку на удаление.
Если по какой-то причине вы не хотите работать напрямую с регистрами, разберем альтернативный вариант — использование стандартной обработки «Групповое изменение реквизитов». Этот метод позволяет «протолкнуть» изменение статуса объекта, обходя стандартные проверки формы.
Рассмотрим пошагово, как это сделать:
Номенклатура).Пометка удаления.Использование режима разработчика позволяет обработке игнорировать программные блокировки ПриЗаписи и напрямую менять состояние объекта в базе данных.
Иногда проблема вызвана тем, что процесс удаления действительно идет в данный момент, но он «зациклился» или работает слишком медленно из-за огромного объема базы. Выясним, как остановить этот процесс корректно.
Проанализируем работу планировщика:
Удаление помеченных объектов.После принудительной остановки фонового задания система часто сама очищает РегистрСведений.УдаляемыеОбъекты, и доступ к редактированию элементов возвращается.
Разберем еще несколько нюансов, которые могут помочь в диагностике:
Рестарт сервера 1С: В некоторых случаях (особенно при использовании клиент-серверного варианта) блокировка может сохраняться в кэше сеансов или на уровне СУБД. Рестарт службы 1C:Enterprise 8.3 Server Agent является радикальным, но гарантированным способом очистки всех временных блокировок, если работа с регистрами не помогла.
Синхронизация данных: Если ваша база УТ 11.4 участвует в обмене с БП 3.0 или Розницей, проверьте, не заблокирован ли объект механизмом обмена. Иногда регистрация изменений в плане обмена может конфликтовать с процессом удаления.
Программная очистка: Если объектов много, программист может воспользоваться коротким кодом для очистки регистра. Посмотрим на пример логики:
НаборЗаписей = РегистрыСведений.УдаляемыеОбъекты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(СсылкаНаНужныйОбъект);
НаборЗаписей.Записать(); // Записываем пустой набор, тем самым удаляя записи
Подводя итог, отметим: появление сообщения «Выбранный элемент удаляется» — это не критическая ошибка, а следствие работы защитных механизмов БСП. В большинстве случаев проблема решается простой очисткой регистра сведений «Удаляемые объекты», что позволяет вернуть номенклатуру в работу без потери данных и нарушения целостности базы.