Как вынести удаление помеченных объектов в командный интерфейс пустой конфигурации 1С?

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

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

Почему стандартную функцию нельзя просто включить в подсистему

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

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

Способ 1. Создание собственной обработки для удаления объектов

Рассмотрим создание специализированной обработки, которую можно полноценно включить в состав любой подсистемы и вывести в меню «Сервис» или «Панель действий».

  1. В дереве метаданных найдем ветку Обработки и добавим новый объект, например, УдалениеПомеченныхОбъектов.
  2. В свойствах обработки укажем подсистемы, в которых она должна отображаться.
  3. Создадим основную форму обработки.
  4. На форме разместим кнопку и опишем серверную процедуру поиска и удаления помеченных элементов.

Разберем программную логику на встроенном языке. Для безопасного удаления объектов с контролем ссылочной целостности платформа предоставляет три ключевых метода:

  1. НайтиПомеченныеНаУдаление() — возвращает массив ссылок на все элементы информационной базы, у которых установлен признак пометки на удаление.
  2. НайтиПоСсылкам() — выполняет поиск мест использования ссылок в базе данных, предотвращая появление битых ссылок.
  3. УдалитьОбъекты() — производит физическое удаление переданного массива ссылок из базы данных.

Посмотрим на пример базового серверного алгоритма:


&НаСервере
Процедура ВыполнитьУдалениеНаСервере()
    
    // Получаем массив всех помеченных на удаление объектов
    МассивПомеченных = НайтиПомеченныеНаУдаление();
    
    Если МассивПомеченных.Количество() = 0 Тогда
        ВызватьИсключение "Помеченные на удаление объекты не найдены.";
    КонецЕсли;
    
    // Выполняем проверку ссылочной целостности и удаление
    // Метод возвращает массив объектов, которые не удалось удалить из-за наличия ссылок
    НеудаленныеОбъекты = УдалитьОбъекты(МассивПомеченных, Истина);
    
    Если НеудаленныеОбъекты.Количество() > 0 Тогда
        // Обработка объектов, на которые найдены ссылки в других данных
        Для Каждого Ссылка Из НеудаленныеОбъекты Цикл
            // Анализ не удаленных ссылок
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Способ 2. Вынос функционала через общую команду

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

  1. В дереве конфигурации перейдем в ветку Общие → Общие команды и создадим команду УдалитьПомеченныеОбъекты.
  2. В свойстве Группа укажем значение Панель действий.Сервис или Панель навигации.Обычное.
  3. В свойстве Состав подсистем отметим флажками те подсистемы, в интерфейсе которых команда должна появиться.
  4. В модуле команды опишем клиент-серверный вызов удаления или открытие созданной формы обработки.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    Режим = РежимДиалогаВопрос.ДаНет;
    Оповещение = Новый ОписаниеОповещения("ПослеПодтвержденияУдаления", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Выполнить поиск и удаление помеченных объектов?", Режим);
    
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодтвержденияУдаления(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        УдалитьПомеченныеОбъектыНаСервере();
        ПоказатьОповещениеПользователя("Удаление завершено", , "Операция успешно выполнена.");
    КонецЕсли;
КонецПроцедуры

Способ 3. Внедрение подсистемы из Библиотеки стандартных подсистем (БСП)

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

  1. Готовый интерактивный помощник с отображением дерева связей и зависимостей не удаленных объектов.
  2. Возможность выборочного удаления элементов пользователем.
  3. Поддержка фонового удаления по расписанию через регламентные задания без блокировки работы пользователей.
  4. Автоматическая интеграция в панель администрирования конфигурации.

Важные требования к правам доступа

Обратим внимание на права пользователей при работе с удалением объектов:

  1. Для корректной работы методов НайтиПоСсылкам() и УдалитьОбъекты() у пользователя должны быть полные административные права или назначена роль с правом интерактивного и программного удаления соответствующих типов метаданных.
  2. Для открытия стандартного меню «Функции для технического специалиста» в клиентском приложении требуется наличие права Режим "Все функции" (или Режим "Функции для технического специалиста") в составе роли, а также включение соответствующей опции в меню Настройки → Параметры.
← На главную