Как выполнить непосредственное удаление объектов в 1С:УПП 1.3?

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

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

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

Критически важные риски непосредственного удаления в УПП 1.3

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

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

Рекомендация: всегда делайте резервную копию базы данных (резервный архив SQL или файловый 1CD) перед выполнением любых операций непосредственного удаления!

Способ 1. Использование пакета «Инструменты разработчика» (ИР)

Одним из наиболее мощных и популярных профессиональных наборов для обычного приложения является портативный комплект «Инструменты разработчика» (ИР) от TormozIT. Для непосредственного удаления метаданных в нем предусмотрено несколько специализированных механизмов:

Рассмотрим подробнее три основных сценария работы с ИР:

  1. Подбор и обработка объектов БД: это основной инструмент для массовой работы с данными. Мы можем гибко настроить фильтры по любым реквизитам (например, отобрать документы определенного вида за конкретный период), сформировать список и выбрать групповое действие «Удалить непосредственно». Этот метод идеален, когда нужно быстро вычистить некорректно загруженный массив документов или справочников.
  2. Редактор объекта БД: если вам требуется точечно удалить один конкретный элемент (например, задублировавшийся договор контрагента), данный инструмент позволяет открыть структуру конкретной записи и стереть её напрямую из СУБД.
  3. Удаление объектов с контролем ссылок: уникальный гибридный механизм в составе ИР. Он выполняет удаление объектов, предварительно собирая все ссылки на них, но делает это значительно быстрее стандартного платформенного механизма и не требует монопольного доступа к информационной базе.

Способ 2. Типовая обработка «Универсальные подбор и обработка объектов» от 1С

Если на внедрении запрещено использовать стороннее программное обеспечение, на помощь приходит классический инструмент, поставляемый фирмой 1С на дисках и портале ИТС — внешняя обработка УниверсальныеПодборИОбработкаОбъектов.epf. Поскольку УПП 1.3 работает на обычных формах, данная обработка запускается в ней без каких-либо доработок.

Разберем по шагам порядок работы с этой обработкой:

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

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

Выясним, как реализовать непосредственное удаление программным путем, если вам необходимо встроить эту логику в собственную процедуру или обработку обновления данных. Для этого используется встроенный метод платформы Удалить(), вызываемый у объекта базы данных.

Посмотрим на пример удаления одного элемента справочника:


// Сначала получаем ссылку на объект (например, по коду или уникальному идентификатору)
СсылкаНаЭлемент = Справочники.Контрагенты.НайтиПоКоду("000000123");

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ДоговорыКонтрагентов.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |ГДЕ
    |	ДоговорыКонтрагентов.ПометкаУдаления = ИСТИНА";

Выборка = Запрос.Выполнить().Выбрать();

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

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

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

  1. Перейдите в режим 1С:Предприятие - Конфигуратор.
  2. Откройте меню Администрирование -> Тестирование и исправление....
  3. Установите флаг напротив проверки «Проверка ссылочной целостности информационной базы».
  4. В нижней части окна настроек выберите действия при наличии битых ссылок: «Создавать объекты» (для восстановления структуры метаданных) или «Очищать ссылки» (для удаления битых GUID из полей документов и регистров).
  5. Нажмите кнопку «Выполнить».

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

← На главную