Кто, когда и что поменял в базе: три места, где 1С держит следы правок
Содержание
История изменений объектов в 1С хранится в трёх местах. Факт правки (кто, когда, какой документ) пишет журнал регистрации: в файловой базе это каталог 1Cv8Log внутри папки базы, в клиент-серверной — каталог 1Cv8Log в srvinfo\reg_1541\<идентификатор базы> на сервере 1С. Старые и новые значения реквизитов журнал не хранит: их сохраняет версионирование объектов (Администрирование → Общие настройки → История изменений в типовых конфигурациях) или механизм «История данных» платформы.
Обычно вопрос возникает в неприятный момент: в закрытом периоде поменялась сумма, пропал контрагент, перепроведён акт. Ниже по порядку: где смотреть, что каждый механизм умеет, что надо включить заранее, чтобы в следующий раз найти виновника за пять минут.
Журнал регистрации: главный источник для аудита изменений
Журнал регистрации ведёт сама платформа, в любой конфигурации. В него попадают входы и выходы пользователей, ошибки, фоновые задания и операции с данными.
Какие события фиксируют изменение объектов
📌 События группы «Данные»:
Данные. Добавление— создан новый элемент справочника или документ;Данные. Изменение— объект перезаписан;Данные. Удаление— объект удалён из базы окончательно;Данные. ПроведениеиДанные. Отмена проведения— для документов.
В каждой записи есть дата и время, пользователь, компьютер, приложение (тонкий клиент, фоновое задание, COM-соединение), метаданные объекта и ссылка на него. Двойной клик по ссылке открывает сам документ.
Пометка на удаление записывается как обычное изменение объекта. Окончательное удаление при обработке «Удаление помеченных объектов» даёт уже событие удаления.
Где лежат файлы журнала
| Вариант базы | Путь к журналу |
|---|---|
| Файловая | <папка базы>\1Cv8Log\ |
| Клиент-серверная, Windows | <каталог кластера>\srvinfo\reg_1541\<GUID базы>\1Cv8Log\ |
| Клиент-серверная, Linux | /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/<GUID базы>/1Cv8Log/ |
В современном формате журнал — это набор файлов: словарь 1Cv8.lgf и файлы событий *.lgp, по одному на период. Базы, созданные на старых платформах, могут вести журнал в одном файле 1Cv8.lgd (формат SQLite).
GUID базы в клиент-серверном варианте ищите в консоли администрирования кластера: свойства информационной базы. Каталог кластера по умолчанию — C:\Program Files\1cv8\srvinfo, но при установке его часто переносят.
Номер reg_1541 соответствует порту менеджера кластера. Если кластер поднят на другом порту, папка называется по-другому, например reg_2541.
Как открыть журнал из программы
- 🖥️ В пользовательском режиме типовых конфигураций:
Администрирование → Обслуживание, ссылка «Журнал регистрации». - 🧰 Через меню «Все функции»:
Стандартные → Журнал регистрации. Если пункта «Все функции» нет, включите его в параметрах программы (меню с шестерёнкой или «гамбургер» в правом верхнем углу, флажок «Отображать команду “Все функции”»). - ⚙️ В Конфигураторе:
Администрирование → Журнал регистрации.
Открыть журнал может пользователь с правами администратора. Рядовой бухгалтер его не увидит.
Как настроить журнал, чтобы изменения в нём остались
Главная ловушка: события «Данные» имеют уровень «Информация». Если журнал настроен писать только ошибки, ни одного изменения в нём не будет.
Настройка делается в Конфигураторе: Администрирование → Настройка журнала регистрации.
- Выберите уровень «Регистрировать ошибки, предупреждения, информацию» или «Регистрировать все события». Для аудита правок нужен как минимум третий вариант.
- Задайте разделение журнала по периодам (например, по месяцам). Тогда файлы
.lgpне разрастаются до гигабайтов, а старые месяцы проще архивировать. - Нажмите «ОК». Настройка начинает действовать сразу, Конфигуратор держать открытым не нужно.
Записи, сделанные до включения уровня «Информация», не появятся задним числом. Если журнал был выключен, восстановить, кто менял документ в прошлом месяце, по нему уже нельзя.
Сокращение журнала
В том же окне есть кнопка «Сократить». Она удаляет записи старше указанной даты и может предварительно сохранить их в файл.
Перед сокращением всегда сохраняйте удаляемую часть в файл. Сокращённый журнал не восстановить ничем, кроме резервной копии каталога 1Cv8Log.
Простой и надёжный приём: включить разделение по месяцам и раз в квартал копировать старые файлы .lgp вместе с 1Cv8.lgf в архив. Словарь нужен обязательно: без него файлы событий не прочитать.
История изменений реквизитов: версионирование и история данных
Журнал ответит на вопрос «кто и когда». На вопрос «что именно было до правки» он не отвечает. Для этого в 1С есть два механизма.
Версионирование объектов (БСП)
Это подсистема Библиотеки стандартных подсистем. Она есть в Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP и других конфигурациях на БСП.
Как включить:
- Откройте
Администрирование → Общие настройки. - В группе «История изменений» установите флажок «Хранить историю изменений».
- По ссылке «Настройки хранения» выберите, для каких видов объектов хранить версии и когда их записывать: при каждой записи или только при проведении.
После этого у объекта появляется команда «История изменений» (обычно в меню «Ещё» формы или на панели «Перейти»). В списке версий видно автора и дату каждой. Выделите две версии и сравните: программа покажет изменённые реквизиты и строки табличных частей, со старыми и новыми значениями.
📦 Версии хранятся в регистре сведений внутри самой базы, то есть занимают место в ней. В той же настройке задаётся срок хранения устаревших версий, а очистку выполняет регламентное задание.
Включайте версионирование выборочно: для документов, по которым бывают споры (реализация, поступление, кадровые приказы), и для договоров. Для всех справочников и регистров подряд это раздует базу без реальной пользы.
История данных (механизм платформы)
С версии платформы 8.3.11 есть встроенный механизм «История данных». Он настраивается разработчиком в Конфигураторе: у объекта метаданных и у отдельных реквизитов есть свойство «История данных».
Особенности:
- 🔸 записи пишутся в фоне, через очередь, поэтому версия появляется не мгновенно, а после обработки очереди (метод
ИсторияДанных.ОбновитьИсторию()или регламентное задание); - 🔸 можно включать историю только для нужных реквизитов, это экономнее версионирования целого объекта;
- 🔸 включение требует изменения конфигурации, а в типовой это лучше делать через расширение.
Если в вашей конфигурации нет БСП или версионирование не подходит, это основной вариант штатного хранения истории значений.
Регистрация изменений в планах обмена и программные метки
Ещё один механизм часто путают с историей правок. Планы обмена регистрируют, какие объекты изменились с момента последней выгрузки в другую базу.
Отличия от истории:
- ✅ регистрация показывает только «объект изменён и ждёт выгрузки»;
- ❌ автора и старых значений там нет;
- ❌ после успешного обмена регистрация снимается.
Для расследования она полезна в одном случае: понять, ушла ли правка в связанную базу.
Разработчик может добавить и свои события в журнал регистрации. Это помогает, когда стандартных событий мало, например, нужно фиксировать изменение конкретного реквизита с его значением:
ЗаписьЖурналаРегистрации("Аудит.ИзменениеЦены",
УровеньЖурналаРегистрации.Информация,
Метаданные.Справочники.Номенклатура,
Ссылка,
СтрШаблон("Цена: было %1, стало %2", СтараяЦена, НоваяЦена));
Такой код размещают в модуле объекта, в обработчике перед записью, где старое значение ещё можно прочитать из базы по ссылке. В типовой конфигурации правку делают расширением, а не снятием с поддержки.
Изменения на уровне СУБД: SQL-аудит и технологический журнал
Когда штатных средств мало (например, данные правят внешние программы через COM-соединение или прямо в таблицах), смотрят на уровень ниже.
Технологический журнал
Технологический журнал 1С включается файлом logcfg.xml в каталоге conf платформы. События DBMSSQL (для MS SQL) и DBPOSTGRS (для PostgreSQL) записывают тексты запросов к базе вместе с пользователем 1С и сеансом.
Плюс: видно реальный запрос UPDATE или INSERT. Минус: журнал очень объёмный, на рабочей базе за час набираются гигабайты. Включайте его на короткое время и с отбором по нужному событию.
Средства самой СУБД
| Инструмент | СУБД | Что фиксирует |
|---|---|---|
| SQL Server Audit | MS SQL | кто и какие команды выполнял |
| Change Data Capture | MS SQL | изменённые строки со старыми и новыми значениями |
| Расширение pgaudit | PostgreSQL | выполненные команды с пользователем СУБД |
| Триггеры на таблицах | обе | что угодно, вплоть до копии строки |
Таблицы 1С называются обезличенно: _Document123, _Reference45, _Fld678. Соответствие имён объектам конфигурации возвращает функция ПолучитьСтруктуруХраненияБазыДанных().
Триггеры и CDC на таблицах 1С — крайняя мера. При обновлении конфигурации платформа пересоздаёт таблицы, и настройки на них пропадают. Пользователь в аудите СУБД — служебная учётная запись сервера 1С, а не конкретный бухгалтер. Правка данных напрямую в таблицах в обход платформы ломает целостность базы, использовать этот уровень можно только для чтения и расследования.
Какой способ хранения истории выбрать
| Способ | Кто и когда | Старые значения | Нужен программист | Нагрузка |
|---|---|---|---|---|
| Журнал регистрации | да | нет | нет | низкая |
| Версионирование БСП | да | да, весь объект | нет | средняя, растёт база |
| История данных платформы | да | да, выбранные реквизиты | да | низкая или средняя |
| Свои события в журнале | да | то, что запишет код | да | низкая |
| Технологический журнал | да | косвенно, по тексту запроса | нет, нужен администратор | высокая |
| Аудит СУБД | только служебный пользователь | да (CDC, триггеры) | да | средняя |
Практичный набор для небольшой бухгалтерии: журнал на уровне «Информация» с разделением по месяцам плюс версионирование ключевых документов. Остальные инструменты нужны, когда расследование уже идёт и обычных следов не хватило.
Почему история изменений не находится: частые промахи
Ситуации, из-за которых в журнале «ничего нет», хотя документ точно меняли:
Отдельный промах — смотреть журнал «не той» базы. При нескольких копиях на одном сервере сверьте GUID в консоли кластера с именем папки в reg_1541.
Как быстро найти, кто изменил документ
Порядок действий, когда ищете конкретную правку:
- Откройте документ и скопируйте его номер и дату.
- В журнале регистрации нажмите «Установить отбор». Задайте интервал, событие
Данные. Изменение(иДанные. Проведение, если документ перепроводили) и в поле «Данные» выберите сам документ. - Просмотрите записи по времени: колонки «Пользователь», «Компьютер», «Приложение» покажут, откуда шла правка.
- Если включено версионирование, откройте «Историю изменений» документа и сравните версию до и после найденного времени.
📊 Для регулярного контроля выгружайте журнал в таблицу. Методом ВыгрузитьЖурналРегистрации() с отбором по дате и событиям получается таблица значений, которую удобно свести по пользователям: сколько правок в закрытом периоде сделал каждый.
Кроме самого журнала полезно настроить дату запрета изменения данных. Она не хранит историю, но не даёт поменять закрытый период без ведома ответственного, и расследований становится меньше.
Нужен ответ на «что было в документе месяц назад», а версионирования не было? Остаётся резервная копия: разверните её рядом как отдельную базу и сравните документ вручную или отчётом.