Поиск и контроль пометок на удаление в базе 1С

· 8 мин

Содержание

Помеченный на удаление объект в 1С физически остаётся в базе — он лишь получает флаг ПометкаУдаления и отображается в списках с перечёркнутым значком. Чтобы собрать все такие объекты, есть четыре рабочих способа: отбор в списках, встроенная обработка Удаление помеченных объектов, запрос через консоль и журнал регистрации (кто и когда пометил).

Ниже — как достать помеченные объекты каждым способом, когда уместен прямой разбор через SQL, как сделать свой отчёт по всей базе одной обработкой и какой регламент не даёт базе зарастать «мусором».

Где база сама показывает помеченные объекты

Самый быстрый путь — встроенный механизм. Откройте Администрирование → Обслуживание → Удаление помеченных объектов. На первом шаге программа показывает полный список всех помеченных объектов по базе ещё до удаления: справочники, документы, их количество.

Это и есть готовый отчёт «что помечено прямо сейчас». Можно ничего не удалять: посмотрели состав — и закрыли.

В конкретном списке (например, в журнале документов или справочнике номенклатуры) помеченные строки видно по значку с красным крестиком. Чтобы оставить только их:

  • 📌 нажмите Еще → Настроить список над таблицей;
  • на закладке отбора добавьте условие по стандартному полю Пометка удаления со значением Да;
  • при желании добавьте колонку с этим же полем через настройку формы.

После этого список покажет только помеченные элементы. Отбор запоминается для текущего пользователя, так что для разовой проверки его потом лучше снять.

В списке работает и обычная сортировка: щёлкните по колонке со значком пометки — помеченные соберутся вверху или вниз.

Прямо в обработке Удаление помеченных объектов можно не только увидеть состав, но и выделить объект и запустить поиск ссылок на него — программа покажет, какие документы мешают удалению. Это удобнее, чем гонять поиск по каждому объекту отдельно.

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

Этот способ хорош для одного вида объектов. Когда нужно охватить всю базу разом — переходите к обработке Удаление помеченных объектов или к запросу.

Запрос помеченных объектов через консоль

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

Простейший запрос по одному справочнику:

ВЫБРАТЬ
    Ссылка КАК Объект,
    Наименование,
    Код
ИЗ
    Справочник.Номенклатура
ГДЕ
    ПометкаУдаления

Условие ГДЕ ПометкаУдаления уже возвращает только помеченные — писать = ИСТИНА не обязательно. Для документов — та же логика, плюс можно добавить дату и организацию:

ВЫБРАТЬ
    Ссылка КАК Документ,
    Дата,
    Организация
ИЗ
    Документ.РеализацияТоваровУслуг
ГДЕ
    ПометкаУдаления
    И Дата МЕЖДУ &Начало И &Конец
УПОРЯДОЧИТЬ ПО
    Дата УБЫВ

Параметры &Начало и &Конец задаются в консоли на отдельной закладке. Такой запрос удобно сохранить и переиспользовать — например, раз в квартал проверять, что помечают за период.

Консоль запросов только читает данные и ничего не меняет. Снять пометку или удалить объект через неё нельзя — для этого есть отдельные команды в самих списках.

Кто и когда поставил пометку: журнал регистрации

Если нужно понять не «что помечено», а «кто это сделал», поможет журнал регистрации: Администрирование → Журнал регистрации (в типовых конфигурациях на БП 3.0 — раздел Поддержка и обслуживание).

Установка пометки на удаление фиксируется как изменение данных объекта. Чтобы не тонуть в тысячах записей, настройте отбор:

  1. откройте Отбор (кнопка с воронкой или Еще → Установить отбор);
  2. задайте интервал дат, когда предположительно поставили пометку;
  3. ограничьте отбор нужным пользователем или конкретными метаданными (например, только документы реализации);
  4. примените и просматривайте записи об изменении — в данных операции видно, что объект получил пометку.

По найденной записи сразу видно автора, дату, время и рабочую станцию. Это главный инструмент разбора ситуации «кто-то массово пометил документы, а виноватых нет».

Журнал регистрации не хранит записи вечно: если его периодически чистят или урезают период хранения, старые пометки в нём не найдутся. Политику хранения журнала задаёт администратор.

Прямой разбор через SQL: когда это оправдано

В клиент-серверном варианте с СУБД (MS SQL, PostgreSQL) теоретически можно вытащить помеченные объекты напрямую из таблиц базы. Признак пометки хранится в служебном поле _Marked таблиц ссылочных объектов.

Но здесь важно понимать ограничения:

  • имена таблиц (_Reference123, _Document456) и полей 1С генерирует сама, они не документированы и меняются при реструктуризации базы;
  • сопоставить служебное имя таблицы с прикладным объектом помогает метод ПолучитьСтруктуруХраненияБазыДанных() в самой 1С;
  • фирма 1С не поддерживает прямой доступ к СУБД — любое обращение в поддержку по проблеме, где лазили в SQL, закроют.

Получить карту «прикладной объект → имя таблицы и поля в СУБД» можно изнутри 1С, не угадывая:

Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрокаТаблицы Из Структура Цикл
    Сообщить(СтрокаТаблицы.ИмяТаблицыХранения
        + " — " + СтрокаТаблицы.Метаданные);
КонецЦикла;

Второй параметр Истина возвращает реальные имена таблиц СУБД. По такой выгрузке DBA найдёт нужную таблицу и уже в ней фильтрует строки по полю _Marked = 0x01.

Чтение из SQL на горячую — ещё терпимо для разовой диагностики силами DBA. Любая запись в эти таблицы мимо платформы (снятие флага, удаление строк) почти гарантированно разрушит ссылочную целостность и повредит базу. Снимать пометку и удалять объекты нужно только средствами 1С.

Вывод простой: SQL-разбор оправдан лишь как крайняя мера для чтения в больших базах, где штатный запрос слишком долог. В 99% случаев хватает консоли запросов или обработки.

Один отчёт по всей базе: своя обработка

Чтобы не обходить виды объектов вручную, напишите внешнюю обработку , которая сама пройдёт по всем справочникам и документам и соберёт помеченное в одну таблицу. Ядро такого кода:

ТаблицаПомеченных = Новый ТаблицаЗначений;
ТаблицаПомеченных.Колонки.Добавить("Тип");
ТаблицаПомеченных.Колонки.Добавить("Объект");

Запрос = Новый Запрос;

Для Каждого ОписаниеСправочника Из Метаданные.Справочники Цикл
    Запрос.Текст =
        "ВЫБРАТЬ Ссылка КАК Объект
        |ИЗ Справочник." + ОписаниеСправочника.Имя + "
        |ГДЕ ПометкаУдаления";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Строка = ТаблицаПомеченных.Добавить();
        Строка.Тип = ОписаниеСправочника.Имя;
        Строка.Объект = Выборка.Объект;
    КонецЦикла;
КонецЦикла;

Такой же цикл добавьте по Метаданные.Документы — и в ТаблицаПомеченных окажутся все помеченные объекты базы с указанием типа. Дальше таблицу можно вывести в табличный документ, отправить на почту или сохранить в файл.

Обработку удобно повесить на регламентное задание — например, раз в неделю формировать список и слать ответственному. Тогда разросшаяся пометка не станет сюрпризом перед закрытием периода.

Пара практических деталей по такой обработке:

  • 📊 добавьте в таблицу колонку с датой или ответственным (реквизитом объекта) — проще отличить свежие пометки от старых;
  • 🔁 тяжёлый проход по всем метаданным большой базы делайте на сервере (в фоновом задании), а не в клиентском сеансе, иначе клиент будет долго «висеть»;
  • 🧩 если интересны не все виды объектов, ограничьте цикл конкретными справочниками и документами — выполнение ускорится в разы.

Если нужен не только состав, но и автор пометки, объедините этот проход с чтением журнала регистрации по найденным объектам — получите готовый реестр «объект → кто пометил → когда».

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

Отслеживание пометок без порядка в правах и регламенте — борьба со следствием. Два рычага держат ситуацию под контролем.

Права на пометку. Поставить пометку может любой пользователь с правом на изменение объекта. А вот физическое удаление помеченных — отдельное право, которое стоит оставить одному-двум ответственным. В типовых конфигурациях это настраивается через профили групп доступа: Администрирование → Настройки пользователей и прав.

Регулярная чистка. Запускайте Удаление помеченных объектов по графику — например, раз в месяц. Механизм сам проверяет ссылочную целостность: объект, на который ещё ссылаются другие документы, он не удалит, а покажет связи. Это защищает от «дырок» в учёте.

Безопасный порядок разовой чистки:

Чистка помеченных объектов без потерь
Выполнено: 0 / 5

В 1С 8.3 удаление помеченных объектов работает и в многопользовательском режиме — монопольный доступ не нужен. Но на время операции удаляемые объекты блокируются, поэтому тяжёлую чистку большой базы лучше запускать в период низкой нагрузки.

Перед массовым удалением всегда делайте резервную копию: механизм контролирует ссылки, но отменить уже выполненное удаление штатно нельзя — только восстановлением из копии.

Если объект упорно не удаляется, разберитесь с причиной по симптому:

Диагностика: выберите симптом

Частые вопросы

Чем пометка на удаление отличается от удаления?
Пометка — это только флаг, объект остаётся в базе и участвует в учёте, пока его не удалят физически. Удаление помеченных — отдельная операция с контролем ссылок.
Как снять пометку?
Той же командой, что и ставили: выделите объект и повторно выберите Пометить на удаление / Снять пометку. Флаг снимется, объект станет обычным.
Виден ли помеченный документ в отчётах и остатках?
Да. Пометка не отменяет проводки и движения. Если документ проведён, он влияет на остатки до тех пор, пока его не отменят и не удалят.
Почему помеченный объект не удаляется?
На него ссылаются другие объекты. Механизм удаления покажет эти ссылки — нужно сначала разобраться с ними, а уже потом удалять.
Нужен ли монопольный режим для удаления помеченных в 8.3?
Нет, в 8.3 удаление работает в многопользовательском режиме. Удаляемые объекты на время операции блокируются, поэтому её планируют на период низкой нагрузки.