Администрирование · 11 мин
Как узнать, кто открыл форму в 1С
Как определить, какой пользователь открыл форму в 1С: журнал регистрации, технологический журнал, отладчик, расширенные настройки. Пошаговые инструкции для администратора и разработчика.
Вопрос «кто открыл форму» возникает в двух типовых ситуациях: когда нужно найти виновника изменения данных или блокировки, и когда разработчик отлаживает обработчики открытия и хочет понять, откуда именно вызвана форма. Встроенной кнопки «показать, кто открыл» в 1С нет, но задача решается штатными средствами: журналом регистрации, технологическим журналом сервера и отладчиком конфигуратора.
Важно сразу разделить два разных смысла вопроса. Первый — «какой пользователь открыл форму документа или справочника в клиентском приложении». Второй — «какой код в конфигурации программно открыл эту форму» (например, из обработчика команды или подписки на событие). Инструменты для этих задач разные, и ниже они разобраны отдельно.
Учтите ограничение: платформа 1С по умолчанию не пишет в журнал регистрации событие «открытие формы». Такое событие появляется только при включении расширенных настроек журнала либо если разработчик сам добавил запись через метод ЗаписьЖурналаРегистрации. Поэтому первый шаг — проверить, что и как регистрируется в вашей базе.
Определите, что именно вы хотите узнать
Прежде чем настраивать инструменты, сформулируйте задачу точно. Если нужно установить, какой сотрудник открывал конкретный документ и, возможно, что-то в нём менял, — это задача аудита действий пользователей, и основной инструмент здесь журнал регистрации. Если нужно понять, откуда в коде открывается форма (например, форма выбора открывается «не оттуда»), — это задача отладки, и решается она точками останова и стеком вызовов.
Отдельный частный случай — блокировки: форма не открывается или документ не записывается, потому что его держит другой пользователь. Здесь вопрос «кто открыл» решается через консоль кластера или список активных сеансов, а не через журнал.
Как выбрать инструмент
Журнал регистрации: настройка регистрации событий
Журнал регистрации открывается из конфигуратора: меню «Администрирование» — «Журнал регистрации». В клиентском приложении в типовых конфигурациях он доступен через раздел администрирования, если у пользователя есть права. По умолчанию регистрируются ошибки, предупреждения, вход и выход пользователей, но не каждое обращение к данным.
Чтобы видеть обращения к объектам, откройте настройку журнала: в конфигураторе «Администрирование» — «Настройка журнала регистрации». Установите режим «Регистрировать все события» или выборочно включите события группы «Доступ к данным» и «Изменение данных». После этого в журнале появятся записи вида «Данные. Доступ» с указанием пользователя, объекта метаданных и представления данных.
Имейте в виду: событие доступа фиксирует чтение данных объекта, а не сам факт открытия окна формы. На практике это почти эквивалентно — при открытии формы документа платформа читает объект, и в журнале появится запись с именем пользователя, временем и объектом. Но если форма открылась и закрылась без чтения данных (например, новая форма без заполнения), записи может не быть.
Как отфильтровать журнал и найти нужное событие
Откройте журнал регистрации и нажмите кнопку «Отбор». Укажите период — чем уже интервал, тем быстрее поиск. В поле «Пользователь» можно сразу задать конкретного сотрудника, если есть подозрение. В поле «Данные» укажите объект: например, конкретный документ или элемент справочника. В отборе по событиям выберите «Доступ к данным» и «Изменение данных».
Результат — список записей, где видно: дату и время, имя пользователя, компьютер, имя приложения (тонкий клиент, веб-клиент, фоновое задание), событие и представление данных. По колонке «Компьютер» дополнительно видно, с какого рабочего места выполнялось действие, что полезно, если за одной учётной записью работают несколько человек.
Проверка результата простая: если в отфильтрованном списке есть запись о доступе к нужному объекту в нужное время — пользователь найден. Если записей нет, либо событие не регистрировалось (проверьте настройки журнала), либо обращения к объекту действительно не было в указанный период.
- 1Включите регистрацию событий доступа к данным в настройках журнала
- 2Дождитесь повторения ситуации или работайте с уже накопленными записями
- 3Откройте журнал регистрации и задайте отбор по периоду и объекту
- 4Изучите записи: пользователь, компьютер, время, тип события
- 5Сопоставьте время с моментом инцидента и зафиксируйте результат
Технологический журнал и анализ сеансов
Когда журнала регистрации недостаточно — например, нужно отследить обращения на уровне запросов к СУБД или события, которые платформа не пишет в журнал, — используется технологический журнал (ТЖ). Он настраивается через файл logcfg.xml, который размещается в каталоге конфигурации сервера 1С. В нём задаются события, которые нужно фиксировать, и каталог для дампов логов.
Для задачи «кто открыл форму» в ТЖ полезны события DBMSSQL или DBPOSTGRS (запросы к базе), а также события контекста. Анализ ТЖ трудоёмок: файлы большие, формат текстовый, поэтому подход оправдан, когда других вариантов нет — например, журнал регистрации был очищен или событие произошло до включения регистрации.
Если форма заблокирована прямо сейчас, быстрее всего посмотреть активные сеансы. В клиент-серверном варианте откройте консоль кластера серверов 1С, выберите базу и пункт «Сеансы» — там видны пользователь, компьютер, время начала сеанса и последняя активность. В файловом варианте в типовых конфигурациях есть функция «Активные пользователи» в разделе администрирования.
Отладчик: как узнать, откуда программно открыта форма
Если вопрос звучит как «кто (какой код) открывает эту форму», нужен отладчик. Откройте конфигуратор, включите отладку (меню «Отладка» — «Начать отладку» или подключение к уже работающему сеансу), затем в модуле формы поставьте точку останова в обработчике ПриСозданииНаСервере. Когда форма откроется, выполнение остановится, и вы увидите текущего пользователя (функция ПользователиИнформационнойБазы.ТекущийПользователь) и параметры, с которыми форма вызвана.
Чтобы узнать, откуда произошёл вызов, откройте стек вызовов (окно доступно в режиме останова). В нём видна цепочка: какая команда, обработчик или подписка инициировали открытие. Это особенно полезно, когда форма открывается неожиданно — например, из общей команды, обработчика ожидания или расширения конфигурации.
Дополнительно в обработчике ПриСозданииНаСервере доступны Параметры формы: по ним видно, с каким ключом, отбором или режимом открытия вызвана форма. Это помогает отличить программное открытие (с параметрами) от интерактивного открытия пользователем из списка.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаписьЖурналаРегистрации("ОткрытиеФормы",
УровеньЖурналаРегистрации.Информация,
Метаданные.Документы.РеализацияТоваровУслуг,
,
"Источник: " + ИмяФормы);
КонецПроцедурыПрограммное логирование открытий через расширение
Если аудит открытий нужен постоянно, а нагружать журнал регистрации полной регистрацией нежелательно, добавьте точечную запись через расширение конфигурации. Создайте расширение, заимствуйте нужную форму и в обработчике ПриСозданииНаСервере добавьте вызов ЗаписьЖурналаРегистрации с именем пользователя, объектом и временем. Платформа подставит пользователя автоматически — в тексте события достаточно указать контекст.
Плюс подхода — вы регистрируете только нужные формы и не раздуваете журнал. Минус — доработка требует аккуратности: ошибка в обработчике ПриСозданииНаСервере приведёт к тому, что форма вообще не откроется. Поэтому изменения тестируйте на копии базы, а запись в журнал оборачивайте в попытку-исключение, чтобы сбой логирования не мешал работе пользователей.
Проверка результата и ограничения методов
Надёжный признак того, что метод сработал: вы получили запись (или остановку отладчика), где одновременно видны пользователь, время и конкретный объект. Если виден только пользователь без объекта — проверьте отбор по данным. Если виден объект, но пользователь указан как фоновое задание — обращение выполнял регламент, а не человек, и искать нужно инициатора задания.
Ограничения принципиальные: задним числом восстановить, кто открывал форму, можно только если в тот момент велась регистрация. Ни журнал регистрации в стандартном режиме, ни платформа без настройки историю просмотров не хранят. Поэтому если аудит просмотров критичен (например, для персональных данных), настройку регистрации нужно выполнять заранее, а не после инцидента.
Как проверить результат
Есть событие доступа с пользователем, временем и объектом
Записей нет или событие без привязки к данным
Видна цепочка вызовов до открытия формы
Стек пуст или отладка не подключена к нужному сеансу
Сеанс пользователя активен, видно компьютер и время начала
Сеансов нет — пользователь уже вышел, смотрите журнал
Частые вопросы
Можно ли узнать, кто открыл форму вчера, если ничего не настраивалось?
Практически нет. Стандартный журнал регистрации не фиксирует просмотры, поэтому без предварительного включения регистрации доступа к данным историю открытий восстановить нельзя. Косвенно помогают только события изменения данных, если пользователь не просто смотрел, а записывал объект.
Чем отличается «Автор» документа от пользователя, открывшего форму?
Автор — это пользователь, создавший объект, он сохраняется в реквизите и не меняется при просмотрах. Открыть форму мог любой сотрудник с правами на чтение, и этот факт в самом документе не отражается — только в журнале регистрации при соответствующей настройке.
Как узнать, кто держит блокировку объекта прямо сейчас?
В клиент-серверном варианте откройте консоль кластера серверов 1С и посмотрите список сеансов и блокировок по нужной базе. В файловом варианте используйте функцию «Активные пользователи» в разделе администрирования типовой конфигурации.
Можно ли определить, с какого компьютера открывали форму?
Да, если событие зарегистрировано: в журнале регистрации у каждой записи есть колонка «Компьютер», а в списке сеансов консоли кластера видно имя рабочей станции или адрес клиента. Для веб-клиента фиксируется адрес веб-сервера, что менее информативно.
Замедлит ли работу базы включение регистрации всех событий?
На базах с интенсивной работой — да, рост журнала и дополнительные записи дают нагрузку. Безопаснее включать полную регистрацию на ограниченный период расследования либо использовать точечное логирование через расширение только для нужных форм.
Как понять, что форму открыл код, а не пользователь?
В отладчике посмотрите параметры формы в ПриСозданииНаСервере: программное открытие обычно передаёт ключ, отбор или специальные параметры. В журнале регистрации обращения фоновых заданий помечены соответствующим именем приложения вместо клиентского.
Что важно запомнить
Платформа 1С не хранит историю открытий форм по умолчанию. Для аудита действий пользователей заранее включите регистрацию доступа к данным в журнале регистрации, для анализа программных вызовов используйте отладчик со стеком вызовов, а текущие блокировки смотрите через список сеансов. Точечное логирование через расширение — компромисс между полнотой данных и нагрузкой на базу.