Как удалить пользователя из справочника «Пользователи» в 1С при наличии ссылок на «Сохраненные настройки»?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При администрировании баз данных на платформе 1С:Предприятие 8.2 и 8.3 (особенно в конфигурациях на обычных формах, таких как «Бухгалтерия предприятия» редакции 2.0) специалисты часто сталкиваются со следующей проблемой. При попытке физического удаления пользователя из справочника Пользователи через стандартную обработку «Поиск и удаление помеченных объектов» система выдает ошибку.

В списке связей отображаются неубиваемые ссылки на справочник Сохраненные настройки с типами НастройкиПользователяНастройкиОтчета и Настройки формы отчета. Попытки очистить кэш на диске в каталогах Local и Roaming, а также удаление пользователя в Конфигураторе не приносят результата. Ссылки на удаляемый объект упорно остаются в базе данных.

В рамках этой статьи мы подробно разберем, почему возникает данная проблема, как устроена механика хранения этих настроек и какими способами можно полностью очистить базу от ссылок на удаляемого пользователя.

Выясним причину: почему стандартное удаление блокируется?

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

Все эти параметры записываются в справочник Сохраненные настройки. У этих записей в качестве реквизита Владелец (или в табличной части Пользователи) указывается конкретный элемент справочника Пользователи.

Главная сложность заключается в следующем: когда мы открываем справочник Сохраненные настройки интерактивно под учетной записью администратора, система автоматически и неявно включает жесткий отбор по текущему пользователю. Администратор видит только свои настройки, в то время как настройки удаляемого пользователя остаются скрытыми от просмотра. Именно поэтому обычный поиск в списке справочника ничего не дает.

Кроме того, при попытке открыть карточку такой настройки непосредственно из окна поиска ссылок, кнопка «Удалить текущий» в табличной части «Пользователи» оказывается заблокированной. Это сделано разработчиками конфигурации программно, чтобы пользователи случайно не нарушили внутреннюю логику хранения служебных данных отчетов.

Ниже мы подробно рассмотрим несколько практических способов обхода этого ограничения и полного удаления мешающих настроек.

Способ 1. Отключение отборов в справочнике «Сохраненные настройки»

Это самый простой и быстрый способ, не требующий написания программного кода или использования сторонних обработок. Нам нужно заставить интерфейс 1С показать абсолютно все записи справочника без фильтрации по текущему авторизованному пользователю. Разберем этот процесс по шагам:

  1. Зайдем в информационную базу под учетной записью с административными правами.
  2. Перейдем в главное меню программы: Операции -> Справочники -> Сохраненные настройки. Перед нами откроется список настроек.
  3. В любой точке открывшегося списка нажмем правой кнопкой мыши для вызова контекстного меню и выберем пункт Настройка списка... (также можно воспользоваться кнопкой на панели инструментов или сочетанием клавиш).
  4. В открывшемся окне настроек перейдем на вкладку Отбор.
  5. Найдем строку отбора по полю Пользователь (или Владелец). Мы увидим, что напротив нее стоит флажок активности. Нажмем правой кнопкой мыши по этой строке и выберем пункт Выключить или просто снимем этот флажок. Нажмем кнопку ОК.
  6. Теперь список обновится, и мы увидим абсолютно все сохраненные настройки всех пользователей базы данных.
  7. Для удобства настроим вывод колонок. Снова вызовем контекстное меню, выберем Установить интервал дат и колонки... (или аналогичный пункт настройки колонок) и выведем колонку Пользователь на экран.
  8. Выполним сортировку по колонке с именем пользователя, найдем нашего удаляемого сотрудника.
  9. Выделим все строки настроек, принадлежащие этому пользователю (это могут быть десятки автосохраненных вариантов), и нажмем клавишу Delete, чтобы пометить их на удаление.
  10. Перейдем в меню Операции -> Удаление помеченных объектов и запустим стандартную процедуру. Теперь система без проблем удалит и настройки, и самого пользователя.

Способ 2. Использование «Групповой обработки справочников и документов»

Если записей слишком много или ручной поиск в справочнике вызывает затруднения, воспользуемся проверенным универсальным инструментом администратора — встроенной обработкой групповой очистки:

  1. Перейдем в меню Сервис -> Групповая обработка справочников и документов.
  2. На вкладке «Объекты отбора» в поле «Тип объекта» выберем значение Справочники.
  3. В табличной части ниже нажмем кнопку Добавить и выберем из списка справочник Сохраненные настройки.
  4. В разделе «Отбор» добавим новое условие: выберем поле Пользователь (или Владелец), установим вид сравнения Равно, а в качестве значения укажем нашего удаляемого пользователя из справочника.
  5. Нажмем кнопку Выбрать в нижней части окна. Обработка просканирует базу данных и на вкладке «Обработка» выведет список всех найденных записей настроек, жестко привязанных к нашему пользователю.
  6. В поле «Действие» в нижней части экрана выберем команду Пометить на удаление и нажмем кнопку Выполнить.
  7. После успешного выполнения обработки закроем ее и запустим стандартное удаление помеченных объектов. Все связи будут разорваны, и очистка завершится успешно.

Способ 3. Программный метод очистки (для разработчиков)

В некоторых случаях (например, при сильном повреждении базы или при автоматизации процесса обслуживания большого количества баз данных) ручные методы не подходят. Тогда мы можем прибегнуть к программной очистке с помощью внешней обработки «Консоль кода» или создав небольшую разовую обработку в конфигураторе.

Рассмотрим пример кода, который выполняет прямое удаление элементов справочника Сохраненные настройки без контроля ссылочной целостности, а также очищает системный кэш настроек пользователя на уровне СУБД:


// 1. Находим ссылку на удаляемого пользователя по его имени
ИмяПользователяДляУдаления = "ИвановИИ";
СсылкаНаПользователя = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователяДляУдаления);

Если НЕ СсылкаНаПользователя.Пустая() Тогда
    
    // 2. Создаем выборку по справочнику Сохраненные настройки
    ВыборкаНастроек = Справочники.СохраненныеНастройки.Выбрать();
    КоличествоУдаленных = 0;
    
    Пока ВыборкаНастроек.Следующий() Цикл
        // Проверяем заполнение владельца или реквизита Пользователь
        Если ВыборкаНастроек.Владелец = СсылкаНаПользователя Тогда
            Попытка
                ОбъектНастройки = ВыборкаНастроек.ПолучитьОбъект();
                // Используем непосредственное удаление для экономии времени
                ОбъектНастройки.Удалить(); 
                КоличествоУдаленных = КоличествоУдаленных + 1;
            Исключение
                Сообщить("Не удалось удалить настройку: " + ОписаниеОшибки(), СтатусСообщения.Важное);
            КонецПопытки;
        КонецЕсли;
    Loop;
    
    Сообщить("Успешно удалено служебных настроек: " + КоличествоУдаленных);
    
    // 3. Выполняем очистку системных платформенных настроек СУБД
    Попытка
        ОчиститьНастройкиПользователя(ИмяПользователяДляУдаления);
        Сообщить("Системный кэш настроек пользователя успешно очищен.");
    Исключение
        Сообщить("Ошибка при очистке кэша: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецЕсли;

Этот код гарантированно и мгновенно уничтожает любые скрытые связи, позволяя безболезненно удалить сам элемент справочника Пользователи.

Альтернативный вариант: стоит ли удалять пользователей физически?

Проанализируем ситуацию с точки зрения методологии ведения учета и безопасности данных. Опытные системные архитекторы и ведущие программисты 1С крайне не рекомендуют производить физическое удаление пользователей из справочника, если они работали в базе хотя бы несколько дней.

Даже если данный пользователь не проводил документы лично, он мог выступать в роли:

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

Вместо физического удаления мы рекомендуем использовать следующий алгоритм «архивации» учетной записи:

  1. В режиме «Конфигуратор» перейдем в меню Администрирование -> Пользователи, найдем нужного сотрудника, откроем его карточку и снимем флажок Показывать в списке выбора. Это предотвратит попытки входа под его именем на стартовом экране программы.
  2. В режиме «1С:Предприятие» перейдем в справочник Пользователи.
  3. Изменим наименование пользователя, добавив к нему префикс (например, «Архив_ИвановИИ»).
  4. Создадим в справочнике группу Архивные пользователи и переместим сотрудника туда.
  5. Если в конфигурации настроены права доступа, заберем у этого пользователя все активные роли и профили групп доступа, оставив только минимальные права, либо заблокируем его учетную запись программно.

Таким образом, мы сохраняем полную ссылочную целостность нашей информационной базы, защищаем исторические отчеты от появления битых ссылок и при этом полностью исключаем несанкционированный доступ бывшего сотрудника к рабочей конфигурации.

← На главную