Поиск и контроль пометок на удаление в базе 1С
Содержание
Помеченный на удаление объект в 1С физически остаётся в базе — он лишь получает флаг ПометкаУдаления и отображается в списках с перечёркнутым значком. Чтобы собрать все такие объекты, есть четыре рабочих способа: отбор в списках, встроенная обработка Удаление помеченных объектов, запрос через консоль и журнал регистрации (кто и когда пометил).
Ниже — как достать помеченные объекты каждым способом, когда уместен прямой разбор через SQL, как сделать свой отчёт по всей базе одной обработкой и какой регламент не даёт базе зарастать «мусором».
Где база сама показывает помеченные объекты
Самый быстрый путь — встроенный механизм. Откройте Администрирование → Обслуживание → Удаление помеченных объектов. На первом шаге программа показывает полный список всех помеченных объектов по базе ещё до удаления: справочники, документы, их количество.
Это и есть готовый отчёт «что помечено прямо сейчас». Можно ничего не удалять: посмотрели состав — и закрыли.
В конкретном списке (например, в журнале документов или справочнике номенклатуры) помеченные строки видно по значку с красным крестиком. Чтобы оставить только их:
- 📌 нажмите
Еще → Настроить списокнад таблицей; - на закладке отбора добавьте условие по стандартному полю
Пометка удалениясо значениемДа; - при желании добавьте колонку с этим же полем через настройку формы.
После этого список покажет только помеченные элементы. Отбор запоминается для текущего пользователя, так что для разовой проверки его потом лучше снять.
В списке работает и обычная сортировка: щёлкните по колонке со значком пометки — помеченные соберутся вверху или вниз.
Прямо в обработке Удаление помеченных объектов можно не только увидеть состав, но и выделить объект и запустить поиск ссылок на него — программа покажет, какие документы мешают удалению. Это удобнее, чем гонять поиск по каждому объекту отдельно.
Учтите одно ограничение: предопределённые элементы справочников (те, что заведены в конфигурации, — типовые группы, служебные значения) пометить на удаление нельзя. В списке у них нет флага пометки, и в выборку помеченных они не попадают — это нормально.
Этот способ хорош для одного вида объектов. Когда нужно охватить всю базу разом — переходите к обработке Удаление помеченных объектов или к запросу.
Запрос помеченных объектов через консоль
Когда помеченные нужно выгрузить в таблицу, отфильтровать по дате или реквизитам — используйте консоль запросов (внешняя обработка с диска ИТС или из поставки конфигурации). Пометка хранится в стандартном поле ПометкаУдаления у любого ссылочного объекта.
Простейший запрос по одному справочнику:
ВЫБРАТЬ
Ссылка КАК Объект,
Наименование,
Код
ИЗ
Справочник.Номенклатура
ГДЕ
ПометкаУдаления
Условие ГДЕ ПометкаУдаления уже возвращает только помеченные — писать = ИСТИНА не обязательно. Для документов — та же логика, плюс можно добавить дату и организацию:
ВЫБРАТЬ
Ссылка КАК Документ,
Дата,
Организация
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
ПометкаУдаления
И Дата МЕЖДУ &Начало И &Конец
УПОРЯДОЧИТЬ ПО
Дата УБЫВ
Параметры &Начало и &Конец задаются в консоли на отдельной закладке. Такой запрос удобно сохранить и переиспользовать — например, раз в квартал проверять, что помечают за период.
Консоль запросов только читает данные и ничего не меняет. Снять пометку или удалить объект через неё нельзя — для этого есть отдельные команды в самих списках.
Кто и когда поставил пометку: журнал регистрации
Если нужно понять не «что помечено», а «кто это сделал», поможет журнал регистрации: Администрирование → Журнал регистрации (в типовых конфигурациях на БП 3.0 — раздел Поддержка и обслуживание).
Установка пометки на удаление фиксируется как изменение данных объекта. Чтобы не тонуть в тысячах записей, настройте отбор:
- откройте
Отбор(кнопка с воронкой илиЕще → Установить отбор); - задайте интервал дат, когда предположительно поставили пометку;
- ограничьте отбор нужным пользователем или конкретными метаданными (например, только документы реализации);
- примените и просматривайте записи об изменении — в данных операции видно, что объект получил пометку.
По найденной записи сразу видно автора, дату, время и рабочую станцию. Это главный инструмент разбора ситуации «кто-то массово пометил документы, а виноватых нет».
Журнал регистрации не хранит записи вечно: если его периодически чистят или урезают период хранения, старые пометки в нём не найдутся. Политику хранения журнала задаёт администратор.
Прямой разбор через SQL: когда это оправдано
В клиент-серверном варианте с СУБД (MS SQL, PostgreSQL) теоретически можно вытащить помеченные объекты напрямую из таблиц базы. Признак пометки хранится в служебном поле _Marked таблиц ссылочных объектов.
Но здесь важно понимать ограничения:
- имена таблиц (
_Reference123,_Document456) и полей 1С генерирует сама, они не документированы и меняются при реструктуризации базы; - сопоставить служебное имя таблицы с прикладным объектом помогает метод
ПолучитьСтруктуруХраненияБазыДанных()в самой 1С; - фирма 1С не поддерживает прямой доступ к СУБД — любое обращение в поддержку по проблеме, где лазили в SQL, закроют.
Получить карту «прикладной объект → имя таблицы и поля в СУБД» можно изнутри 1С, не угадывая:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрокаТаблицы Из Структура Цикл
Сообщить(СтрокаТаблицы.ИмяТаблицыХранения
+ " — " + СтрокаТаблицы.Метаданные);
КонецЦикла;
Второй параметр Истина возвращает реальные имена таблиц СУБД. По такой выгрузке DBA найдёт нужную таблицу и уже в ней фильтрует строки по полю _Marked = 0x01.
Чтение из SQL на горячую — ещё терпимо для разовой диагностики силами DBA. Любая запись в эти таблицы мимо платформы (снятие флага, удаление строк) почти гарантированно разрушит ссылочную целостность и повредит базу. Снимать пометку и удалять объекты нужно только средствами 1С.
Вывод простой: SQL-разбор оправдан лишь как крайняя мера для чтения в больших базах, где штатный запрос слишком долог. В 99% случаев хватает консоли запросов или обработки.
Один отчёт по всей базе: своя обработка
Чтобы не обходить виды объектов вручную, напишите внешнюю обработку , которая сама пройдёт по всем справочникам и документам и соберёт помеченное в одну таблицу. Ядро такого кода:
ТаблицаПомеченных = Новый ТаблицаЗначений;
ТаблицаПомеченных.Колонки.Добавить("Тип");
ТаблицаПомеченных.Колонки.Добавить("Объект");
Запрос = Новый Запрос;
Для Каждого ОписаниеСправочника Из Метаданные.Справочники Цикл
Запрос.Текст =
"ВЫБРАТЬ Ссылка КАК Объект
|ИЗ Справочник." + ОписаниеСправочника.Имя + "
|ГДЕ ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строка = ТаблицаПомеченных.Добавить();
Строка.Тип = ОписаниеСправочника.Имя;
Строка.Объект = Выборка.Объект;
КонецЦикла;
КонецЦикла;
Такой же цикл добавьте по Метаданные.Документы — и в ТаблицаПомеченных окажутся все помеченные объекты базы с указанием типа. Дальше таблицу можно вывести в табличный документ, отправить на почту или сохранить в файл.
Обработку удобно повесить на регламентное задание — например, раз в неделю формировать список и слать ответственному. Тогда разросшаяся пометка не станет сюрпризом перед закрытием периода.
Пара практических деталей по такой обработке:
- 📊 добавьте в таблицу колонку с датой или ответственным (реквизитом объекта) — проще отличить свежие пометки от старых;
- 🔁 тяжёлый проход по всем метаданным большой базы делайте на сервере (в фоновом задании), а не в клиентском сеансе, иначе клиент будет долго «висеть»;
- 🧩 если интересны не все виды объектов, ограничьте цикл конкретными справочниками и документами — выполнение ускорится в разы.
Если нужен не только состав, но и автор пометки, объедините этот проход с чтением журнала регистрации по найденным объектам — получите готовый реестр «объект → кто пометил → когда».
Регламент и права: чтобы база не зарастала
Отслеживание пометок без порядка в правах и регламенте — борьба со следствием. Два рычага держат ситуацию под контролем.
Права на пометку. Поставить пометку может любой пользователь с правом на изменение объекта. А вот физическое удаление помеченных — отдельное право, которое стоит оставить одному-двум ответственным. В типовых конфигурациях это настраивается через профили групп доступа: Администрирование → Настройки пользователей и прав.
Регулярная чистка. Запускайте Удаление помеченных объектов по графику — например, раз в месяц. Механизм сам проверяет ссылочную целостность: объект, на который ещё ссылаются другие документы, он не удалит, а покажет связи. Это защищает от «дырок» в учёте.
Безопасный порядок разовой чистки:
В 1С 8.3 удаление помеченных объектов работает и в многопользовательском режиме — монопольный доступ не нужен. Но на время операции удаляемые объекты блокируются, поэтому тяжёлую чистку большой базы лучше запускать в период низкой нагрузки.
Перед массовым удалением всегда делайте резервную копию: механизм контролирует ссылки, но отменить уже выполненное удаление штатно нельзя — только восстановлением из копии.
Если объект упорно не удаляется, разберитесь с причиной по симптому:
Частые вопросы
Чем пометка на удаление отличается от удаления?
Как снять пометку?
Пометить на удаление / Снять пометку. Флаг снимется, объект станет обычным.