Книга знаний

1С:Предприятие / v8

v8: Авторство обьектов в базе

Добавление в конфигурацию регистрацию, хранение и получение информации о том, кто и когда создавал и редактировал объекты.Автор статьи: PR
Последняя редакция №1 от 16.03.07
URL: http://kb.mista.ru/article.php?id=501

Ключевые слова: Автор, редактор, создание, пользователь


Часто клиент в лице генерального директора, главного бухгалтера или какого-либо другого представителя фирмы просит вещи, связанные с определением того, кто из пользователей и когда создал или отредактировал  какой-либо элемент справочника, документ, запись в регистре сведений и т. д.
Обычно это “разбор полетов” с поиском виновных или разделение прав на объекты по пользователям.
Также можно упомянуть об анализе активности пользователей, выявлении пиков и спадов работы пользователей, построение отчетов с использованием этой информации и т. д.

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

Что же требуется для того, чтобы, скажем, добавить в конфигурацию регистрацию, хранение и получение информации о том, кто и когда создавал объект и кто и когда его последним редактировал?
Для полноты картины предположим также, что у нас несколько распределенных баз данных, список которых хранится в плане обмена “РаспределенныеБазы”.

Итак, для этого нам потребуется несколько вещей.

Во-первых, создать справочник “Пользователи”, если его нет.

Во-вторых, настроить авторизацию пользователей, то есть при запуске программы присваивать параметру сеанса “ТекущийПользователь” элемент справочника “Пользователи”, соответствующий текущему пользователю в конфигураторе.
Пример такой авторизации можно посмотреть в статье Книга знаний: v8: Авторизация пользователей при входе в программу.
Параметр сеанса вместо глобальной переменной лучше использовать хотя бы по двум причинам, это возможность завязки RLS на текущем пользователе и возможность вместо

#Если Клиент Тогда

    ТекущийПользователь = глТекущийПользователь;
#Иначе

    ТекущийПользователь = глОпределитьТекущегоПользователя();
#КонецЕсли


писать

ТекущийПользователь = ПараметрыСеанса. ТекущийПользователь;


В-третьих, в каждый объект метаданных, для которого предполагается делать требуемую функциональность, добавить реквизиты “Автор” и “Редактор” типа “Справочник.Пользователи”, “ДатаСоздания” и “ДатаРедактирования” типа “Дата+Время” и “РаспределеннаяБазаСоздания” и “ РаспределеннаяБазаРедактирования” типа “ПланОбмена. РаспределенныеБазы”.

В-четвертых, в модуль каждого объекта в обработчик “ПередЗаписью” прописать заполнение этих реквизитов.
Делается это с помощью примерно такого кода

Если ЭтоНовый() Тогда
    Автор = ПараметрыСеанса.ТекущийПользователь;
    ДатаСоздания = ТекущаяДата();
    РаспределеннаяБазаСоздания = ПланыОбмена.РаспределенныеБазы.ЭтотУзел();
Иначе
    Редактор = ПараметрыСеанса.ТекущийПользователь;
    ДатаРедактирования = ТекущаяДата();
    РаспределеннаяБазаРедактирования = ПланыОбмена.РаспределенныеБазы.ЭтотУзел();
КонецЕсли;


Собственно, на этом все.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика