Кто, когда и что поменял: где 1С держит следы правок

· 10 мин

Содержание

История изменений в 1С 8.3 хранится в двух разных местах. Журнал регистрации (кто и когда менял объект) лежит вне базы данных — в папке 1Cv8Log: у файловой базы она внутри каталога базы, у серверной — в каталоге кластера srvinfo\reg_1541\<GUID базы>\1Cv8Log. Версии самих объектов (что именно поменялось в полях) лежат внутри базы, в таблицах СУБД, и только если версионирование включено.

Из-за этой разницы люди часто ищут не там. Выгрузили .dt, развернули копию — а журнала нет. Открыли журнал — видно, что документ менял Иванов, но не видно, какую сумму он исправил. Разберём каждое хранилище по отдельности: где лежит, что содержит и как из него достать нужное.

Журнал регистрации: в какой папке хранится история событий

Журнал регистрации — это механизм платформы. Он пишет события сеансов: вход, выход, запись, проведение и удаление объектов, ошибки, изменение пользователей и конфигурации.

Физически это файлы на диске, а не таблицы базы.

Вариант базыГде лежит журнал
Файловая<каталог базы>\1Cv8Log — рядом с файлом 1Cv8.1CD
Клиент-серверная, Windows<каталог srvinfo>\reg_1541\<GUID базы>\1Cv8Log
Клиент-серверная, Linuxдомашний каталог пользователя usr1cv8, внутри .1cv8/1C/1cv8/reg_1541/<GUID базы>/1Cv8Log

Каталог srvinfo задаётся при установке сервера. Чаще всего это C:\Program Files\1cv8\srvinfo, но администратор мог вынести его на другой диск. Точный путь виден в параметрах запуска службы «Агент сервера 1С:Предприятия» — ключ -d.

Какие файлы внутри 1Cv8Log

Формат журнала выбирается в его настройке. Встречаются два варианта:

  • 📄 последовательный — файл-словарь 1Cv8.lgf и файлы событий *.lgp, по одному на период (день, месяц и т. д.);
  • 🗃 SQLite — один файл 1Cv8.lgd.

Удалять эти файлы при работающей базе не нужно. Если журнал разросся, его сокращают штатно — об этом ниже.

Как найти GUID серверной базы

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

Открывайте копию 1CV8Clst.lst, а не сам файл. Случайное сохранение испорченного реестра может оставить кластер без списка баз.

Почему журнал пропадает после переноса базы

Типичная ситуация: базу перенесли на новый сервер через .dt или резервную копию СУБД, а журнал регистрации пустой. Так и должно быть — в базу журнал не входит. Новая база на сервере получает новый GUID и новую папку.

Чтобы сохранить историю, при переносе:

  1. Найдите папку 1Cv8Log старой базы по GUID.
  2. Скопируйте её целиком в архив рядом с выгрузкой.
  3. При необходимости читайте её отдельно, способом из раздела про консоль ниже.

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

Что журнал регистрации показывает, а чего в нём нет

Журнал отвечает на вопросы «кто», «когда», «с какого компьютера» и «какой объект». На вопрос «что было до правки» он не отвечает.

По каждому событию в журнале есть:

  • 👤 пользователь и компьютер;
  • 🕒 дата и время;
  • 🏷 событие — например, Данные. Изменение, Данные. Удаление, Данные. Проведение, Сеанс. Начало;
  • 📌 метаданные и ссылка на объект («Реализация товаров и услуг 00-000125 от 12.03»);
  • 💬 комментарий, если его записал код конфигурации.

Старых и новых значений реквизитов там нет. Видно, что документ перезаписали в 15:42, но не видно, что сумму поменяли с 120 000 на 102 000.

Где открыть журнал

  • Конфигуратор: Администрирование → Журнал регистрации.
  • Типовые конфигурации на БСП (БП 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Протоколы работы → Журнал регистрации.
  • Любая конфигурация в режиме Предприятия: Все функции → Стандартные → Журнал регистрации (пункт «Все функции» включается в параметрах программы).

💡 Для расследования сразу ставьте отбор: период, пользователь, событие Данные. Изменение и тип объекта. Без отбора журнал за месяц у базы на 20 пользователей открывается долго и тонет в событиях входа.

Настройка уровня и срока хранения

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

  1. Уровень регистрации — от «Не регистрировать» до «Регистрировать все события». Для аудита правок нужен уровень, при котором пишется информация, а не только ошибки.
  2. Период разделения журнала на файлы.
  3. Сокращение журнала — удаление событий старше указанной даты с возможностью сохранить их в отдельный файл.

Если уровень стоит «Регистрировать ошибки», событий изменения данных в журнале не будет вообще. Проверьте это до инцидента, а не после.

Версии объектов: история изменений внутри базы данных

Чтобы видеть не только факт правки, но и сами значения, в 1С есть два механизма версионирования. Оба хранят данные внутри базы — значит, попадают в .dt и в резервную копию СУБД.

Версионирование БСП в типовых конфигурациях

В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП оно включается в Администрирование → Общие настройки → История изменений. Там флажок хранения истории и настройка, для каких объектов её вести и сколько хранить.

Версии лежат в регистре сведений ВерсииОбъектов. Каждая запись — сериализованная копия объекта на момент записи: шапка, табличные части, автор и время.

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

Платформенная «История данных»

С версии платформы 8.3.11 есть собственный механизм «История данных». Он включается разработчиком в свойствах объекта метаданных или программно. Данные идут сначала в очередь, затем обрабатываются в версии и хранятся в служебных таблицах базы.

В типовых конфигурациях бухгалтер с ним обычно не сталкивается. Это инструмент для доработок, где нужна история без БСП.

Что нужно узнатьЖурнал регистрацииВерсии БСПИстория данных платформы
Кто и когда изменил✅✅✅
Старое значение поля❌✅✅
Где хранитсяфайлы 1Cv8Logтаблица регистра в базеслужебные таблицы базы
Попадает в .dtнетдада
Включаетсяпо умолчаниюфлажок в настройкахразработчиком

Таблицы регистрации изменений в SQL-базе

Третий источник, который путают с историей, — регистрация изменений для планов обмена. Когда объект записывается, платформа ставит отметку «изменён» для каждого узла обмена, где этот объект участвует.

В SQL Server или PostgreSQL это отдельные таблицы, в имени которых есть ChngR: например, _DocumentChngR245 для документа или _InfoRgChngR812 для регистра сведений. Числа у каждой базы свои.

Что в таких таблицах:

  • 🔗 узел плана обмена;
  • 🆔 ссылка на изменённый объект;
  • 🔢 номер сообщения, в котором изменение уйдёт.

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

Как сопоставить таблицы SQL с объектами 1С

Имена вида _Document245 ничего не скажут без расшифровки. Расшифровку даёт встроенная функция ПолучитьСтруктуруХраненияБазыДанных(). Её вызывают из обработки или консоли кода в режиме Предприятия:

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

Второй параметр Истина возвращает имена в терминах СУБД. В колонке «Назначение» у таблиц регистрации изменений будет значение «РегистрацияИзменений».

Ничего не меняйте в таблицах базы 1С напрямую через SQL. Платформа не узнает о правке, а изменения в обход неё нарушают лицензионное соглашение и ломают целостность данных. Только чтение.

Журнал серверной базы и консоль администрирования

Консоль администрирования серверов 1С журнал регистрации не показывает. В ней видно другое, тоже полезное при разборе инцидента:

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

Сам журнал серверной базы смотрят из клиента 1С — теми же командами, что и у файловой. Платформа читает файлы с сервера сама.

Как прочитать журнал, если база не открывается

Бывает, что базу нельзя запустить, а журнал нужен. Приём практиков:

  1. Скопируйте папку 1Cv8Log нужной базы в отдельное место.
  2. Создайте пустую файловую базу .
  3. Закройте её и замените её папку 1Cv8Log скопированной.
  4. Откройте пустую базу в Конфигураторе и откройте журнал регистрации.

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

Выгрузка журнала для анализа

Встроенный метод ВыгрузитьЖурналРегистрации() сохраняет события в файл с отбором по дате, пользователю, событию. Его используют, когда журнал надо передать подрядчику или загрузить во внешнюю систему, не давая доступа к базе.

Как восстановить данные по истории изменений

Восстановление зависит от того, какой след остался.

Что у вас есть для восстановления?

Пример расследования. 12 марта сумма реализации 00-000125 стала 102 000 вместо 120 000:

  1. В журнале отбор по объекту и событию Данные. Изменение — правка в 15:42, пользователь Петрова.
  2. В истории изменений документа сравниваем версию 4 (15:10) и 5 (15:42) — в строке 3 количество стало 12 вместо 15 при цене 6 000. Разница 3 × 6 000 = 18 000, ровно 120 000 − 102 000.
  3. Решаем: вернуть версию 4 или оставить, если правка верная.

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

Сторонний аудит: технологический журнал, СУБД и сбор логов

Когда журнала регистрации мало — нужен аудит прямых обращений к СУБД, длительный срок хранения или поиск по многим базам, — подключают внешние средства.

ИнструментЧто фиксируетКогда нужен
Технологический журнал 1С (logcfg.xml в каталоге conf платформы)события платформы: запросы к СУБД, исключения, блокировкирасследование ошибок и производительности
Аудит СУБД (SQL Server Audit, расширение pgaudit для PostgreSQL)кто подключался к СУБД и какие запросы выполнялконтроль доступа к базе в обход 1С
Системы сбора логов (ELK, Graylog и подобные)выгруженный журнал регистрации многих базцентрализованный поиск, хранение годами

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

💡 Аудит на уровне СУБД видит пользователя СУБД, под которым работает сервер 1С, а не пользователя 1С. Связать запрос с конкретным сотрудником помогает только сопоставление по времени с журналом регистрации или технологическим журналом.

История изменений конфигурации

Если вопрос не про данные, а про код и метаданные, смотрите хранилище конфигурации. Его история открывается в Конфигураторе: Конфигурация → Хранилище конфигурации → История хранилища. Там видны версии, авторы помещений и комментарии, можно сравнить любые две версии. Само хранилище — отдельный каталог на диске или сервер хранилища, не рабочая база.

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

Попадает ли журнал регистрации в выгрузку .dt?
Нет. Журнал хранится в папке 1Cv8Log отдельно от данных. Чтобы сохранить его, копируйте эту папку вместе с выгрузкой.
Можно ли удалить старый журнал регистрации, чтобы освободить место?
Да, но штатно: Администрирование → Настройка журнала регистрации → Сократить, с сохранением удаляемых событий в файл, если они могут понадобиться.
Почему в журнале нет событий изменения документов?
Скорее всего, уровень регистрации понижен до ошибок. Поднимите его в настройке журнала; уже прошедшие события не появятся.
Сильно ли версионирование увеличивает базу?
Зависит от числа и размера объектов. Каждая версия — полная копия объекта, поэтому для массовых документов задайте срок хранения и периодически удаляйте устаревшие версии в настройках истории изменений.
Видит ли журнал правки, сделанные обработкой?
Да, если обработка записывает объекты через платформу: событие запишется от имени пользователя, запустившего обработку. Правки напрямую в СУБД журнал не видит.