В процессе администрирования и сопровождения крупных информационных баз на платформе «1С:Предприятие 8», особенно таких сложных и связанных, как «Управление производственным предприятием» (УПП) редакции 1.3, специалисты часто сталкиваются с необходимостью быстрого удаления данных. Стандартный механизм платформы предполагает двухэтапный процесс: сначала объекты помечаются на удаление, а затем запускается регламентная процедура контроля ссылочной целостности, которая может выполняться часами или требовать монопольного режима.
В этой статье мы подробно разберем, как обойти эти ограничения и безопасно выполнить непосредственное (прямое) удаление объектов из базы данных 1С:УПП 1.3 с помощью специализированных обработок и программных методов.
Прежде чем перейти к инструментам, проанализируем, почему непосредственное удаление называют «операцией на открытом сердце» для базы данных. Конфигурация УПП 1.3 обладает колоссальной связанностью метаданных. Прямое стирание записей без проверки ссылок гарантированно приводит к следующим последствиям:
<Объект не найден...> с уникальным идентификатором (GUID).РасчетСебестоимостиВыпуска будет выдавать неустранимые ошибки).Рекомендация: всегда делайте резервную копию базы данных (резервный архив SQL или файловый 1CD) перед выполнением любых операций непосредственного удаления!
Одним из наиболее мощных и популярных профессиональных наборов для обычного приложения является портативный комплект «Инструменты разработчика» (ИР) от TormozIT. Для непосредственного удаления метаданных в нем предусмотрено несколько специализированных механизмов:
Рассмотрим подробнее три основных сценария работы с ИР:
Если на внедрении запрещено использовать стороннее программное обеспечение, на помощь приходит классический инструмент, поставляемый фирмой 1С на дисках и портале ИТС — внешняя обработка УниверсальныеПодборИОбработкаОбъектов.epf. Поскольку УПП 1.3 работает на обычных формах, данная обработка запускается в ней без каких-либо доработок.
Разберем по шагам порядок работы с этой обработкой:
Справочники.Номенклатура или Документы.РеализацияТоваровУслуг).Выясним, как реализовать непосредственное удаление программным путем, если вам необходимо встроить эту логику в собственную процедуру или обработку обновления данных. Для этого используется встроенный метод платформы Удалить(), вызываемый у объекта базы данных.
Посмотрим на пример удаления одного элемента справочника:
// Сначала получаем ссылку на объект (например, по коду или уникальному идентификатору)
СсылкаНаЭлемент = Справочники.Контрагенты.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
Попытка
// Получаем объект из ссылки для возможности модификации и удаления
ОбъектДляУдаления = СсылкаНаЭлемент.ПолучитьОбъект();
// Выполняем непосредственное удаление из базы данных без проверок ссылок
ОбъектДляУдаления.Удалить();
Сообщить("Элемент успешно удален непосредственно из СУБД.");
Исключение
// Обрабатываем возможные блокировки или отсутствие прав доступа
Сообщить("Не удалось выполнить удаление: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если стоит задача выполнить пакетную очистку, обязательно используйте транзакции для ускорения работы с СУБД и предотвращения частичного удаления данных при возникновении непредвиденных ошибок. Проанализируем пример группового программного удаления:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.ПометкаУдаления = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
НачатьТранзакцию();
Попытка
Пока Выборка.Следующий() Цикл
ОбъектУдаления = Выборка.Ссылка.ПолучитьОбъект();
Если ОбъектУдаления <> Неопределено Тогда
// Удаляем объект напрямую
ОбъектУдаления.Удалить();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Сообщить("Пакетное непосредственное удаление успешно завершено.");
Исключение
ОтменитьТранзакцию();
Сообщить("Произошла критическая ошибка, транзакция отменена: " + ОписаниеОшибки());
КонецПопытки;
Если вы всё же воспользовались методами непосредственного удаления, настоятельно рекомендуется запустить процедуру поиска и устранения битых ссылок. Для этого выполните следующие действия:
Использование правильных инструментов разработчика и соблюдение мер предосторожности позволит вам эффективно администрировать базу 1С:УПП 1.3, избегая деградации производительности СУБД и сохраняя логическую целостность всей системы.