• история изменений реквизитов справочников/документов/регистров сведений;
• лог действий, определенных администратором и не связанных с объектами ИБ
• подробная история изменений из формы объекта;
• поиск в истории по значению реквизита;
• откат к выбранной версии объекта;
• групповой откат изменений;
• восстановление удаленных объектов с сохранением ссылочной целостности;
• хранение истории на SQL-сервере;
• сбор статистики (монитор активности в 1С);
• отказ от типового версионирования из Библиотеки Стандартных Подсистем с сохранением накопленной истории;
• открытый код
Разработка решает вышеперечисленные задачи следующим образом:
В момент записи объекта в регистре сведений сохраняются его свойства - реквизиты и табличные части. Также регистрируется открытие форм объектов (формы списка, выбора, объекта), открытие отчетов/обработок.
Сохранение истории не происходит в SQL напрямую. Вся история хранится в регистре сведений до момента переноса на сервер. Перенос истории осуществляет регламентное задание.
Состав регистрируемых объектов, а также способ их регистрации (регистрируется сам факт открытия/изменения, или регистрация с сохранением значений реквизитов) настраивается администратором.
Интерфейс
История изменений доступна из формы объекта (панель навигации формы). Для пользователя это единственная возможность доступа к истории. Для администратора есть возможность независимого использования этого функционала в подсистеме Логирование, а также журнал регистрации, монитор активности и возможность отката объекта к выбранной точке истории.
Просмотр истории из объекта
Панель навигации объектов (справочники и документы), содержит ссылку перехода в историю изменений:
В левой части окна представлена хронология изменения объекта. При выборе точки истории отображается состояние объекта: значения реквизитов и его табличные части, если они имеются. Если значение реквизита для выбранной точки отличается от его значения для предыдущей точки, оно подсвечивается красным шрифтом и флажком. При наведении курсора всплывает подсказка, в которой отображается его предыдущее значение, а также кем и когда оно установлено:
Историю регистра сведений можно посмотреть только из журнала регистрации. История будет отображать содержание набора записей в разрезе отбора:
Состояние точки истории можно вывести в документ mxl:
Когда у объекта длинная история изменений, удобно видеть те точки, в которых есть какие-либо изменения по сравнению с предыдущим состоянием объекта, чтобы исключить из анализа те точки, когда объект записывался "вхолостую", без изменений.
Также очень удобно в незнакомой конфигурации видеть тип значения реквизитов объекта. Для этого в интерфейсе предусмотрена возможность переключения в режим отображения дополнительной информации о типе значений реквизитов: гиперссылка "[тип значения]"
При включенном режиме "[тип значения]" отображается не синоним, а имя реквизита, плюс его тип. Если тип реквизита является составным, то отображаются все его доступные типы. Кликнув такой на реквизит, можно получить подробную расшифровку типа значения:
Возможности администратора
Администратору доступна подсистема Логирование:
Журнал регистрации
В журнале отражаются события, регистрация которых была включена:
- справочник; - документ; - регистр сведений; - обработка; - отчет.
Записанные/измененные объекты помечаются иконкой . Двойной клик на такой строке открывает историю изменения объекта, спозиционировав курсор на точке хронологии, соответствующей текущей строке журнала регистрации.
Отбор журнала позволяет настроить фильтр по виду регистрируемых объектов, пользователю, периоду, представлению объекта и по самому объекту (справочник или документ):
Монитор активности
Отображает, на основе данных лога, статистику использования базы в разрезе времени и количества обращений. Шкала времени разбита по часам суток.
Позволяет сформировать график:
- за выбранный период:
- среднюю суточную активность за указанный период:
Кликнув на интересующую точку графика, можно получить расшифровку:
Восстановление состояния объекта. Откат к предыдущей точке.
У администратора есть возможность откатить состояние объекта к определенной точке истории, а также восстановить удаленные объекты ИБ. При попытке открыть удаленный объект (объект, который не найден в базе по ссылке), будет открыта форма истории его изменений:
В открывшейся форме в контекстном меню на текущей строке следует выбрать "Вернуться к текущей точке":
Групповой откат измененных объектов.
В случае работы с различными алгоритмами, связанными с групповым изменением данных, есть возможность для группы объектов определенного вида откатить сделанные изменения на шаг назад в хронологии. Для этого нужно выбрать вид объекта (справочник или документ), указать при необходимости пользователя, и выбрать период, в котором было групповое изменение объектов, нажать "Сформировать".
Будет сформирована таблица с измененными объектами за указанный период, а также предыдущая точка в истории. Нужно отметить откатываемые объекты, и нажать "Откатить изменения"
Поиск в истории по значению реквизита.
Механизм позволяет найти точки истории, в которых реквизит объекта или реквизит табличной части объекта принимал определенное значение или был изменен. Это может быть полезно, когда неизвестно кем и неизвестно в каком именно документе определенного вида было изменено значение реквизита, но примерно известно, когда это было сделано. Например, "...еще вчера все было хорошо, а сегодня поехал отчет". Очевидно, что кто-то изменил сумму/номенклатуру/количество в заказе, но в каком?.. Обработка "Поиск по значению реквизита" вам в помощь!
Обработка доступна для администратора. Настройка обработки заключается в указании периода, и позиционирования курсора на исследуемом реквизите. После чего жмем "Сформировать".
- Может отображать как сам факт изменения реквизита:
- так и поиск конкретного значения реквизита:
- также возможен поиск в табличной части с отбором по значениям реквизитов.* Для этого необходимо указать значение реквизита отбора, и спозиционировать курсор на исследуемом реквизите.
Пример: выловить факт изменения количества, где указан реквизит шапки "склад" и реквизит "номенклатура" табличной части
* - при исследовании реквизитов шапки объекта, указать отбор возможно только по реквизитам шапки объекта, но не по реквизитам табличной части
Перенос истории на сервер / очистка истории.
Перенос истории на SQL-сервер осуществляет регламентное задание . Интервал запуска задания можно установить = 10мин. Для регламентного задания ОчисткаЛога интервал запуска установить = раз в сутки.
Все механизмы подсистемы получают данные одновременно как с сервера так и из регистра сведений*. Таким образом, для корректной работы подсистемы допускается отключить задание переноса истории на SQL-сервер. В этом случае вся история будет храниться непосредственно в базе 1С, со всеми вытекающими последствиями. Однако, в случае, если в базу заведен новый пользователь, а история после этого события не переносилась на сервер, то могут возникать ошибки при открытии истории изменений объекта.
* - поиск в истории по значению реквизита работает только в случае хранения истории на SQL-сервере
(!) Есть возможность полностью вычистить из базы историю по тем настройкам регистрации, для которых выключена регистрация, и [Хранить, дней] = 0: рег.задание "ЛогированиеОчисткаПоВидамОбъектов"
Установка и настройка подсистемы
Состав разработки
- Общие модули ЛогированиеПодписки, ЛогированиеРегламентныеЗадания: процедуры обработки перехвата событий, подлежащих регистрации; процедура регламентного задания переноса лога на сервер
- Роль: SQLЛогирование – необходимый и достаточный доступ для работы обычного пользователя;
- Роль: SQLЛогированиеАдминистратор – необходимый доступ для настройки подключения к SQL-серверу, настройкам логирования, монитору активности и журналу регистрации, возможность отката состояния объекта к выбранной точке истории;
- Подписки на события – перхватчики событий, подлежащих регистрации
- Регламентное задание ПереносЛогаНаSQL – перенос истории изменений из регистра сведений на сервер SQL
- Регламентное задание ОчисткаЛога – Удаление истории, время хранения которой истекло
- Регламентное задание Переход_с_БСП_2_3_6_92 – Перенос истории из типового регистра ВерсииОбъектов и его очистка
- Константа БазаЛога_СтрокаПодключения – настройки подключения к серверу
- Справочник ЛогированиеОбъекты: хранилище настроек правил регистрации объектов
- Обработка ИсторияИзмененийПоОбъекту: интерфейс для исследования истории изменений объекта (справочника/документа/регистра сведений), а также отката к выбранной точке истории. Вызывается как независимо, так и из формы объекта
- Обработка ЛогированиеСтруктураМетаданных: Вспомогательная обработка для исследования типа значений реквизитов, а также для расшифровки значения реквизита типа "ХранилищеЗначения"
- Обработка ЛогированиеГрупповойОткатИзменений: Обработка для группового отката измененных объектов к предыдущей точки истории
- Обработка МониторАктивностиВ1С: – интерфейс для наглядного представления о нагрузке на базу в разрезе указанного периода, типа (Среднее за период, весь период), и выбранного пользователя.
- Обработка ЖурналЛогирование: – интерфейс для просмотра лога - Журнал регистрации.
- РегистрСведений Логирование: хранилище истории до момента ее переноса на сервер, процедуры отправки и получения данных с сервера
Порядок обновления
1. Обновить конфигурацию путем сравнения/объединения с конфигурацией из файла.
1.1. В окошке сравнения снять галку "Свойства" конфигурации; снять галку у справочника "Пользователи"; выполнить обновление
1.2. В некоторых случаях (как правило, в самописных базах) справочник, соответствующий типовому "Пользователи" может называться как угодно, а пользователь сеанса может быть получен каким угодно способом. В этом случае следует прописать это в соответствующих функциях в модуле РегистрСведений.Логирование.МодульМенеджера:
Функция ТекущийПользователь() Экспорт
Возврат ПараметрыСеанса.ТекущийПользователь
КонецФункции
Функция ИмяСправочникаПользователи() Экспорт
Возврат "Пользователи";
КонецФункции
1.3. Проследить, корректно ли установлены типы, соответствующие справочнику "Пользователи" в следующих объектах
Обработка.МониторАктивностиВ1С.Макет.МакетРасшифровка.НаборДанных1
Тип поля Пользователь
Обработка.МониторАктивностиВ1С.Макет.МакетНастройки.Параметры
Тип параметра Пользователь
Обработка.ЛогированиеГрупповойОткатИзменений.Форма
Типы реквизитов формы: ввПользователь, ТЗИстория.Пользователь, ТЗИстория.ПредПользователь
РегистрСведений.Логирование.Измерение.Пользователь.Тип
1.4. Команда Обработка.ИсторияИзмененийПоОбъекту.Команды.ИсторияИзмененийПоОбъекту
- установить тип параметра составным и добавить типы объектов, из формы которых предполагается просматривать историю изменений.
1.5. Если предполагается использовать как управляемое, так и обычное приложение, то в свойствах общего модуля ЛогированиеПодписки установить галку Клиент (обычное приложение); Если предполагается подключение к базе по COM-соединению, то в свойствах общего модуля ЛогированиеПодписки установить галку "Внешнее соединение"
1.6 Модуль управляемого приложения:
- для корректного определения имени компьютера добавить в модуль функцию ПолучитьИмяКомпьютера() (функция присутствует в файле *.cf);
- в процедуру ПриНачалеРаботыСистемы() добавить строку: ЛогированиеПодписки.УстановитьИмяКомпьютераСервер(ПолучитьИмяКомпьютера());
1.7. Установить роль SQLЛогирование всем пользователям базы (необходимый и достаточный доступ к подсистеме логирования для корректной работы); установить роль SQLЛогированиеАдминистратор администратору 1С (настройка подключения к SQL, настройка правил регистрации, использование журнала регистрации, откат состояния объекта к ранней точке истории).
2. В режиме предприятия настроить подключение к SQL-серверу: Логирование => Лог => Соединение с SQL:
3. Настроить правила регистрации событий: Логирование => Объекты логирования.
4. Если в конфигурации используется типовой механизм версионирования из БСП (регистр ВерсииОбъектов), и нужно сохранить накопленную историю изменений, то в БСП требуется отключить сохранение версий объектов, после чего перенести всю историю из регистра ВерсииОбъектов на SQL. Таким образом, сохранятся все те изменения справочников и документов, которые попали в историю до момента установки подсистемы Логирование. Перенос истории и очистку регистра ВерсииОбъектов осуществляет регламентное задание Логирование_Переход_с_БСП_2_3_6_92. Количество точек истории, которое будет переноситься при запуске задания можно указать в процедуре регламентного задания (по умолчанию = 30тыс точек истории за один запуск задания).
4.1 Для пользователя, от имени которого будет запускаться регламентное задание следует снять галку "Защита от опасных действий"
Лог действий, не связанных с объектами ИБ и определенных администратором
Кроме событий просмотра/записи объектов ИБ есть возможность регистрировать прочие действия в базе, например, вывод печатных форм, открытие файлов, запуск процедур обмена, и прочих действий.
Для этого можно использовать код такого вида:
Комментарий = "Дополнительная информация";
Действие = Перечисления.ЛогированиеДействия["<Значение перечисления>"];
РегистрыСведений.Логирование.ЗаписатьВЛогПрочееДействие("Тип","Действие","Наименование",Действие,Комментарий);
В результате в настройках логирования появится раздел "Прочее":
!!! Следует внимательно отнестись к регистрации прочих действий (не связанных с объектами метаданных).
Например, если в процедуре РегистрыСведений.Логирование.ЗаписатьВЛогПрочееДействие(...) в качестве первых трех параметров передавать ссылку на документ/справочник, то будет создано правило регистрации для представления каждого переданного объекта, которые могут исчисляться тысячами. Решение предусматривает не более 65536 различных правил регистрации. Если количество правил регистрации превысит это количество, это вызовет ошибку переполнения типа smallint на sql-сервере.
В случае, если это всё-таки произошло, то нужно отключить такие правила регистрации, после чего запустить регламентное задание ЛогированиеОчисткаПоВидамОбъектов. Это задание будет вычищать историю по всем неактуальным правилам регистрации. А поскольку эта операция в случае большой базы ресурсозатратна, то вычищаться будет по 100 правил регистрации за один запуск.
! В версиях платформы 8.2.х не предусмотрены подписки на события получения форм. В этом случае регистрация событий просмотра работать не будет.
! Регистр сведений Логирование, в теории, является слабым звеном разработки. Следует это учитывать при работе с высоконагруженными базами. Подсистема хорошо себя показала при среднем времени записи в регистр ~0.04 сек, ~1,2млн. регистрируемых событий в сутки и ~50 активных пользователей. Заметного снижения скорости работы не наблюдалось.
! Перенос истории из типового механизма версионирования тестировался на БСП версии 2.3.6.92. Для более старших версий БСП тестирование не проводилось
! Разработка предназначена исключительно для Micrоsoft SQL-Sеrvеr. Совместимость с PostgreSQL не проверялась и не предполагалась изначально
! Компоненты и алгоритмы разработки независимы от стандартных компонентов и алгоритмов типовых конфигураций 1С, и не влияют друг на друга и на нормальную работу типовых или самописных конфигураций, за исключением механизма переноса накопленной истории на SQL-сервер из типового регистра ВерсииОбъектов, регистрацию в котором следует отключить (см. п.4 Порядка обновления). Также в любой типовой или самописной конфигурации должен присутствовать справочник пользователей, под которым происходит вход в 1С в режиме предприятия (в конфигурациях на основе БСП это справочник "Пользователи") (см. п.1.2 Порядка обновления)
! Код разработки открыт, что означает: скачиваешь раз, и пользуешься всю жизнь бесплатно, дорабатывая механизм под нужды очередного конкретного предприятия, принимая на себя всю ответственность за работоспособность доработанных алгоритмов
Все механизмы были протестированы на версиях платформы: 8.2.14.528, 8.3.6.2332, 8.3.10.2580, 8.3.13.1513, 8.3.17.1549, 8.3.18.1208. В зависимости от версии платформы, возможны некоторые различия в отрисовках графика монитора активности, расшифровках точек монитора активности, а также отрисовки дерева настроек регистрации.
Проверено на версиях SQL-сервера:
• 2014;
• 2008;
• SQL-Express
Проверено на конфигурациях:
• УТ 11.0.4.5; УТ
• УПП 1.3.59.1;
• 1С:Общепит 3.0.51.27;
• Бухгалтерия предприятия КОРП 3.0 (3.0.115.19);
• Самописные конфигурации на платформе 8.3.хх
Интерфейс для обычного приложения не предусмотрен. В случае работы в обычном приложении все компоненты подсистемы доступны через меню "Операции". Если есть потребность работать в обычном приложении, интерфейс для этой цели предлагается написать тебе, программист 1С-ник!
UPD 29.11.2018
- добавлено регламентное задание "ОчисткаЛога"
- добавлена возможность указания количества дней хранения истории для каждой настройки регистрации
UPD 01.02.2019
- Корректно определяется имя компьютера в случае работы в 1С через терминал
UPD 07.02.2019
- Доработан интерфейс обработки отображения истории, настроек логирования
- Добавлен функционал быстрого отображение только измененных точек истории объекта
- Добавлена возможность регистрировать события, не связанные с метаданными базы
UPD 03.03.2019
- Ускорено чтение истории c SQL
- Монитор активности: добавление возможности группировки событий в отдельные показатели
UPD 15.03.2019
- Добавлен механизм поиска в истории по значениям реквизитов
UPD 24.05.2019
- Реализован механизм развёртывания пустой базы хранения лога из 1С
UPD 28.06.2019
- Реализован переход с типового версионирования: перенос истории в подсистему Логирование, и очистка регистра ВерсииОбъектов
UPD 31.10.2019
- Исправление выявленных ошибок; Тестирование на SQL2008
- Добавление выбора режима записи при откате объекта к предыдущей точки истории: - в обычном режиме; - в режиме ОбменДанными.Загрузка
- При записи объекта (СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей), при наличии в дополнительных свойствах объекта свойства "НеРегистрировать", в зависимости от НеРегистрировать = Истина или НеРегистрировать = Ложь, событие, соответственно, будет зарегистрировано, или не будет зарегистрировано
UPD 28.02.2020
- Фоновое формирование в Мониторе активности
UPD 20.04.2021 Версия 2.0
- Оптимизирована структура хранения данных на SQL-сервере
- более чем в пять раз уменьшен размер базы данных
- ускорено получение данных:
-
отборы в журнале
-
определение измененных точек истории. Теперь при анализе истории измененные точки отображаются автоматически
-
поиск по значению реквизита
-
-
- Фоновое формирование в обработке "Поиск по значению реквизита"
- Устранение ошибок в отчете "Поиск по значению реквизита"
UPD 22.12.2021
-
Добавлена возможность видеть тип значения реквизитов в интерфейсе просмотра истории
UPD 25.07.2022
-
- При создании нового правила регистрации автоматически задается время хранения его истории = 30дней. При необходимости это можно изменить в настройках регистрации
UPD 28.02.2023
- Добавлена возможность сохранения настроек отбора в журнале регистрации;
-
Монитор активности: гибкий фильтр по объектам с использованием сохраненных настроек отбора
UPD 25.07.2023
-
При очистке истории добавлена возможность сохранения последней версии объекта
UPD 16.08.2023
- Добавлена возможность группового отката изменений для группы объектов определенного вида
UPD 14.02.2024
- Исправление ошибки в регламентном задании "ОчисткаЛога" и его оптимизация