---
name: bsp-admin-tools
description: "Use this skill when the agent needs to set or release an infobase connection lock, check whether a lock is active, get session lock parameters for a data area, find active connections to the infobase, put the infobase into user-termination mode or cancel it, open the administration parameters form, programmatically delete marked-for-deletion objects with referential integrity control, get a list of objects marked for deletion, find references to objects being deleted, check or toggle the scheduled-deletion mode, integrate deletion visibility into form lists, or implement before/after deletion hooks. Do not use for routine object recording (delegate to bsp-base-common), for scheduled job management unrelated to deletion (delegate to bsp-longs-and-jobs), for infobase updates (delegate to bsp-update), or for backup operations (delegate to bsp-backup)."
metadata:
  scope: bsp-3.1.11
  version: "3.1.11"
  layer: L3
  related_subsystems:
    - ЗавершениеРаботыПользователей
    - УдалениеПомеченныхОбъектов
  related_skills:
    - bsp-fundamentals
    - bsp-base-common
    - bsp-longs-and-jobs
---

# ЗавершениеРаботыПользователей и УдалениеПомеченныхОбъектов (StandardSubsystems 3.1.11)

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

## When to use

- Нужно **заблокировать** соединения с ИБ перед обновлением или администрированием — `СоединенияИБ.УстановитьБлокировкуСоединений`.
- Нужно **снять блокировку** ИБ после завершения администрирования — `СоединенияИБ.РазрешитьРаботуПользователей`.
- Нужно проверить, **установлена ли блокировка** соединений — `СоединенияИБ.УстановленаБлокировкаСоединений`.
- Нужно получить **параметры блокировки** (время начала/окончания, сообщение, код) — `СоединенияИБ.ПараметрыБлокировкиСеансов`.
- Нужно установить/прочитать блокировку **сеансов области данных** (модель сервиса) — `СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных` / `ПолучитьБлокировкуСеансовОбластиДанных`.
- Нужно получить **информацию о текущих соединениях** с ИБ — `СоединенияИБ.ИнформацияОСоединениях`.
- Нужно **включить/выключить режим завершения** работы пользователей из клиентского кода — `СоединенияИБКлиент.УстановитьРежимЗавершенияРаботыПользователей`.
- Нужно пометить, что **все чужие сеансы должны быть завершены** — `СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего`.
- Нужно запросить у пользователя **параметры администрирования** (ИБ / кластера) — `СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования`.
- Нужно **получить список помеченных на удаление** объектов (с фильтром по метаданным, разделением, исключением предопределённых и служебных) — `УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление`.
- Нужно **найти ссылки на удаляемые объекты** внутри конкретного объекта (контроль ссылочной целостности) — `УдалениеПомеченныхОбъектов.СсылкиНаУдаляемыеОбъекты`.
- Нужно **программно удалить** помеченные объекты (стандартный, монопольный или упрощённый режим) — `УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты`.
- Нужно запустить **интерактивное удаление** помеченных из клиентского кода — `УдалениеПомеченныхОбъектовКлиент.НачатьУдалениеПомеченных`.
- Нужно интегрировать **видимость помеченных на удаление** в форму списка (скрыть/показать помеченные, переход к помеченным) — `УдалениеПомеченныхОбъектов.ПриСозданииНаСервере`, `УдалениеПомеченныхОбъектовКлиент.ПоказатьПомеченныеНаУдаление` / `ПерейтиКПомеченнымНаУдаление`.
- Нужно проверить/изменить **режим удаления по расписанию** — `УдалениеПомеченныхОбъектов.РежимУдалятьПоРасписанию`, `УдалениеПомеченныхОбъектовКлиент.ПриИзмененииФлажкаУдалятьПоРасписанию`.
- Нужно реализовать **переопределяемые крючки** перед/после удаления группы объектов — `УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов`, `ПослеУдаленияГруппыОбъектов`.
- Нужно определить, **в каких списках должны быть команды** «Показать помеченные» / «Перейти к помеченным» — `УдалениеПомеченныхОбъектовПереопределяемый.ПриОпределенииОбъектовСКомандойПоказатьПомеченные`.
- Нужно переопределить **параметры блокировки сеансов** при установке блокировки ИБ — `СоединенияИБПереопределяемый.ПриОпределенииПараметровБлокировкиСеансов`.

## Не использовать, если

- Нужно **обычно записать/прочитать объект** — `bsp-base-common` (`ОбщегоНазначения`, `ОбщегоНазначенияКлиент`).
- Нужно **запустить фоновое задание** или работать с регламентными заданиями вне подсистемы удаления — `bsp-longs-and-jobs`.
- Нужно **обновить конфигурацию или ИБ** — `bsp-update` (блокировка ИБ перед обновлением принадлежит `СоединенияИБ`, но запуск обновления — `ОбновлениеИнформационнойБазы`).
- Нужно **создать резервную копию** ИБ — `bsp-backup`.
- Нужно **напрямую разорвать COM-соединение** или работать с активными пользователями на уровне платформы (администрирование кластера) — это платформенный API `v83.COMConnector`, не БСП.

## Core concepts

### ЗавершениеРаботыПользователей — карта модулей

| Модуль | Контекст | Назначение |
|---|---|---|
| `СоединенияИБ` | Сервер, Толстый клиент, Внешнее соединение | **Стабильный серверный API**: информация о соединениях, блокировка ИБ, блокировка сеансов областей данных, параметры блокировки |
| `СоединенияИБКлиент` | Тонкий клиент, Толстый клиент | **Стабильный клиентский API**: режим завершения работы, признак завершения сеансов, форма параметров администрирования |
| `СоединенияИБКлиентСервер` | Клиент + Сервер | ⚠️ Служебный: вспомогательные процедуры для клиент-серверного взаимодействия |
| `СоединенияИБВызовСервера` | Серверный вызов | ⚠️ Служебный: лёгкие серверные вызовы без контекста формы |
| `СоединенияИБПереопределяемый` | Сервер, Толстый клиент, Внешнее соединение | **Переопределяемый**: модификация параметров блокировки сеансов |

> **Блокировка ИБ vs блокировка сеансов области данных.** `УстановитьБлокировкуСоединений` блокирует **всю** ИБ (запрещает новые соединения, текст + код разрешения + таймаут). `УстановитьБлокировкуСеансовОбластиДанных` — блокировка **одной области данных** в модели сервиса (параметры — через `НовыеПараметрыБлокировкиСоединений`). Снятие: `РазрешитьРаботуПользователей` (снимает блокировку ИБ; для областей данных — `УстановитьБлокировкуСеансовОбластиДанных` с `Установлена = Ложь`).

### УдалениеПомеченныхОбъектов — карта модулей

| Модуль | Контекст | Назначение |
|---|---|---|
| `УдалениеПомеченныхОбъектов` | Сервер, Толстый клиент, Внешнее соединение | **Стабильный серверный API**: получение помеченных, ссылки на удаляемые, программное удаление, настройки отображения, режим расписания |
| `УдалениеПомеченныхОбъектовКлиент` | Тонкий клиент, Толстый клиент | **Стабильный клиентский API**: интерактивное удаление, видимость помеченных в формах, расписание, оповещения |
| `УдалениеПомеченныхОбъектовПереопределяемый` | Сервер, Толстый клиент, Внешнее соединение | **Переопределяемый**: крючки перед/после удаления, определение объектов с командой «Показать помеченные» |
| `УдалениеПомеченныхОбъектовПовтИсп` | Сервер (повторное использование) | ⚠️ Служебный: кэши настроек отображения, состояния удаления |
| `УдалениеПомеченныхОбъектовСлужебный` | Сервер | ⚠️ Служебный: ядро удаления, обход ссылок, транзакционная порционность |
| `УдалениеПомеченныхОбъектовСлужебныйВызовСервера` | Серверный вызов | ⚠️ Служебный: лёгкие серверные вызовы |
| `УдалениеПомеченныхОбъектовСлужебныйКлиентСервер` | Клиент + Сервер | ⚠️ Служебный: вспомогательные процедуры |

### Режимы удаления

`УдалитьПомеченныеОбъекты` поддерживает три режима удаления:

| Режим | Описание |
|---|---|
| `"Стандартный"` | Контроль ссылочной целостности + многопользовательская работа. Без монопольного режима |
| `"Монопольный"` | Контроль ссылочной целостности с установкой монопольного режима. Если не удалось — исключение |
| `"Упрощённый"` | Контроль ссылочной целостности только в **непомеченных** объектах. В помеченных — ссылки на удаляемые объекты **очищаются** |

### Событийная модель удаления

При программном удалении (`УдалитьПомеченныеОбъекты`) подсистема разбивает массив удаляемых объектов на **группы** (связанные по ссылкам). Для каждой группы:

1. `УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов(Контекст, УдаляемыеОбъекты)` — **вне транзакции**
2. Удаление группы в транзакции с контролем ссылочной целостности
3. `УдалениеПомеченныхОбъектовПереопределяемый.ПослеУдаленияГруппыОбъектов(Контекст, Успешно)` — **вне транзакции**

### Регистры и константы подсистемы удаления

| Объект | Назначение |
|---|---|
| `InformationRegister.УдаляемыеОбъекты` | Регистр для отложенного/фонового удаления |
| `InformationRegister.НеудаленныеОбъекты` | Объекты, которые не удалось удалить (препятствующие ссылки) |
| `Constant.ИспользоватьУдалениеПомеченныхОбъектов` | Функциональная опция: включена ли подсистема |
| `Constant.ПроверятьИспользованиеУдаляемыхОбъектов` | Проверять ли использование удаляемых объектов в объектах, не помеченных на удаление |
| `ScheduledJob.УдалениеПомеченныхОбъектов` | Регламентное задание автоматического удаления |
| `ScheduledJob.КонтрольУдаленияПомеченныхОбъектов` | Регламентное задание контроля неудалённых объектов |

## Key methods

| Метод | Сигнатура | Контекст | Назначение | Пример вызова |
|---|---|---|---|---|
| `СоединенияИБ.УстановитьБлокировкуСоединений` | `УстановитьБлокировкуСоединений(ТекстСообщения, КодРазрешения, ОжиданиеНачалаБлокировки = 0, ДлительностьБлокировки = 0)` → `Булево` | Сервер | Установить блокировку ИБ | `СоединенияИБ.УстановитьБлокировкуСоединений("Обновление ИБ", "Код123", 5, 60);` |
| `СоединенияИБ.РазрешитьРаботуПользователей` | `РазрешитьРаботуПользователей()` → `Булево` | Сервер | Снять блокировку ИБ | `СоединенияИБ.РазрешитьРаботуПользователей();` |
| `СоединенияИБ.УстановленаБлокировкаСоединений` | `УстановленаБлокировкаСоединений()` → `Булево` | Сервер | Проверить, установлена ли блокировка ИБ | `Если СоединенияИБ.УстановленаБлокировкаСоединений() Тогда …` |
| `СоединенияИБ.ИнформацияОСоединениях` | `ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, …)` → `Структура` | Сервер | Получить информацию о соединениях с ИБ | `Инфо = СоединенияИБ.ИнформацияОСоединениях(Истина);` |
| `СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных` | `УстановитьБлокировкуСеансовОбластиДанных(Параметры, ПоМестномуВремени = Истина, ОбластьДанных = -1)` | Сервер | Установить/снять блокировку области данных (SaaS) | `СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Параметры, Истина);` |
| `СоединенияИБКлиент.УстановитьРежимЗавершенияРаботыПользователей` | `УстановитьРежимЗавершенияРаботыПользователей(ЗавершитьРаботу)` | Клиент | Включить/выключить режим завершения работы | `СоединенияИБКлиент.УстановитьРежимЗавершенияРаботыПользователей(Истина);` |
| `СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования` | `ПоказатьПараметрыАдминистрирования(Оповещение, ЗапрашиватьПараметрыИБ, ЗапрашиватьПараметрыКластера, …)` | Клиент | Открыть форму ввода параметров администрирования ИБ/кластера | `СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(Оповещение, Истина, Ложь);` |
| `УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление` | `ПомеченныеНаУдаление(ОтборМетаданных = Неопределено, ИскатьТехнологическиеОбъекты = Ложь)` → `Массив` | Сервер | Получить массив помеченных на удаление | `Помеченные = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление();` |
| `УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты` | `УдалитьПомеченныеОбъекты(УдаляемыеОбъекты, РежимУдаления = "Стандартный")` → `Структура` | Сервер | Программное удаление помеченных объектов | `Результат = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(МассивСсылок, "Стандартный");` |
| `УдалениеПомеченныхОбъектов.ПриСозданииНаСервере` | `ПриСозданииНаСервере(Форма, НастройкиОтображенияПомеченныхОбъектов)` | Сервер | Интегрировать видимость помеченных в динамический список формы | `УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Элементы.Список);` |

> **Полный список методов** (22 метода, включая переопределяемые и клиентский API расписания) — в [`references/key-methods.md`](references/key-methods.md).

## Patterns

### 1. Блокировка ИБ перед обновлением и снятие после

```bsl
// Установка блокировки с отсрочкой 5 мин и длительностью 60 мин
Успех = СоединенияИБ.УстановитьБлокировкуСоединений(
    "Технические работы. Подключение возможно с кодом разрешения.",
    "СекретныйКод",   // КодРазрешения — для входа администратора
    5,                 // ОжиданиеНачалаБлокировки (минуты)
    60);               // ДлительностьБлокировки (минуты)

Если Не Успех Тогда
    ВызватьИсключение "Не удалось установить блокировку ИБ";
КонецЕсли;

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

СоединенияИБ.РазрешитьРаботуПользователей();  // плановое снятие
```

### 2. Проверка блокировки перед записью и включение режима завершения

```bsl
&НаКлиенте
Процедура НачатьАдминистрирование(Команда)
    Если СоединенияИБ.УстановленаБлокировкаСоединений() Тогда
        ПоказатьПредупреждение(, "ИБ заблокирована. Обратитесь к администратору.");
        Возврат;
    КонецЕсли;

    // Отправить предупреждение работающим пользователям
    СоединенияИБКлиент.УстановитьРежимЗавершенияРаботыПользователей(Истина);

    // Не завершать текущий сеанс
    СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Истина);
КонецПроцедуры
```

### 3. Блокировка сеансов области данных (модель сервиса)

```bsl
// Создать параметры блокировки
Параметры = СоединенияИБ.НовыеПараметрыБлокировкиСоединений();
Параметры.Начало     = '20260101230000';  // 23:00 1 января
Параметры.Конец      = '20260102060000';  // 06:00 2 января
Параметры.Сообщение  = "Область данных заблокирована для обновления";
Параметры.Установлена = Истина;

// Установить блокировку для области данных №3
СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Параметры, Истина, 3);

// Прочитать блокировку
Текущая = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(Истина);
```

### 4. Программное удаление помеченных объектов

```bsl
ПолучитьПомеченные = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление();

Если ПолучитьПомеченные.Количество() = 0 Тогда
    Возврат;
КонецЕсли;

// Фильтрация по типу (опционально)
ОтборМетаданных = Новый СписокЗначений;
ОтборМетаданных.Добавить("Справочник.Контрагенты");
ПомеченныеКонтрагенты = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление(ОтборМетаданных);

Результат = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(ПомеченныеКонтрагенты, "Стандартный");

Если Не Результат.Успешно Тогда
    Для Каждого СтрокаПрепятствия Из Результат.ПрепятствующиеУдалению Цикл
        Сообщить(Строка(СтрокаПрепятствия.УдаляемыйСсылка) + " используется в "
            + Строка(СтрокаПрепятствия.МестоИспользования));
    КонецЦикла;
КонецЕсли;
```

### 5. Интеграция видимости помеченных в форму списка

```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Вариант 1: один динамический список
    УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Элементы.Список);
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере_МножествоСписков(Отказ, СтандартнаяОбработка)
    // Вариант 2: несколько динамических списков
    Настройки = УдалениеПомеченныхОбъектов.НастройкиОтображенияПомеченныхОбъектов();

    Настройка = Настройки.Добавить();
    Настройка.ИмяЭлементаФормы = "Список1";
    ОсновныеТаблицы = Новый СписокЗначений;
    ОсновныеТаблицы.Добавить("Справочник.Номенклатура");
    Настройка.ТипыМетаданных = ОсновныеТаблицы;

    Настройка = Настройки.Добавить();
    Настройка.ИмяЭлементаФормы = "Список2";

    УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Настройки);
КонецПроцедуры
```

### 6. Переопределение: подготовка/очистка до и после удаления группы

```bsl
// В модуле УдалениеПомеченныхОбъектовПереопределяемый прикладной конфигурации

Процедура ПередУдалениемГруппыОбъектов(Контекст, УдаляемыеОбъекты) Экспорт
    // Инициализация контекста для передачи в ПослеУдаления
    Контекст.Вставить("УдалённыеКоды", Новый Массив);
    Для Каждого Ссылка Из УдаляемыеОбъекты Цикл
        Контекст.УдалённыеКоды.Добавить(Ссылка.Код);
    КонецЦикла;
КонецПроцедуры

Процедура ПослеУдаленияГруппыОбъектов(Контекст, Успешно) Экспорт
    Если Успешно Тогда
        // Логирование, отправка уведомлений, очистка внешних данных
        ОбщегоНазначения.СообщитьПользователю(
            "Удалено объектов: " + Формат(Контекст.УдалённыеКоды.Количество(), "ЧГ="));
    КонецЕсли;
КонецПроцедуры
```

### 7. Переопределение: добавление команд «Показать помеченные» в формы списков

```bsl
// В модуле УдалениеПомеченныхОбъектовПереопределяемый
Процедура ПриОпределенииОбъектовСКомандойПоказатьПомеченные(Объекты) Экспорт
    Объекты.Добавить(Метаданные.Справочники.Номенклатура);
    Объекты.Добавить(Метаданные.Справочники.Контрагенты);
    Объекты.Добавить(Метаданные.Документы.ЗаказКлиента);
КонецПроцедуры
```

## Anti-patterns

### ❌ Вызывать `УстановитьБлокировкуСоединений` и не снимать блокировку

```bsl
// ❌ Если код упадёт между установкой и снятием — ИБ останется заблокированной
СоединенияИБ.УстановитьБлокировкуСоединений("Обновление");
// ... долгая обработка, может упасть ...
СоединенияИБ.РазрешитьРаботуПользователей();
```

```bsl
// ✅ Всегда в Попытка..Исключение с гарантированным снятием
УстановленаБлокировка = Ложь;
Попытка
    УстановленаБлокировка = СоединенияИБ.УстановитьБлокировкуСоединений("Обновление", "Код", 0, 30);
    // ... обработка ...
Исключение
    Если УстановленаБлокировка Тогда
        СоединенияИБ.РазрешитьРаботуПользователей();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Если УстановленаБлокировка Тогда
    СоединенияИБ.РазрешитьРаботуПользователей();
КонецЕсли;
```

### ❌ Вызвать `УдалитьПомеченныеОбъекты` внутри транзакции

```bsl
// ❌ УдалитьПомеченныеОбъекты сама управляет транзакциями — вызов внутри
//    внешней транзакции приведёт к конфликтам
НачатьТранзакцию();
Результат = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Массив);
ЗафиксироватьТранзакцию();
```

```bsl
// ✅ Вызывать вне явной транзакции — подсистема сама формирует порции
Результат = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Массив, "Стандартный");
```

### ❌ Использовать `УдалениеПомеченныхОбъектовСлужебный` напрямую

```bsl
// ❌ Служебный модуль: обратная совместимость не гарантируется
УдалениеПомеченныхОбъектовСлужебный.КакойТоСлужебныйМетод();
```

```bsl
// ✅ Стабильный API — ПомеченныеНаУдаление, УдалитьПомеченныеОбъекты, СсылкиНаУдаляемыеОбъекты
Помеченные = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление();
```

### ❌ Игнорировать результат `УдалитьПомеченныеОбъекты`

```bsl
// ❌ Объекты могут быть не удалены из-за ссылочной целостности,
//    но код продолжает как будто всё успешно
УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Массив);
```

```bsl
// ✅ Проверять результат
Результат = УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Массив, "Стандартный");
Если Не Результат.Успешно Тогда
    Для Каждого СтрокаПрепятствия Из Результат.ПрепятствующиеУдалению Цикл
        ОбщегоНазначения.СообщитьПользователю(
            "Нельзя удалить " + Строка(СтрокаПрепятствия.УдаляемыйСсылка)
            + ": используется в " + Строка(СтрокаПрепятствия.МестоИспользования));
    КонецЦикла;
КонецЕсли;
```

### ❌ Вызывать `ПоказатьПараметрыАдминистрирования` без проверки доступности подсистемы

```bsl
// ❌ Если подсистема ЗавершениеРаботыПользователей не внедрена — ошибка
СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(Оповещение, Истина, Ложь);
```

```bsl
// ✅ Проверить существование подсистемы через ОбщегоНазначенияКлиент
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда
    СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(Оповещение, Истина, Ложь);
КонецЕсли;
```

## How to explore deeper

### Какие общие модули изучить

- `СоединенияИБ` — серверный API для блокировок и информации о соединениях.
- `СоединенияИБКлиент` — клиентский API для режима завершения и параметров администрирования.
- `СоединенияИБПереопределяемый` — единственный переопределяемый модуль подсистемы ЗавершениеРаботыПользователей.
- `УдалениеПомеченныхОбъектов` — серверный API для удаления и работы с помеченными.
- `УдалениеПомеченныхОбъектовКлиент` — клиентский API для интерактивного удаления и интерфейса форм.
- `УдалениеПомеченныхОбъектовПереопределяемый` — переопределяемые крючки перед/после удаления и определение объектов с командами.

### Grep-шаблон

```text
# Найти стабильное API в модулях СоединенияИБ*
^(Функция|Процедура) [А-Я][А-Яа-яA-Za-z_]+\(.*\) Экспорт

# Найти стабильное API в модулях УдалениеПомеченныхОбъектов*
^(Функция|Процедура) [А-Я][А-Яа-яA-Za-z_]+\(.*\) Экспорт

# Найти вызовы подсистемы из прикладного кода
СоединенияИБ(Клиент)?\.[А-Я][А-Яа-яA-Za-z_]+
УдалениеПомеченныхОбъектов(Клиент)?\.[А-Я][А-Яа-яA-Za-z_]+
```