Удаление групп объектов в 1С:Предприятие через интерфейс — рутинная задача, которая отнимает время при массовых операциях или автоматизации бизнес-процессов. Однако программное удаление требует осторожности: неправильный код может нарушить целостность базы, удалить связанные данные или вызвать ошибки при обновлении конфигурации. Эта статья охватывает все ключевые сценарии — от удаления групп в справочниках до очистки планов обмена и пользователей, с примерами кода для 1С 8.3 (актуально и для 8.2 с учётом синтаксиса).

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

1. Подготовка к программному удалению: права, блокировки и резервное копирование

Прежде чем писать код для удаления, убедитесь, что:

  • 🔐 У вашей учётной записи есть права администратора или роль с разрешениями на удаление объектов (проверьте в Администрирование → Пользователи).
  • 🔄 База не используется другими пользователями (иначе возникнет Ошибка блокировки данных).
  • 💾 Создан бэкап — даже если удаление кажется безопасным, восстановление из резервной копии займёт меньше времени, чем ручной ремонт базы.
  • 📋 Вы точно знаете идентификаторы или наименования групп, которые нужно удалить (например, через запрос или отчёт Все справочники).

Для массовых операций рекомендуется использовать внешние обработки или серверные процедуры, чтобы избежать таймаута клиентского соединения. Если удаление затрагивает более 1000 объектов, разбейте задачу на пакеты по 200–300 элементов.

💡

Перед массовым удалением проверьте, не используются ли группы в регламентных заданиях или бизнес-процессах. Например, группа справочника "Контрагенты" может быть привязана к правилу обмена данными с сайтом.

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP или 1С:УТ 11) группы справочников могут быть помечены как системные (с признаком Предопределённый). Их удаление приведёт к ошибкам при обновлении или проверке конфигурации.

2. Удаление групп в справочниках: методы и примеры кода

Группы в справочниках (например, "Поставщики", "Номенклатура", "Сотрудники") удаляются через объектную модель или прямые SQL-запросы. Рассмотрим оба подхода.

2.1. Удаление через объектную модель (рекомендуемый способ)

Используйте метод Удалить() для объекта группы. Пример для справочника Номенклатура:

Процедура УдалитьГруппуНоменклатуры(ИмяГруппы)

Справочник = Справочники.Номенклатура;

Группа = Справочник.НайтиПоНаименованию(ИмяГруппы);

Если Не Группа.ЭтоГруппа() Тогда

Сообщить("Ошибка: '" + ИмяГруппы + "' не является группой!");

Возврат;

КонецЕсли;

Попытка

Группа.Удалить();

Сообщить("Группа '" + ИмяГруппы + "' удалена успешно");

Исключение

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры

Для массового удаления используйте цикл по результату запроса:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Справочник1.Ссылка КАК Ссылка

|ИЗ

| Справочник.Номенклатура КАК Справочник1

|ГДЕ

| Справочник1.ЭтоГруппа = ИСТИНА

| И Справочник1.Наименование ПОДОБНО ""%Тест%""";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Попытка

Выборка.Ссылка.Удалить();

Исключение

Сообщить("Не удалось удалить: " + Выборка.Ссылка.Наименование);

КонецПопытки;

КонецЦикла;

2.2. Удаление через прямой SQL-запрос (для опытных)

Этот метод быстрее, но опасен — нарушение ссылочной целостности может повредить базу. Пример для MS SQL Server:

ВыполнитьSQLЗапрос(

"DELETE FROM _Reference123 WHERE _ParentID_RRef IS NOT NULL AND _Description LIKE '%Тест%'",

Истина // Режим транзакции

);

⚠️ Внимание: Прямые SQL-запросы обходят механизмы проверки 1С. Например, если в группе есть элементы, они останутся "висячими" без родителя, что вызовет ошибки при открытии справочника. Всегда проверяйте результат в Тестирование и исправление.

Нет ли в группе элементов?|Группа не используется в документах?|Группа не помечена как предопределённая?|Есть права на удаление?-->

3. Удаление групп в планах обмена

Группы в планах обмена (например, ПланОбмена.Основной) удаляются аналогично справочникам, но с учётом особенностей:

  • 🔗 Группы могут быть привязаны к узлам обмена — их удаление нарушит синхронизацию.
  • 📤 Если группа используется в правилах обмена, её удаление вызовет ошибки при выгрузке/загрузке данных.
  • 🔄 В распределённых базах удаление группы на одном узле не удалит её автоматически на других.

Пример кода для удаления группы в плане обмена:

Процедура УдалитьГруппуПланаОбмена(ИмяПлана, ИмяГруппы)

ПланОбмена = ПланыОбмена[ИмяПлана];

Группа = ПланОбмена.НайтиПоНаименованию(ИмяГруппы);

Если Группа = Неопределён Тогда

Сообщить("Группа не найдена!");

Возврат;

КонецЕсли;

// Проверяем, не используется ли группа в узлах

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1

| УзлыОбмена.Ссылка КАК Ссылка

|ИЗ

| ПланОбмена." + ИмяПлана + ".Узлы КАК УзлыОбмена

|ГДЕ

| УзлыОбмена.Группа = &Группа";

Запрос.УстановитьПараметр("Группа", Группа);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Группа.Удалить();

Сообщить("Группа удалена");

Иначе

Сообщить("Ошибка: группа используется в узлах обмена!");

КонецЕсли;

КонецПроцедуры

Что будет, если удалить группу плана обмена, используемую в узле?

При следующем обмене данным узел не сможет найти родительскую группу, что приведёт к ошибке "Не найден объект метаданных" (ОшибкаЗагрузкиДанных). Восстановить работоспособность можно только вручную, перенастроив узлы.

4. Удаление групп пользователей и ролей

Группы пользователей (например, в Справочник.Пользователи) и группы ролей удаляются через объект ПользователиИнформационнойБазы. Особенности:

  • 👥 Удаление группы пользователей не удаляет самих пользователей — они просто теряют привязку к группе.
  • 🔒 Группы ролей (Справочник.Роли) нельзя удалить, если они назначены пользователям или другим группам.
  • 🛡️ Администратор (Администратор или FullAccess) не может быть удалён.

Пример удаления группы пользователей:

Процедура УдалитьГруппуПользователей(ИмяГруппы)

Пользователи = ПользователиИнформационнойБазы();

Группа = Пользователи.НайтиПоИмени(ИмяГруппы);

Если Группа.Тип <> Тип("ГруппаПользователей") Тогда

Сообщить("Ошибка: '" + ИмяГруппы + "' не является группой!");

Возврат;

КонецЕсли;

// Проверяем, есть ли пользователи в группе

Если Группа.Пользователи.Количество() > 0 Тогда

Сообщить("В группе есть пользователи! Сначала переназначьте их.");

Возврат;

КонецЕсли;

Группа.Удалить();

Сообщить("Группа '" + ИмяГруппы + "' удалена");

КонецПроцедуры

⚠️ Внимание: В 1С:Предприятие 8.3.20+ при удалении группы пользователей через объектную модель может возникать ошибка Недостаточно прав для изменения пользователей, даже если вы администратор. В этом случае используйте режим "Конфигуратор" с полными правами.

5. Ошибки при удалении групп и способы их решения

Типичные ошибки и их причины:

Ошибка Причина Решение
Нарушение ссылочной целостности В базе есть документы или элементы, ссылающиеся на группу. Используйте запрос для поиска ссылок или отметьте группу на удаление (ПометитьУдаление()).
Ошибка блокировки данных Группа заблокирована другим пользователем или сеансом. Закройте все сеансы через Администрирование → Активные пользователи.
Недостаточно прав У учётной записи нет прав на удаление или изменение метаданных. Выполните операцию в режиме "Конфигуратор" или запросите права у администратора.
Объект помечен на удаление Группа уже помечена на удаление, но не удалена физически. Выполните Очистка помеченных объектов в конфигураторе.

Если ошибка повторяется, проверьте:

  • 🔍 Журнал регистрации (Администрирование → Журнал регистрации) на детали ошибки.
  • 🛠️ Целостность базы через Тестирование и исправление.
  • 📄 Логи транзакций (если используется MS SQL Server или PostgreSQL).

Через объектную модель (1С)|Прямые SQL-запросы|Внешние обработки|Ручной режим в интерфейсе-->

6. Автоматизация: внешние обработки и регламентные задания

Для регулярного удаления групп (например, очистки тестовых данных) удобно использовать:

  • 📁 Внешние обработки с графическим интерфейсом для выбора групп.
  • Регламентные задания для автоматического запуска по расписанию.
  • 🤖 HTTP-сервисы (если удаление инициируется из внешней системы).

Пример внешней обработки для удаления групп:

&НаКлиенте

Процедура УдалитьВыбранныеГруппы(Команда)

МассивГрупп = Новый Массив;

Для Каждого Строка Из ТаблицаГрупп Цикл

Если Строка.Отметка Тогда

МассивГрупп.Добавить(Строка.Ссылка);

КонецЕсли;

КонецЦикла;

Если МассивГрупп.Количество() = 0 Тогда

Сообщить("Не выбрано ни одной группы!");

Возврат;

КонецЕсли;

УдалитьГруппыНаСервере(МассивГрупп);

КонецПроцедуры

&НаСервере

Процедура УдалитьГруппыНаСервере(МассивГрупп)

Для Каждого Группа Из МассивГрупп Цикл

Попытка

Группа.Удалить();

Исключение

Сообщить("Ошибка при удалении " + Группа.Наименование + ": " + ОписаниеОшибки());

КонецПопытки;

КонецЦикла;

КонецПроцедуры

Для создания регламентного задания:

Регламент = РегламентныеЗадания.СоздатьЗадание(

"ОчисткаТестовыхГрупп",

"КаждыйДеньВ10ЧасовНочи",

"ОбщийМодуль.ОчисткаДанных.УдалитьТестовыеГруппы()"

);

💡

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

7. Особенности для разных конфигураций 1С

В некоторых типовых конфигурациях есть нюансы:

  • 1С:Бухгалтерия 3.0: Группы справочника Контрагенты могут быть привязаны к договорам — их удаление нарушит аналитику.
  • 1С:УТ 11: Группы в справочнике Номенклатура используются в правилах ценообразования.
  • 1С:ЗУП 3.1: Группы в справочнике Сотрудники могут быть связаны с графиками работы.
  • 1С:ERP 2.5: Группы планов обмена синхронизируются с подсистемой CRM.

Перед удалением проверьте, не используется ли группа в:

  • 📊 Отчётах (например, в настройках отбора).
  • 🔗 Бизнес-процессах или задачах.
  • 📥 Правилах обмена с другими системами (например, 1С:Документооборот).
⚠️ Внимание: В конфигурациях с версионированием данных (например, 1С:УХ) удаление группы может создать "дыры" в истории изменений, что усложнит восстановление старых версий объектов.

FAQ: Частые вопросы по удалению групп в 1С

Можно ли восстановить удалённую группу?

Если база не очищалась после удаления, группу можно восстановить через Тестирование и исправление → Восстановление помеченных объектов. Для физически удалённых данных потребуется резервная копия.

Почему при удалении группы справочника выдаёт ошибку "Объект используется"?

Это означает, что на группу ссылаются другие объекты (документы, регистры, отчёты). Используйте запрос для поиска ссылок:

ВЫБРАТЬ РАЗРЕШЕННЫЕ

| Метаданные.Имя КАК Объект,

| Метаданные.Ссылка КАК Ссылка

|ИЗ

| &КаталогМетаданных КАК Метаданные

|ГДЕ

| Метаданные.Ссылка.СсылкаНаГруппу = &Группа

Как удалить группу в плане обмена, если она используется в узлах?

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

Можно ли удалить системные группы (например, "Прочие контрагенты")?

Нет, системные группы (помеченные как Предопределённые) защищены от удаления. Их можно только скрыть или переименовать.

Как удалить группу пользователей, если в ней есть активные пользователи?

Сначала перенесите пользователей в другую группу или удалите их учётные записи. Используйте код:

Группа.Пользователи.Очистить();

Группа.Удалить();