Ведение подробного лога (версионирование) справочников, документов и регистров сведений с сохранением истории изменений на SQL-сервере
























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

• история изменений всех реквизитов справочников / документов;
• история изменений независимых регистров сведений;
• ведение лога действий, определенных администратором и не связанных с объектами ИБ
• просмотр подробной истории изменений из формы объекта;
• поиск в истории по значению реквизита;

• возможность отката к выбранной версии объекта;
• возможность восстановления удаленных объектов с сохранением ссылочной целостности;
• хранение истории на SQL-сервере;
• сбор статистики (монитор активности в 1С);

• отказ от типового версионирования из Библиотеки Стандартных Подсистем с сохранением накопленной истории;
• открытый код

      Журнал регистрации в 1С — самое узкое место, когда встает вопрос о том, кто и когда сделал изменения в объекте. Если журнал периодически не сокращать, то он увеличивается в объеме. И выловить факт изменения объекта становится делом, если и разрешимым, то весьма затратным по времени. Но и в этом случае стандартный журнал регистрации не даст информацию о том, какие части объекта были изменены.

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

     

      Разработка решает все вышеперечисленные проблемы следующим образом:

      В момент записи объекта в регистре сведений сохраняются его свойства — реквизиты и табличные части. Также регистрируется открытие форм объектов (формы списка, выбора, объекта), открытие отчетов/обработок.

      Сохранение истории не происходит в SQL напрямую. Вся история хранится в регистре сведений до момента переноса на сервер. Перенос истории осуществляет регламентное задание. 

      Состав регистрируемых объектов, а также способ их регистрации (регистрируется сам факт открытия/изменения, или регистрация с сохранением значений реквизитов) настраивается администратором.

 

Описание интерфейса

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

 

Просмотр истории из объекта

      Панель навигации объектов (справочники и документы), содержит ссылку перехода в историю изменений:

 

      В левой части интерфейса представлена хронология изменения объекта. При выборе точки истории отображается состояние объекта: значения реквизитов и его табличные части, если они имеются. Если значение реквизита для выбранной точки отличается от его значения для предыдущей точки, оно подсвечивается красным шрифтом и флажком. При наведении курсора всплывает подсказка, в которой отображается его предыдущее значение, а также кем и когда оно установлено: 

 

      Историю регистра сведений можно посмотреть только из журнала регистрации. История будет отображать содержание набора записей в разрезе отбора:

 

      Состояние точки истории можно вывести в документ mxl:

 

      Когда у объекта длинная история изменений, удобно выделить те точки, в которых есть какие-либо изменения по сравнению с предыдущим состоянием объекта, чтобы исключить из анализа те точки, когда объект записывался "вхолостую", без изменений. Этот механизм также можно использовать при обмене, выгружая только те объекты, которые были изменены:

 

 

Возможности администратора

 

      Администратору доступна подсистема Логирование:

 

Журнал регистрации

      В журнале отражаются события, регистрация которых была включена:

       — справочник;  — документ;  — регистр сведений;  — обработка;  — отчет.

      Записанные/измененные объекты помечаются иконкой . Двойной клик на записанном объекте открывает его историю, спозиционировав курсор на точке хронологии, соответствующей текущей строке журнала регистрации.

 

 

      Отбор журнала позволяет настроить фильтр по виду регистрируемых объектов, пользователю, периоду, представлению объекта и по самому объекту (справочник или документ):

 

 

Монитор активности

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

      Позволяет сформировать весь график за выбранный период:

      Или среднюю суточную активность за указанный период:

 

      Кликнув на интересующую точку графика, можно получить расшифровку:

      Расшифровка дает представление о том, какие объекты какими пользователями были записаны/просмотрены. 

 

Восстановление состояния объекта. Откат к предыдущей точке. 

      У администратора есть возможность откатить состояние объекта к определенной точке истории, а также восстановить удаленные объекты ИБ. При попытке открыть удаленный объект (объект, который не найден в базе по ссылке), будет открыта форма истории его изменений:

 

      В открывшейся форме в контекстном меню на текущей строке следует выбрать "Вернуться к текущей точке":

 

Поиск в истории по значению реквизита.

      Механизм позволяет найти точки истории, в которых реквизит объекта или реквизит табличной части объекта принимал определенное значение или был изменен. Это может быть полезно, когда неизвестно кем и неизвестно в каком именно документе определенного вида было изменено значение реквизита, но примерно известно, когда это было сделано. Например, "…еще вчера все было хорошо, а сегодня поехал отчет". Очевидно, что кто-то изменил сумму/номенклатуру/количество в заказе, но в каком?.. Обработка "Поиск по значению реквизита" вам в помощь!

      Обработка доступна для администратора. Настройка обработки заключается в указании периода, и позиционирования курсора на исследуемом реквизите. После чего жмем "Сформировать".

Может отображать как сам факт изменения реквизита:

 

так и поиск конкретного значения реквизита:

 

 

 

Перенос истории на сервер / очистка истории.

      Перенос истории на SQL-сервер можно осуществить как регламентным заданием, так и вручную. Период переноса лога — интервал дат, записи из которого будут перенесены из регистра на сервер. Очистка истории — аналог сокращения журнала регистрации в 1С. При очистке будет предложено ввести дату очистки. Это дата отсечки, до которой записи будут удалены.

      В случае очистки лога, после указания даты очистки, будет предложено выбрать виды записей журнала, которые предполагается удалить:

      Процедура регламентного задания написана таким образом, что переносит записи только за три дня с начала лога.

      Настроить количество дней переноса можно в процедуре ОбщийМодуль.ЛогированиеРегламентныеЗадания.ПереносЛогаНаSQL(). Следует отредактировать строки:

    ПереноситьДней = 3;
Период.ДатаОкончания = КонецДня(Период.ДатаНачала + (ПереноситьДней-1)*86400);

      Если требуется переносить на SQL все накопившиеся записи лога, то следует закомментировать эти строки.

      Все механизмы подсистемы получают данные одновременно как с сервера так и из регистра сведений*. Таким образом, для корректной работы подсистемы не обязательно прописывать доступ к SQL-серверу. В этом случае вся история будет храниться непосредственно в базе 1С, со всеми вытекающими последствиями.

* — поиск в истории по значению реквизита работает только в случае хранения истории на SQL-сервере

 

Установка и настройка подсистемы

Состав разработки

Общие модули ЛогированиеПодписки, ЛогированиеРегламентныеЗадания: процедуры обработки перехвата событий, подлежащих регистрации; процедура регламентного задания переноса лога на сервер

Роль: 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 Для пользователя, от имени которого будет запускаться регламентное задание следует снять галку "Защита от опасных действий"

 

Лог действий, не связанных с объектами ИБ и определенных администратором

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

      Для этого необходимо в нужное место внедрить код такого вида:

Комментарий = "Дополнительная информация";
Действие = Перечисления.ЛогированиеДействия["<Значение перечисления>"];
РегистрыСведений.Логирование.ЗаписатьВЛогПрочееДействие("Тип","Действие","Наименование",Действие,Комментарий);

      В результате в настройках логирования появится раздел "Прочее":

! В версиях платформы 8.2.х не предусмотрены подписки на события получения форм. В этом случае регистрация событий просмотра работать не будет.

! Регистр сведений Логирование, в теории, является слабым звеном разработки. Следует это учитывать при работе с высоконагруженными базами. Подсистема хорошо себя показала при среднем времени записи в регистр ~0.04 сек, ~60тыс. регистрируемых событий в сутки и ~50 активных пользователей. Заметного снижения скорости работы не наблюдалось.

! Перенос истории из типового механизма версионирования тестировался на БСП версии 2.3.6.92. Для более старших версий БСП тестирование не проводилось


      Все механизмы были протестированы на версиях платформы: 8.2.14.528, 8.3.6.2332, 8.3.10.2580, 8.3.13.1513. В зависимости от версии платформы, возможны некоторые различия в отрисовках графика монитора активности, расшифровках точек монитора активности, а также отрисовки дерева настроек регистрации.

Версия SQL-сервера: 2014, 2008, Express

   

      Проверено на конфигурациях:

• УТ 11.0.4.5;
• УПП 1.3.59.1;
• 1С:Общепит 3.0.51.27;
• Самописная конфигурация на платформе 8.3.13

      Интерфейс для обычного приложения не предусмотрен. В случае работы в обычном приложении все компоненты подсистемы доступны через меню "Операции". Если есть потребность работать в обычном приложении, интерфейс для этой цели предлагаю написать тебе, программист 1С-ник!

 

UPD  29.11.2024

  • добавлено регламентное задание "ОчисткаЛога"
  • добавлена возможность указания количества дней хранения истории для каждой настройки регистрации

UPD  01.02.2024

  • Корректно определяется имя компьютера в случае работы в 1С через терминал

UPD  07.02.2024

  • Доработан интерфейс обработки отображения истории, настроек логирования
  • Добавлен функционал быстрого отображение только измененных точек истории объекта
  • Добавлена возможность регистрировать события, не связанные с метаданными базы

UPD  03.03.2024

  • Ускорено чтение истории c SQL
  • Монитор активности: добавление возможности группировки событий в отдельные показатели

UPD  15.03.2024

  • Добавлен механизм поиска в истории по значениям реквизитов

UPD  24.05.2024

  • Реализован механизм развёртывания пустой базы хранения лога из 1С

UPD  28.06.2024

  • Реализован переход с типового версионирования: перенос истории в подсистему Логирование, и очистка регистра ВерсииОбъектов

UPD  31.10.2024

  • Исправление выявленных ошибок; Тестирование на SQL2008
  • Добавление выбора режима записи при откате объекта к предыдущей точки истории: — в обычном режиме; — в режиме ОбменДанными.Загрузка
  • При записи объекта (СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей), при наличии в дополнительных свойствах объекта свойства "НеРегистрировать", в зависимости от НеРегистрировать = Истина или НеРегистрировать = Ложь, событие, соответственно, будет зарегистрировано, или не будет зарегистрировано

Гарантия возврата денег

ООО «Инфостарт» гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

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

Для возврата оплаты просто свяжитесь с нами.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *