Почему не работает непосредственное удаление в 1С:Комплексная автоматизация 2.4 и как это исправить?

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

В современных конфигурациях 1С, таких как «1С:Комплексная автоматизация 2.4» (КА 2.4), работающих на платформе 8.3.12 и выше, пользователи часто сталкиваются с невозможностью непосредственного удаления объектов (комбинация Shift+Del). Даже при наличии «Полных прав» в конфигураторе система может выдавать ошибку или просто помечать объект на удаление вместо его физического стирания из базы. Рассмотрим подробно, почему это происходит и как решить данную проблему.

Причина 1: Особенности прав доступа в подсистеме БСП

Проанализируем архитектуру прав в современных типовых решениях. В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), классических ролей из Конфигуратора недостаточно. Механизмы ограничения доступа вынесены на уровень данных и интерфейса.

Выясним, почему «Полные права» в конфигураторе не всегда дают право на удаление:

  1. Профили групп доступа: В режиме «1С:Предприятие» перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа. Даже если у пользователя установлена роль «Полные права», необходимо проверить наличие разрешенного действия Интерактивное удаление в конкретном профиле.
  2. Программный запрет в формах: Разработчики 1С часто отключают свойство Разрешить непосредственное удаление в свойствах формы списка. Это делается для того, чтобы пользователь не мог случайно нарушить ссылочную целостность базы, удалив объект, на который ссылаются другие документы.

Для решения этой проблемы на уровне прав, выполним следующие шаги:

Проверим, назначена ли пользователю роль Интерактивное удаление (или аналогичная в вашей версии БСП). Если мы создаем собственную роль, недостаточно просто поставить галочку напротив объекта. Нужно убедиться, что эта роль добавлена в соответствующий Профиль групп доступа и обновлены метаданные прав в режиме предприятия.

Причина 2: Ошибки платформы 8.3.12 и падение рабочего процесса

Обратим внимание на версию платформы. Релиз 8.3.12.1685 имеет известные проблемы с управлением памятью и выполнением фоновых заданий. Если при попытке удаления помеченных объектов вы видите сообщение «Аварийно завершился рабочий процесс фонового задания», это явный признак платформенной ошибки Access Violation.

Разберем, почему это происходит при удалении:

Процесс удаления в 1С — это не просто стирание строки из таблицы. Система запускает поиск ссылок на удаляемый объект по всей базе данных. На платформе 8.3.12 этот процесс может потреблять чрезмерное количество оперативной памяти, что приводит к аварийному завершению процесса rphost. Это особенно актуально для «тяжелых» конфигураций вроде КА 2.4 или ERP.

Рекомендации по устранению:

  1. Очистка серверного кэша: Часто причиной падения процесса является поврежденный кэш конфигурации. Остановим службу сервера 1С и удалим содержимое папок snccntx и conf в каталоге данных сервера.
  2. Обновление платформы: Рекомендуется перейти на более стабильные ветки, например, 8.3.15 или 8.3.18, где ошибки взаимодействия фоновых заданий с памятью были исправлены.

Причина 3: Использование программных методов удаления

Если интерактивное удаление (через интерфейс) заблокировано или вызывает ошибки, мы можем прибегнуть к программному методу. Рассмотрим ситуацию, когда нам крайне необходимо удалить объект, игнорируя интерфейсные запреты.

Для этого можно воспользоваться внешней обработкой, в которой будет исполнен следующий код:


// Пример непосредственного удаления объекта без проверок
СсылкаНаОбъект = ПоискСсылокПоНаименованию(); // Ваша логика поиска
ОбъектУдаления = СсылкаНаОбъект.ПолучитьОбъект();

Если ОбъектУдаления <> Неопределено Тогда
    Попытка
        // Метод Удалить() выполняет физическое удаление из БД
        ОбъектУдаления.Удалить(); 
        Сообщить("Объект успешно удален");
    Исключение
        Сообщить("Ошибка при удалении: " + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

Важный нюанс: Метод Объект.Удалить() физически стирает запись. Если на этот объект есть ссылки в других документах, они станут «битыми» (вместо значения будет отображаться <Объект не найден>). Поэтому перед использованием этого метода в промышленной базе крайне рекомендуется выполнить поиск ссылок программно с помощью функции НайтиПомеченныеНаУдаление() или НайтиСсылки().

Алгоритм действий для восстановления работы удаления

Подведем итог и составим пошаговый план действий, если Shift+Del не срабатывает:

  1. Проверяем Журнал регистрации: Посмотрим, какие события фиксируются в момент нажатия клавиш удаления. Если там есть записи об отказе в доступе, значит, дело в правах.
  2. Настройка профилей: Зайдем в Администрирование -> Обслуживание -> Удаление помеченных объектов. Попробуем запустить удаление оттуда. Если оно проходит успешно, значит, проблема только в настройке интерфейса (клавиша Shift+Del программно отключена разработчиками в коде формы).
  3. Тестирование и исправление: Если процесс «падает», запустим конфигуратор, перейдем в Администрирование — Тестирование и исправление. Выберем пункты «Проверка логической целостности» и «Реиндексация таблиц». Это поможет устранить внутренние ошибки БД, мешающие поиску ссылок.
  4. Внешние инструменты: Воспользуемся консолью запросов или универсальной обработкой «Универсальный подбор и обработка объектов». В настройках таких обработок часто есть опция «Удалить (непосредственно)», которая вызывает метод Удалить() программно, обходя ограничения прав интерфейса.

Проанализировав ситуацию, можно сделать вывод: в связке КА 2.4 и платформы 8.3.12 проблема чаще всего кроется в стабильности платформы или настройках профилей групп доступа БСП. Выполнив очистку кэша и проверку прав внутри режима предприятия, вы с большой вероятностью восстановите работоспособность системы.

← На главную