Мини-лог

Готовые скрипты, модули расширений, динамические библиотеки и вспомогательные утилиты.
Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Мини-лог

Сообщение Владимир » 08 май 2020, 00:42

Действие формы. Регистрирует создание/изменение записей пользователями.

Изображение

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


Совет: Как очистить лог конкретной записи?Показать
Можно добавить в форму кнопку и указать ей действие "Очитить поля", указав поле для хранения лога
Совет: Как очистить лог всех (или группы) записей?Показать
[Главное меню программы] -> ["Сервис"] -> ["Установить значение"]

Выбираем форму и поле, в выражении указываем null. При этом будут очищены значения для поля в записях, отобранных текущим фильтром.

Предыущая версия 1.0Показать
Изображение

Опции:

  • Поле ("Заметка") для сохранения лога - выбранное для логирования поле формы. При заполнении поля свыше размера - в очередной записи производится срез старых событий. Для более долгого логирования можно установить в настройках поля в дизайнере максимальный размер (2000 символов).
  • Заблокировать редактирование лога - рекомендуется "вкл" для несанкционированного изменения содержимого лога пользователем.
  • Строка лога о создании записи - текст (выражение) записываемый в лог при создании/дублировании записи. Если не заполнен - в лог записывается стандартное сообщение вида: "[Дата Время]: "Имя пользователя" создал запись"
  • Строка лога о редактировании записи - текст (выражение) записываемый в лог при редактировании записи. Если не заполнен - в лог записывается стандартное сообщение вида: "[Дата Время]: "Имя пользователя" изменил запись"

Код расширенияПоказать

Код: Выделить всё

{@module
author=Develop-Soft [ https://forum.develop-soft.ru ]
version=1.0
homepage=https://forum.develop-soft.ru/viewtopic.php?f=5&t=227
description=Мини-лог действий пользователя с записью<br><br>
Действия:<br>
1. Мини-лог<br><br>

Изменения:
v 1.0 от 08.05.2020 - выход первой версии
...
@}

{@action
Id=63286FD1-8DBD-43F2-BE00-EBE4104F817D
Target=form
OrigName=MiniLog
Name=Мини-лог
Group=Сервис
UI=
<ui>
  <component name="log" caption="Поле (&quot;Заметка&quot;) для сохранения лога"
   required=1 filter="TdxMemo"/>
  <checkbox name="lock_ediding" caption="Заблокировать редактирование лога"
   defaultvalue=1/>
  <expr name="expr_Insert" caption="Строка лога о создании записи (необязательно)"/>
  <expr name="expr_Edit" caption="Строка лога о редактировании записи (необязательно)"/>
</ui>
Description=
<strong class="text-strong">Действие формы. Регистрирует создание/изменение
записей пользователями.</strong><br>
<br>
<strong class="text-strong">Опции:</strong><br>
<ul><li><strong class="text-strong">Поле <em class="text-italics">("Заметка")
</em> для сохранения лога</strong> - выбранное для логирования поле формы. При
заполнении поля свыше размера - в очередной записи производится срез старых
событий. Для более долгого логирования можно установить в настройках
поля в дизайнере максимальный размер <em class="text-italics">(2000 символов)
</em>.</li>
<li><strong class="text-strong">Заблокировать редактирование лога</strong> -
рекомендуется "вкл" для несанкционированного изменения содержимого лога
пользователем.</li>
<li><strong class="text-strong">Строка лога о создании записи</strong> - текст
<em class="text-italics">(выражение)</em> записываемый в лог при
создании/дублировании записи. Если не заполнен - в лог записывается стандартное
сообщение вида: "[Дата Время]: "Имя пользователя" создал запись"</li>
<li><strong class="text-strong">Строка лога о редактировании записи</strong> -
текст <em class="text-italics">(выражение)</em> записываемый в лог при
редактировании записи. Если не заполнен - в лог записывается стандартное
сообщение вида: "[Дата Время]: "Имя пользователя" изменил запись"</li>
@}

var old_Self_OnBeforePost:TNotifyEvent;
    log:TdxMemo;
    InsertMsg,EditMsg:string;

procedure Self_OnBeforePost(Sender: TObject);
var Fm:TdxForm;
    SL:TStrings;
    Action:string;
begin
if old_Self_OnBeforePost<>nil then old_Self_OnBeforePost(Sender);
  Fm:=TdxForm(Sender);
  if not Fm.Modified then exit;
    begin
      Action := '['+VarToStr(Now)+']: ';
      if GetCurrentUser='' then
      Action := Action + '"Разработчик" ' else
      Action := Action + '"'+GetCurrentUser+'"';
      if Fm.State = dsEdit then
      Action := Action + 'изменил запись' else
      begin
        log.Clear;
        Action := Action + 'создал запись ';
      end;
      if Fm.State = dsEdit then
      begin
        if EditMsg<>'' then Action:=EditMsg
      end
      else
      begin
       if InsertMsg<>'' then Action:=InsertMsg;
      end;
      SL:=TStringList.Create;
      SL.Add(log.Text);
      SL.Insert(0,Action);
      log.Clear;
      log.Field.Value:=SL.Text;
      SL.Free;
      SL:=nil;
      Action:=#0;
      Fm:=nil;
      end;
end;

procedure MiniLog(LogField:string;Lock:integer; expr_Insert, expr_Edit:string);
begin
if Self.Params.ParamExists('LogRunOnce') then
begin
  MsgBox('Мини-лог','Действие допустимо подключать в одном экземпляре. '+
  'Отключите лишние в форме "'+Self.FormCaption+'"');
  exit;
end;
  Self.Params['LogRunOnce']:=1;
  log:=TdxMemo(Self.FindComponent(LogField));
  if Lock=1 then
  log.Readonly := true;
  old_Self_OnBeforePost :=  Self.OnBeforePost;
  Self.OnBeforePost := @Self_OnBeforePost;
  InsertMsg:=VarToStr(EvalExpr(expr_Insert,Self))
  EditMsg:=VarToStr(EvalExpr(expr_Edit,Self))
end; 


Скачать:
MiniLOG.epas
(4.86 КБ) 15 скачиваний

Демо

Скачать:
MiniLog_v2.0.epas
(6.46 КБ) 17 скачиваний
Поддержка проекта

Теги:

Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Мини-лог

Сообщение Владимир » 15 май 2020, 12:04

Обновление:
v 2.0 от 15.05.2020 - лог переработан для вывода в таблице. Убрано все
"ненужное", немного оптимизирован размер строки лога для хранения большего количества событий

Аватара пользователя
cordek
Сообщения: 63
Зарегистрирован: 14 фев 2018, 19:31

Мини-лог

Сообщение cordek » 15 май 2020, 18:29

Всё таки лог наверное лучше держать в отдельной форме...

Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Мини-лог

Сообщение Владимир » 15 май 2020, 21:14

Разумеется лучше. Поэтому расширяйка так и называется: "мини-лог" (а не "журнал регистрации 1С-Предприятие" :-) ).
Можно ограничить размер поля чтобы записывалось 5-7 последних событий и в ряде случаев этого достаточно (и не сильно "нагрузочно").

Ответить