Кто стёр документ из базы 1С: расследование по журналу, логам и бэкапу

· 9 мин

Содержание

Найти, кто удалил документ в 1С, проще всего через журнал регистрации. В БП 3.0, ЗУП 3.1 и УТ 11 он открывается так: Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по событию Данные. Удаление и по виду документа — в колонке «Пользователь» будет тот, кто удалил запись физически, а в колонке «Компьютер» — с какой машины это сделали.

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

Журнал регистрации: где искать удалённый документ

Как открыть журнал

ГдеПуть
БП 3.0, ЗУП 3.1, УТ 11, КА, ERPАдминистрирование → Обслуживание → Журнал регистрации
Любая конфигурация, режим 1С:ПредприятиеГлавное меню → Функции для технического специалиста → Стандартные → Журнал регистрации
КонфигураторАдминистрирование → Журнал регистрации

Пункт «Функции для технического специалиста» появляется после включения флажка с тем же названием в Главное меню → Сервис → Параметры. Для просмотра журнала нужны административные права.

Как настроить отбор

Журнал крупной базы за год — это миллионы строк. Без отбора нужную запись не найти. Откройте настройку отбора и заполните поля:

  1. Период — от даты, когда документ точно был на месте, до момента, когда его хватились.
  2. События — оставьте только Данные. Удаление. Для поиска пометки добавьте Данные. Изменение и Данные. Отмена проведения.
  3. Метаданные — выберите конкретный вид документа, например «Реализация (акты, накладные)» или «Поступление (акты, накладные)».
  4. Пользователи — не заполняйте, ведь именно пользователя мы и ищем.

После отбора список сократится до десятков строк. Дальше смотрите на колонку «Данные»: у удалённого документа там будет представление «Реализация товаров и услуг 00БП-000123 от …», а при открытии ссылки — <Объект не найден> и уникальный идентификатор.

Если номер документа известен, а строк всё равно много, отсортируйте список по колонке «Данные» и ищите номер глазами. Поиск по представлению быстрее, чем по ссылке на уже несуществующий объект.

Что значит каждая колонка

  • 👤 Пользователь — имя из списка пользователей информационной базы. Пусто или <Не указан> — в базу входили без пользователя, и узнать человека можно только по компьютеру.
  • 🖥️ Компьютер — сетевое имя машины, с которой был сеанс. Для терминального сервера здесь будет сам сервер.
  • 📦 Приложение — тонкий клиент, веб-клиент, COM-соединение, фоновое задание. Это ответ на вопрос «удалил человек или программа».
  • 🔢 Сеанс — номер сеанса. По нему можно отобрать все действия этого человека в тот день.

Человек или регламентное задание

Если в колонке «Приложение» стоит «Фоновое задание», документ удалил не пользователь. В типовых конфигурациях на БСП есть удаление помеченных объектов по расписанию. Оно стирает всё, что было помечено, без участия человека. Тогда настоящий «виновник» — тот, кто поставил пометку: ищите её событием Данные. Изменение раньше по времени.

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

Пример расследования

В понедельник бухгалтер не находит реализацию № 00БП-000412 от 14-го числа. В пятницу она была в списке.

  1. Ставим период с пятницы до понедельника, событие Данные. Удаление, метаданные — реализация.
  2. Находим одну строку: суббота, 03:00, пользователь пустой, приложение «Фоновое задание». Это регламентное удаление помеченных.
  3. Меняем событие на Данные. Изменение, период — та же пятница. Находим запись по этому документу в 17:42: пользователь «Иванова», компьютер BUH-04.
  4. Открываем все действия сеанса Ивановой за пятницу и видим, что она пометила на удаление сразу пять документов — видимо, промахнулась при групповом выделении.

Итог: удалило задание, а решение об удалении принял человек. Восстанавливать придётся все пять документов, а не один.

Почему записи об удалении нет: уровень логирования

Пустой результат при правильном отборе почти всегда означает одно из трёх:

  • ⚙️ журнал пишет только ошибки, а изменения данных не регистрирует;
  • 🗑️ старые записи удалены — в настройках можно сократить журнал до последних N дней или месяцев;
  • 📁 базу переносили на другой сервер без каталога журнала, и история осталась на старом месте.

Как включить запись удалений

Уровень логирования задают в Конфигураторе: Администрирование → Настройка журнала регистрации. Варианты:

УровеньВидно удаление документа?
Не регистрироватьНет
Регистрировать ошибкиНет
Регистрировать ошибки и предупрежденияНет
Регистрировать ошибки, предупреждения и информациюДа
Регистрировать все событияДа

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

Настройка работает только на будущее. Удаление, сделанное при уровне «ошибки», уже не восстановить ни из какого лога 1С.

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

Файлы журнала на сервере 1С и в файловой базе

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

Где лежит каталог 1Cv8Log

  • 📂 Файловая база — подкаталог 1Cv8Log в папке базы, рядом с 1Cv8.1CD.
  • 🗄️ Клиент-серверная база — <каталог кластера>\reg_1541\<GUID базы>\1Cv8Log. При стандартной установке службы каталог кластера находится в C:\Program Files\1cv8\srvinfo.

GUID базы на сервере узнают двумя способами. Первый — файл 1CV8Clst.lst в каталоге reg_1541: в нём перечислены базы кластера с именами и идентификаторами. Второй — утилита rac:

rac cluster list
rac infobase --cluster=<uuid кластера> summary list

Вторая команда выводит идентификатор и имя каждой базы кластера.

Формат файлов

С версии 8.3.5 по умолчанию используется формат журнала в одном файле .lgd. Это база SQLite. Старый формат — набор файлов .lgf и .lgp. В каком формате журнал вашей базы, видно по расширению файлов в каталоге.

Файл .lgd можно открыть любым просмотрщиком SQLite и выполнить запрос по датам. Работайте только с копией файла: открытие рабочего журнала сторонней программой может заблокировать запись событий.

Не удаляйте и не переименовывайте файлы в 1Cv8Log, пока база работает. Платформа ведёт запись постоянно, и испорченный файл журнала потеряет всю накопленную историю.

Технологический журнал: фиксируем удаление на уровне запросов

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

ТЖ настраивают файлом logcfg.xml в каталоге conf платформы на сервере 1С. Пример конфигурации, которая пишет только запросы с удалением из таблиц документов:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\techlog" history="168">
    <event>
      <eq property="name" value="DBMSSQL"/>
      <like property="Sql" value="%DELETE%_Document%"/>
    </event>
    <property name="all"/>
  </log>
</config>

Здесь history="168" — хранить 168 часов, то есть неделю. Для PostgreSQL вместо DBMSSQL используется событие DBPOSTGRS.

В каждой записи ТЖ есть свойство Usr с именем пользователя и Context — стек вызова, по которому видно, из какой формы или обработки шло удаление. Имя таблицы вида _Document123 переводят в имя документа через функцию ПолучитьСтруктуруХраненияБазыДанных().

ТЖ с широким фильтром быстро забивает диск и нагружает сервер. Держите фильтр узким, укажите отдельный диск и выключите сбор, когда виновника нашли. Новые настройки logcfg.xml сервер подхватывает без перезапуска службы, обрыва сеансов нет.

Следы удалённого документа в таблицах SQL

В клиент-серверной базе документ хранится в таблице СУБД _DocumentNNN. Здесь важно понимать разницу между двумя состояниями.

Помеченный документ физически на месте. У него в поле _Marked стоит 0x01. Найти все помеченные документы одного вида можно запросом в MS SQL:

SELECT _Number, _Date_Time, _Posted
FROM dbo._Document123
WHERE _Marked = 0x01
ORDER BY _Date_Time;

Номер 123 замените на номер таблицы нужного документа из структуры хранения. В обычной работе то же самое проще сделать отбором «Пометка удаления» в списке документов.

Физически удалённый документ из таблицы исчез. Имени пользователя в таблицах 1С нет и никогда не было — платформа его туда не пишет. Остаются только средства самой СУБД:

  • 🔍 аудит MS SQL Server, если его настроили заранее на операции DELETE;
  • 📜 журнал транзакций при модели восстановления FULL — по нему администратор СУБД определяет время удаления и восстанавливает базу на момент перед ним;
  • 💾 резервные копии — сравнение двух бэкапов показывает, между какими датами документ пропал.

Все эти действия выполняет администратор СУБД. Вносить изменения в таблицы 1С напрямую нельзя: это ломает целостность и нарушает лицензионное соглашение.

Как вернуть удалённый документ

Способ зависит от того, что именно произошло.

Что случилось с документом?

Почему важен перенос с тем же идентификатором

После физического удаления в документах, которые ссылались на удалённый (оплаты, счета-фактуры, корректировки), в поле основания появляется <Объект не найден>. Если ввести документ заново, у него будет новый идентификатор, и все эти ссылки придётся перебивать руками.

Перенос через XML-выгрузку из резервной копии сохраняет внутренний идентификатор. Битые ссылки восстанавливаются сами, а документ остаётся только перепровести.

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

После восстановления

  1. Проведите документ и проверьте движения по регистрам.
  2. Если период закрыт, восстановление попадёт в закрытый месяц: понадобится снять дату запрета изменений и повторить закрытие.
  3. Пересформируйте отчёты, на которые влиял документ: оборотно-сальдовую ведомость, акт сверки, книги покупок или продаж.

Как не допустить повторения

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

Защита от потери документов
Выполнено: 0 / 6

Отдельно о двух пунктах.

История изменений. В типовых конфигурациях на БСП её включают в Администрирование → Общие настройки. Программа хранит версии объектов с указанием автора. После удаления карточка документа недоступна, но по истории видно, кто и когда менял его последним.

Права. Интерактивное удаление (кнопка, стирающая объект сразу без пометки) в типовых профилях обычным пользователям не выдаётся. Если в вашей базе документы исчезают «мимо пометки», проверьте доработанные роли: кто-то мог получить лишнее право.

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

Видно ли в журнале, какие реквизиты были у удалённого документа?
Нет. Журнал хранит представление документа (вид, номер, дата) и ссылку, но не суммы и не табличные части. Содержимое восстанавливают из резервной копии или истории изменений.
Пользователь в журнале — «Администратор», а работали под ним пятеро. Как найти конкретного?
Отберите записи по номеру сеанса и смотрите колонку «Компьютер». Если все работают через один терминальный сервер, связать сеанс с человеком помогут журналы входа Windows на этом сервере.
Сколько хранится журнал регистрации?
Столько, сколько задано в настройках. По умолчанию журнал не обрезается и растёт, пока его не сократят вручную или по расписанию.
Можно ли узнать, кто удалил документ, в базе без пользователей?
Только по колонке «Компьютер» и времени события. Имени человека платформа в таком случае не знает.
Регистрируется ли удаление, сделанное обработкой или внешней программой?
Да, если запись идёт через объектную модель 1С. В колонке «Приложение» будет фоновое задание или COM-соединение, а пользователь — тот, от чьего имени работала обработка.