К статье
Практический материал

Администрирование · 12 мин

Как отследить событие в 1С: рабочие способы и инструкции

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

Отследить событие в 1С означает зафиксировать факт выполнения определённого действия: кто изменил документ, когда проводилась обработка, почему не сработал обмен данными или какой код выполняется при записи объекта. В зависимости от задачи используются разные инструменты — встроенный журнал регистрации, подписки на события, технологический журнал платформы и отладчик конфигуратора.

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

Ниже разобраны основные способы с конкретными шагами, условиями применения и ограничениями каждого подхода.

Какие события в 1С можно отслеживать

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

Вторая группа — события объектов конфигурации: ПередЗаписью, ПриЗаписи, ОбработкаПроведения, ПриКопировании и другие. Они срабатывают в момент выполнения операций с данными и перехватываются программно — через модули объектов или подписки на события.

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

Отслеживание действий через журнал регистрации

Журнал регистрации — основной инструмент, когда нужно узнать, кто и когда изменил документ, удалил элемент справочника или с какой ошибкой завершилось регламентное задание. В режиме предприятия он открывается через раздел «Администрирование» → «Обслуживание» → «Журнал регистрации». В конфигураторе путь тот же: меню «Администрирование» → «Журнал регистрации».

Без настройки отбора журнал показывает все события подряд, и найти нужное в большой базе практически невозможно. Нажмите кнопку «Отбор» и задайте условия: период, пользователя, вид события (например, «Данные. Изменение» или «Данные. Удаление»), а также конкретный объект метаданных. После применения отбора список сократится до релевантных записей.

Двойной щелчок по записи открывает детали: точное время, компьютер, сеанс, представление данных и комментарий. Для событий изменения данных в поле «Данные» отображается ссылка на объект — по ней можно перейти к документу или элементу справочника.

Как найти, кто изменил документ
  1. 1
    Откройте Администрирование → Обслуживание → Журнал регистрации
  2. 2
    Нажмите «Отбор» и укажите период, когда могло произойти изменение
  3. 3
    В поле «Событие» выберите «Данные. Изменение» и «Данные. Удаление»
  4. 4
    Укажите метаданные — нужный вид документа или справочника
  5. 5
    Примените отбор и откройте запись двойным щелчком: в поле «Пользователь» виден автор изменения
  6. 6
    Проверьте результат: колонка «Данные» содержит ссылку на изменённый объект

Настройка уровня регистрации событий

Объём записываемых событий настраивается: в конфигураторе откройте «Администрирование» → «Настройка журнала регистрации». Доступны варианты от регистрации только ошибок до регистрации всех событий, включая доступ к данным. Полная регистрация заметно увеличивает объём журнала и может снизить производительность, поэтому её включают временно — на период расследования инцидента.

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

Перехват событий объектов через подписки

Когда нужно не просто зафиксировать факт, а выполнить код при записи документа, проведении или удалении объекта, используются подписки на события. Это штатный механизм конфигуратора, который не требует изменения модулей типовых объектов — важно для конфигураций на поддержке.

Подписка создаётся в конфигураторе: в дереве конфигурации откройте ветку «Общие» → «Подписки на события» и добавьте новый объект. В свойствах укажите источник (например, «ДокументОбъект.РеализацияТоваровУслуг» или сразу несколько типов), событие («ПриЗаписи», «ПередЗаписью», «ОбработкаПроведения») и обработчик — процедуру в общем модуле.

Обработчик получает параметры события — обычно Источник, Отказ и другие, зависящие от типа события. Внутри можно проверять условия, писать сообщения, регистрировать изменения в собственном регистре или вызывать внешние системы. Пример простого обработчика, который фиксирует запись документа в журнале регистрации:

bsl
Процедура ПриЗаписиДокументаКонтроль(Источник, Отказ) Экспорт
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	ЗаписьЖурналаРегистрации("Контроль.ЗаписьДокумента",
		УровеньЖурналаРегистрации.Информация,
		Источник.Метаданные(),
		Источник.Ссылка,
		"Записан документ, сумма: " + Источник.СуммаДокумента);
КонецПроцедуры

Процедура-обработчик должна располагаться в общем модуле с установленными флагами «Сервер» (для серверных событий) и при необходимости «Вызов сервера». Если модуль не серверный, подписка на серверное событие просто не сработает — это одна из самых частых причин «молчащих» обработчиков.

Выбор события: ПередЗаписью или ПриЗаписи

Событие ПередЗаписью срабатывает до фиксации данных, объект ещё можно изменить или отклонить установкой Отказ = Истина. ПриЗаписи вызывается уже в транзакции записи, объект сохранён, но транзакцию ещё можно откатить. Для валидации и подмены значений используйте ПередЗаписью, для уведомлений и регистрации связанных изменений — ПриЗаписи.

Маршрут решения

Какой инструмент выбрать

Нужно узнать, кто и когда менял данныеИспользуйте журнал регистрации с отбором по событию и пользователю
Нужно выполнить код при записи или проведении объектаСоздайте подписку на событие с обработчиком в общем модуле
Есть ошибки СУБД, блокировки или медленные запросыВключите технологический журнал с нужными событиями
Нужно разово проследить логику выполнения кодаЗапустите отладку в конфигураторе с точками останова

Технологический журнал для низкоуровневых событий

Технологический журнал (ТЖ) — механизм платформы для фиксации низкоуровневых событий: запросов к СУБД, блокировок, взаимоблокировок, ошибок, длительных операций. По умолчанию он отключён и включается созданием конфигурационного файла logcfg.xml в каталоге conf сервера или каталоге платформы.

В файле logcfg.xml описываются события, которые нужно собирать, условия (фильтры) и каталог выгрузки. Например, для отслеживания взаимоблокировок включают событие TDEADLOCK, для анализа медленных запросов — DBMSSQL или DBPOSTGRS с ограничением по длительности. После изменения конфигурации журнал начинает писаться без перезапуска сервера — платформа подхватывает файл автоматически.

Файлы ТЖ текстовые и быстро растут: на загруженном сервере за час могут набегать гигабайты. Обязательно ограничивайте сбор фильтрами (по базе, пользователю, длительности) и задавайте срок хранения через параметр history в конфигурации. После завершения диагностики переименуйте или удалите logcfg.xml, чтобы остановить сбор.

Отладка кода для разового отслеживания

Если нужно понять, какой код выполняется при конкретном действии — например, почему не заполняется реквизит при записи документа, — быстрее всего воспользоваться отладчиком конфигуратора. Включите отладку: меню «Отладка» → «Начать отладку» или подключитесь к уже запущенному сеансу через «Отладка» → «Подключение».

Установите точки останова в предполагаемых местах: модуле объекта, подписках на события, общих модулях. Затем выполните действие в режиме предприятия — выполнение остановится на точке, и вы увидите стек вызовов, значения переменных и порядок прохождения кода. Так можно за несколько минут выяснить, какие обработчики реально срабатывают и в какой последовательности.

Для клиент-серверных баз отладка на сервере должна быть разрешена (параметр запуска сервера или настройка в консоли кластера). Если точка останова «не ловится», проверьте, что отлаживаете тот же сеанс и тот же режим — серверный код не остановится при подключении только к клиентскому приложению.

Проверка результата и типичные ошибки

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

Контрольные точки

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

Запись в журнале регистрации
Норма

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

Тревожный признак

Записи нет — проверьте уровень регистрации и отбор

Срабатывание подписки
Норма

Контрольное сообщение из обработчика выводится при записи объекта

Тревожный признак

Сообщения нет — проверьте серверный флаг модуля и источник подписки

Файлы технологического журнала
Норма

В указанном каталоге появляются файлы с нужными событиями

Тревожный признак

Каталог пуст — проверьте путь к logcfg.xml и синтаксис файла

Типичные ошибки
01
Подписка размещена в не-серверном общем модуле — обработчик серверного события не вызывается без сообщений об ошибке
02
Отбор в журнале регистрации слишком широкий — нужная запись теряется среди тысяч системных событий
03
Технологический журнал включён без фильтров и срока хранения — диск сервера переполняется
04
Поиск события ведётся в неправильной временной зоне — сеансовые записи кажутся «пропавшими»
05
В обработчике ПриЗаписи выполняется запись того же объекта — возникает рекурсия и зависание транзакции

Отдельная частая проблема — рекурсия в подписках: если в обработчике ПриЗаписи вызывается Записать() того же объекта, событие срабатывает повторно и цикл не завершается. Защищайтесь проверкой параметра объекта (например, ДополнительныеСвойства с признаком обработки) или используйте метод ОбменДанными.Загрузка там, где это допустимо.

Итог

Что важно запомнить

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

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

Можно ли отследить, кто просматривал документ, а не изменял его?

Штатно журнал регистрации фиксирует события доступа к данным только при включении соответствующего уровня регистрации («Данные. Доступ»). Это сильно раздувает журнал, поэтому механизм включают временно. Для постоянного контроля просмотров обычно реализуют собственную регистрацию через подписки или расширение.

Почему подписка на событие не срабатывает?

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

Как отследить события в файловой базе без конфигуратора?

Журнал регистрации доступен и в режиме предприятия через «Администрирование» → «Обслуживание». Технологический журнал для файловой базы включается размещением logcfg.xml в каталоге conf установленной платформы — конфигуратор для этого не обязателен.

Как найти причину взаимоблокировки?

Включите в logcfg.xml событие TDEADLOCK (и при необходимости TLOCK, TTIMEOUT) с выгрузкой в отдельный каталог. После повторения ситуации проанализируйте файлы: в событии фиксируются запросы и объекты, участвовавшие в блокировке. Сбор отключите сразу после диагностики.

Можно ли получать уведомления о событиях на почту?

Штатного механизма уведомлений из журнала регистрации нет. Практическое решение — подписка на событие или регламентное задание, которое периодически читает новые записи журнала через метод ВыгрузитьЖурналРегистрации и отправляет оповещения через ИнтернетПочта.

Влияет ли отслеживание событий на производительность?

Журнал регистрации на стандартном уровне влияет незначительно. Заметную нагрузку создают полная регистрация доступа к данным, технологический журнал без фильтров и тяжёлые обработчики в подписках, выполняющиеся в каждой транзакции записи.