Кто стёр документ из базы 1С: расследование по журналу, логам и бэкапу
Содержание
Найти, кто удалил документ в 1С, проще всего через журнал регистрации. В БП 3.0, ЗУП 3.1 и УТ 11 он открывается так: Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по событию Данные. Удаление и по виду документа — в колонке «Пользователь» будет тот, кто удалил запись физически, а в колонке «Компьютер» — с какой машины это сделали.
Если документ не удалён, а только помечен на удаление, ищите событие Данные. Изменение по этому документу. Пометку и окончательное удаление часто делают разные люди: бухгалтер ставит пометку, а администратор потом запускает удаление помеченных. Поэтому в расследовании проверяют обе записи. Порядок действий одинаков для всех типовых конфигураций на платформе 8.3, различается только путь к журналу.
Журнал регистрации: где искать удалённый документ
Как открыть журнал
| Где | Путь |
|---|---|
| БП 3.0, ЗУП 3.1, УТ 11, КА, ERP | Администрирование → Обслуживание → Журнал регистрации |
| Любая конфигурация, режим 1С:Предприятие | Главное меню → Функции для технического специалиста → Стандартные → Журнал регистрации |
| Конфигуратор | Администрирование → Журнал регистрации |
Пункт «Функции для технического специалиста» появляется после включения флажка с тем же названием в Главное меню → Сервис → Параметры. Для просмотра журнала нужны административные права.
Как настроить отбор
Журнал крупной базы за год — это миллионы строк. Без отбора нужную запись не найти. Откройте настройку отбора и заполните поля:
- Период — от даты, когда документ точно был на месте, до момента, когда его хватились.
- События — оставьте только
Данные. Удаление. Для поиска пометки добавьтеДанные. ИзменениеиДанные. Отмена проведения. - Метаданные — выберите конкретный вид документа, например «Реализация (акты, накладные)» или «Поступление (акты, накладные)».
- Пользователи — не заполняйте, ведь именно пользователя мы и ищем.
После отбора список сократится до десятков строк. Дальше смотрите на колонку «Данные»: у удалённого документа там будет представление «Реализация товаров и услуг 00БП-000123 от …», а при открытии ссылки — <Объект не найден> и уникальный идентификатор.
Если номер документа известен, а строк всё равно много, отсортируйте список по колонке «Данные» и ищите номер глазами. Поиск по представлению быстрее, чем по ссылке на уже несуществующий объект.
Что значит каждая колонка
- 👤 Пользователь — имя из списка пользователей информационной базы. Пусто или
<Не указан>— в базу входили без пользователя, и узнать человека можно только по компьютеру. - 🖥️ Компьютер — сетевое имя машины, с которой был сеанс. Для терминального сервера здесь будет сам сервер.
- 📦 Приложение — тонкий клиент, веб-клиент, COM-соединение, фоновое задание. Это ответ на вопрос «удалил человек или программа».
- 🔢 Сеанс — номер сеанса. По нему можно отобрать все действия этого человека в тот день.
Человек или регламентное задание
Если в колонке «Приложение» стоит «Фоновое задание», документ удалил не пользователь. В типовых конфигурациях на БСП есть удаление помеченных объектов по расписанию. Оно стирает всё, что было помечено, без участия человека. Тогда настоящий «виновник» — тот, кто поставил пометку: ищите её событием Данные. Изменение раньше по времени.
То же с обменами. Документ, удалённый в другом узле распределённой базы или в связанной программе, приходит при синхронизации и удаляется от имени служебного пользователя обмена. Такая запись означает, что искать надо в журнале второй базы.
Пример расследования
В понедельник бухгалтер не находит реализацию № 00БП-000412 от 14-го числа. В пятницу она была в списке.
- Ставим период с пятницы до понедельника, событие
Данные. Удаление, метаданные — реализация. - Находим одну строку: суббота, 03:00, пользователь пустой, приложение «Фоновое задание». Это регламентное удаление помеченных.
- Меняем событие на
Данные. Изменение, период — та же пятница. Находим запись по этому документу в 17:42: пользователь «Иванова», компьютер BUH-04. - Открываем все действия сеанса Ивановой за пятницу и видим, что она пометила на удаление сразу пять документов — видимо, промахнулась при групповом выделении.
Итог: удалило задание, а решение об удалении принял человек. Восстанавливать придётся все пять документов, а не один.
Почему записи об удалении нет: уровень логирования
Пустой результат при правильном отборе почти всегда означает одно из трёх:
- ⚙️ журнал пишет только ошибки, а изменения данных не регистрирует;
- 🗑️ старые записи удалены — в настройках можно сократить журнал до последних 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-выгрузку из резервной копии сохраняет внутренний идентификатор. Битые ссылки восстанавливаются сами, а документ остаётся только перепровести.
Загружайте в рабочую базу один нужный документ, а не весь период. Повторная загрузка уже существующих документов перезапишет изменения, сделанные после бэкапа. Перед загрузкой сделайте копию рабочей базы.
После восстановления
- Проведите документ и проверьте движения по регистрам.
- Если период закрыт, восстановление попадёт в закрытый месяц: понадобится снять дату запрета изменений и повторить закрытие.
- Пересформируйте отчёты, на которые влиял документ: оборотно-сальдовую ведомость, акт сверки, книги покупок или продаж.
Как не допустить повторения
Расследование занимает время, поэтому лучше настроить базу так, чтобы ответ был под рукой за минуту.
Отдельно о двух пунктах.
История изменений. В типовых конфигурациях на БСП её включают в Администрирование → Общие настройки. Программа хранит версии объектов с указанием автора. После удаления карточка документа недоступна, но по истории видно, кто и когда менял его последним.
Права. Интерактивное удаление (кнопка, стирающая объект сразу без пометки) в типовых профилях обычным пользователям не выдаётся. Если в вашей базе документы исчезают «мимо пометки», проверьте доработанные роли: кто-то мог получить лишнее право.