Как зафиксировать время открытия и закрытия справочника в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Анализ задачи и выбор архитектурного решения

Прежде всего, проанализируем текущую структуру. Если у вас уже используется РегистрСведений с периодичностью, важно понимать, что периодический регистр фиксирует данные в привязке к моменту времени записи. Пытаться втиснуть «время открытия» в стандартный Период регистра — не лучшая идея, так как этот период занят моментом записи изменения объекта.

Для решения задачи мы предлагаем следующие шаги:

  1. Создать новые измерения в регистре сведений: ДатаОткрытия и ДатаЗакрытия. Это позволит хранить временные отметки независимо от факта изменения данных.
  2. Использовать переменные модуля формы для временного хранения даты открытия.
  3. Реализовать логику записи данных в обработчиках событий формы.

Реализация логики на стороне формы

Разберем процесс поэтапно. Нам потребуется переменная уровня модуля формы, чтобы «запомнить» момент, когда пользователь открыл справочник.

В модуле формы объявим переменную:

Перем ВремяОткрытия;

Далее, в процедуре ПриОткрытии (или ПриСозданииНаСервере) фиксируем момент запуска:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ВремяОткрытия = ТекущаяДатаСеанса();
КонецПроцедуры

Использование ТекущаяДатаСеанса() является предпочтительным, так как оно учитывает часовой пояс текущего пользователя, что делает отчеты по активности более точными.

Запись данных в регистр сведений

Теперь рассмотрим, как передать эти данные в регистр. Существует два основных подхода:

Вариант 1: Запись при сохранении объекта

Это самый надежный способ. Когда пользователь нажимает «Записать» или «Записать и закрыть», данные передаются на сервер. Вы можете передать переменную ВремяОткрытия в процедуру записи. Если вы хотите зафиксировать и время закрытия, его можно вычислить на сервере в момент завершения операции.


&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    // Поиск записи в регистре по ссылке на объект
    // Дозапись или создание новой записи с параметрами:
    // Объект, ДатаОткрытия, ДатаЗакрытия (ТекущаяДатаСеанса())
КонецПроцедуры

Вариант 2: Дозапись через поиск записи

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

Важные рекомендации по разработке

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

← На главную