Расширенные логи изменения элементов инфоблока 1С-Битрикс

Довольно часто стоит задача узнать историю изменения полей и свойств элементов инфоблока, именно об этом статья ниже.

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

Для удобства подключения логов в настройках инфоблока я создал отдельное Пользовательское свойство типа "Да/Нет" и символьным кодом UF_ELEMENTS_CHANGED_LOGS. По умолчанию ставится "Нет".

Далее нужно реализовать обработчики событий на изменения элементов и их свойств. Для этого нам потребуются события: OnIBlockElementUpdate, OnIBlockElementSetPropertyValues, OnIBlockElementSetPropertyValuesEx

Реализуем в отдельном классе запись логов для изменения полей Элементов и отдельно для свойств, т.к. свойства могут сохранятся методами API и общие обработчики элементов там не отработают.

Регистрируем нужные обработчики событий (например в init.php)

\AddEventHandler('iblock', 'OnIBlockElementUpdate', ['ElementsChangedLogs', 'writeElementsLog']);
\AddEventHandler('iblock', 'OnIBlockElementSetPropertyValues', ['ElementsChangedLogs', 'writePropsLog']);

Возврат к списку