Кто, когда и что удалил в базе 1С: расследование по журналу, ссылкам и резервным копиям
Содержание
Удалённый объект в 1С ищут в журнале регистрации: Администрирование → Обслуживание → Журнал регистрации, отбор по событию «Данные. Удаление» и периоду. Журнал покажет пользователя, время и представление объекта на момент удаления. Сам объект вернуть можно только из резервной копии, а если он лишь помечен на удаление — снять пометку в списке.
Чаще всего вопрос звучит так: в документах вместо контрагента появилось <Объект не найден> (45:b1c2...), а в справочнике элемента нет. Порядок работы всегда один: выяснить, что пропало и когда, найти все хвосты объекта в базе и только потом восстанавливать.
С чего начать: помечен объект или удалён физически
В 1С 8.3 есть два разных состояния, и от них зависит весь дальнейший путь.
- 🟡 Помечен на удаление. Объект в базе, просто перечёркнут значком в списке. Ссылки на него живы. Достаточно выделить его и снять пометку (клавиша
Delв списке переключает пометку туда и обратно). - 🔴 Удалён физически. Записи в таблице нет. Это делает обработка «Удаление помеченных объектов» или прямое удаление (
Shift+Del), если у пользователя есть право «Интерактивное удаление». В документах и регистрах на этом месте остаётся битая ссылка.
Чтобы быстро проверить первое состояние, откройте Администрирование → Обслуживание → Удаление помеченных объектов в 1С:Бухгалтерии 3.0 (в ЗУП 3.1 и УТ 11 обработка находится в том же разделе «Администрирование»). Обработка выводит список всех помеченных объектов. Если ваш элемент там — ничего не потеряно, удалять его не нужно.
Если обработку не найти в меню, откройте её через Главное меню → Все функции → Стандартные → Удаление помеченных объектов. Пункт «Все функции» включается в Главное меню → Сервис → Параметры флажком «Отображать команду “Все функции”».
Если объекта нет ни в списке, ни среди помеченных — он удалён. Дальше нужны три ответа: кто удалил, когда, и где на него остались ссылки.
Журнал регистрации: кто и когда удалил объект
Журнал регистрации платформа ведёт сама, отдельно от данных. Удалённый элемент из таблицы исчез, а запись о его удалении осталась.
Как настроить отбор
- Откройте
Администрирование → Обслуживание → Журнал регистрации. - Нажмите
Установить отбор(или кнопку отбора над списком). - Укажите период: от последнего дня, когда объект точно был, до момента обнаружения пропажи.
- В поле «События» оставьте «Данные. Удаление». Если интересует ещё и пометка, добавьте «Данные. Изменение» — установка пометки фиксируется как изменение объекта.
- В поле «Метаданные» выберите нужный справочник или вид документа, чтобы не тонуть в лишних строках.
- Примените отбор.
В строке события смотрите колонки «Пользователь», «Компьютер», «Дата» и «Представление данных». Последняя колонка — главная находка: там сохранено имя объекта на момент удаления, например «ООО Ромашка» или «Реализация товаров 00БП-000123 от 12.03».
Что делать, если записей нет
- ⚙️ Проверьте уровень журнала в Конфигураторе:
Администрирование → Настройка журнала регистрации. При уровне «Не регистрировать» или «Регистрировать ошибки» удаления не записываются. - 📅 Проверьте настройку сокращения журнала. Если старые записи регулярно удаляются, нужный период мог уже исчезнуть.
- 🖥 Убедитесь, что смотрите журнал той базы. В клиент-серверном варианте журнал лежит на сервере, в каталоге
srvinfo\reg_1541\<GUID базы>\1Cv8Log, в файловом — в папке1Cv8Logвнутри каталога базы.
Каталог 1Cv8Log есть и в резервных копиях сервера, если их делали файловым копированием. Старый журнал можно подложить в копию базы и посмотреть там события, которые уже вырезаны из рабочего журнала.
Не удаляйте и не переименовывайте 1Cv8Log на работающей базе — платформа держит файлы журнала открытыми, а для расследования они нужны целиком.
Выгрузка журнала и битых ссылок в MXL: ищем «мёртвые души»
«Мёртвые души» — это записи, которые ссылаются на уже несуществующий объект. В формах их видно как <Объект не найден> с кодом таблицы и GUID в скобках. Найти их по всей базе вручную нельзя, поэтому данные выгружают в табличный документ и анализируют там.
Выгрузка журнала регистрации
Когда событий много, удобнее работать не в форме журнала, а в таблице:
- Установите отбор, как описано выше.
- В форме журнала нажмите
Ещё → Вывести список, отметьте нужные колонки. - Сохраните полученный табличный документ кнопкой сохранения в формате
.mxlили.xlsx.
Дальше в Excel или в самой 1С легко отсортировать удаления по пользователю и найти пачку: например, 40 удалений за 3 минуты обычно означают запуск «Удаления помеченных», а не ручную работу.
Поиск битых ссылок отчётом-запросом
Битые ссылки находит запрос с левым соединением. Пример для реквизита «Контрагент» в документе реализации 1С:Бухгалтерии 3.0 (запускают в консоли запросов или в обработке на копии базы):
ВЫБРАТЬ
Док.Ссылка КАК Документ,
Док.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Спр
ПО Док.Контрагент = Спр.Ссылка
ГДЕ
Спр.Ссылка ЕСТЬ NULL
И Док.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
Результат выводят в табличный документ и сохраняют в MXL. Список документов с битыми ссылками — это и есть перечень мест, которые нужно будет починить после восстановления объекта.
Запрос рассчитан на реквизит одного типа. Для реквизитов составного типа нужен отбор по типу значения (ТИПЗНАЧЕНИЯ(Док.Реквизит) = ТИП(Справочник.Контрагенты)), иначе в результат попадут ссылки на другие справочники.
Проверка ссылочной целостности в Конфигураторе
Штатный способ увидеть битые ссылки по всей базе — Конфигуратор → Администрирование → Тестирование и исправление. Флажок «Проверка ссылочной целостности информационной базы» и режим «Только проверка» выведут в окно сообщений все ссылки на несуществующие объекты.
Сначала запускайте только проверку, без исправления. Режимы «Очищать ссылки» и «Создавать объекты» меняют данные:
| Режим при битых ссылках | Что произойдёт | Когда уместно |
|---|---|---|
| Не изменять | Только сообщение в окне | Всегда начинайте с него |
| Создавать объекты | Появится пустой элемент-заглушка с прежним GUID | Если потом заполните его вручную |
| Очищать ссылки | Реквизит станет пустым | Если объект не нужен и ссылки не важны |
Тестирование с исправлением требует монопольного доступа: всех пользователей нужно вывести из базы, их сеансы будут завершены. Делайте это вне рабочего времени и после свежей выгрузки .dt.
Удалённые объекты метаданных: сравнение конфигураций
Иногда пропадает не элемент справочника, а реквизит, табличная часть или целый отчёт в конфигурации. Журнал регистрации такие изменения показывает как событие обновления конфигурации, но не говорит, что именно убрали.
Найти удалённые объекты метаданных помогает сравнение:
- Возьмите конфигурацию из резервной копии: файл
.cfили выгрузку.dt, развёрнутую в отдельную базу (оттуда сохраните.cfчерезКонфигурация → Сохранить конфигурацию в файл). - В рабочей базе откройте Конфигуратор:
Конфигурация → Сравнить конфигурации. - Выберите для сравнения «Конфигурация базы данных» и «Конфигурация из файла», укажите старый
.cf. - Включите режим «Показывать только отличия».
Объекты, которые есть только в старой конфигурации, и есть удалённые. Если вы используете хранилище конфигурации, проще открыть историю хранилища: там видно, кто и в какой версии убрал объект, с комментарием.
Данные удалённого реквизита при обновлении структуры базы стираются. Вернуть объект в конфигурацию можно, но значения в нём будут пустыми — сами данные доступны только в копии базы, сделанной до обновления.
Если объект убрала доработка через расширение, проверьте Конфигурация → Расширения конфигурации: отключённое или удалённое расширение тоже «прячет» реквизиты и команды.
SQL-запрос к базе для глубокого анализа
В клиент-серверном варианте на MS SQL Server или PostgreSQL данные лежат в таблицах с техническими именами: _Reference45, _Document123, поля _Fld1234RRef. Прямой SQL нужен, когда нужно быстро проверить миллионы строк или понять, что база удалила на уровне СУБД.
Как узнать имена таблиц
Соответствие объектов метаданных и таблиц выдаёт функция ПолучитьСтруктуруХраненияБазыДанных(). Её вызывают из обработки или консоли кода с правами администратора, результат — таблица значений с колонками «Метаданные», «ИмяТаблицыХранения» и вложенной таблицей полей.
Пример: битые ссылки на уровне SQL
-- MS SQL Server, только чтение, на копии базы
SELECT d._IDRRef AS doc_ref,
d._Fld1234RRef AS broken_ref
FROM _Document123 AS d
LEFT JOIN _Reference45 AS r
ON r._IDRRef = d._Fld1234RRef
WHERE r._IDRRef IS NULL
AND d._Fld1234RRef <> 0x00000000000000000000000000000000;
Имена таблиц и полей подставьте из структуры хранения своей базы. Поле _Marked в таблицах справочников и документов показывает пометку на удаление: 0x01 — помечен.
Только SELECT, только на копии. Изменение данных напрямую в СУБД обходит механизмы 1С: не пересчитываются итоги регистров, не срабатывают проверки, не записываются версии. Последствия всплывут позже и в неожиданном месте.
Если СУБД вела журнал транзакций
На MS SQL Server с моделью восстановления Full можно развернуть базу на момент за минуту до удаления: полная копия плюс цепочка резервных копий журнала транзакций, команда RESTORE LOG ... WITH STOPAT. В PostgreSQL то же даёт архивирование WAL, если его включили заранее. Восстанавливают всегда в новую базу на СУБД, а не поверх рабочей.
Восстановление из резервной копии через тестовую базу
Найти объект — полдела. Вернуть его без потери работы, сделанной после удаления, можно только через отдельную базу.
Порядок действий
- Создайте новую пустую информационную базу (в кластере или в отдельном каталоге для файловой).
- Откройте её в Конфигураторе:
Администрирование → Загрузить информационную базу, выберите.dtиз копии, сделанной до удаления. - Найдите в тестовой базе нужный объект и проверьте, что он полный: реквизиты, табличные части, присоединённые файлы.
- Выгрузите объект универсальной обработкой «Выгрузка и загрузка данных XML» (берётся с диска ИТС, есть версии для 8.3). Отметьте только нужный объект, флажок выгрузки ссылок на другие объекты — по ситуации.
- Сделайте выгрузку
.dtрабочей базы. - Загрузите XML в рабочую базу той же обработкой.
Обработка сохраняет исходный GUID объекта. Поэтому после загрузки битые ссылки <Объект не найден> сами превращаются в нормальные: документы снова видят контрагента.
Никогда не загружайте .dt в рабочую базу, чтобы «достать один элемент». Загрузка полностью заменяет базу, и всё, что внесли после копии, пропадёт.
Если удалили документ с движениями, после загрузки проведите его заново. Так восстановятся записи в регистрах и проводки, если обработка выгружала только сам документ.
Обработки, которые ускоряют поиск
Встроенных средств обычно хватает, но некоторые операции удобнее автоматизировать.
- 🔍 «Поиск ссылок на объекты» —
Все функции → Стандартные. Показывает, где используется выбранный объект. Помогает до удаления: если ссылок много, объект лучше не трогать. - 🗑 «Удаление помеченных объектов» в БП 3.0, ЗУП 3.1 и УТ 11 перед удалением сама проверяет ссылки и не удаляет объекты, на которые кто-то ссылается. Удаления «вслепую» случаются, когда пользователь работает прямым удалением через
Shift+Del. - 🧾 Внешняя обработка поиска битых ссылок. Пишется на основе запроса выше: цикл по метаданным справочников и документов, для каждого реквизита ссылочного типа — левое соединение с таблицей объекта. Результат выводится в табличный документ.
- 📚 Анализ журнала регистрации внешними инструментами. Файлы
1Cv8.lgdформата SQLite открываются любым просмотрщиком SQLite, если нужно выбрать события по сложному условию.
Обработки сторонних авторов запускайте только на копии базы. Внешний код получает права пользователя, под которым запущен, а у администратора они полные.