Topic: Ведение истории

Здравствуйте.
Можно ли в этой замечательной программе организовать ведение истории изменений?
Например есть база блоков, хотелось бы вести историю перемещений, замен и проч.

Re: Ведение истории

Приветствую,


можно с помощью скриптов, пожалуйста, скачайте этот проект в качестве примера

Post's attachments

Attachment icon Employees logs.zip 8.04 kb, 755 downloads since 2014-11-11 

Dmitry.

Re: Ведение истории

DriveSoft wrote:

можно с помощью скриптов, пожалуйста, скачайте этот проект в качестве примера

Дмитрий! А если в моём проекте основных гридов три? Мне кажется, что журнал всё равно можно сделать один? Ведь значения пишуться в другую таблицу ( у Вас это logs), и в неё можно собрать все необходимые колонки из трёх гридов?

Не боги горшки лепят!

Re: Ведение истории

kunar80
К сожалению не вспомню сходу ваш проект )
но думаю в любом случае можно )

Dmitry.

Re: Ведение истории

DriveSoft wrote:

kunar80
К сожалению не вспомню сходу ваш проект )
но думаю в любом случае можно )

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

Не боги горшки лепят!

6 (edited by kunar80 2014-11-16 11:07:39)

Re: Ведение истории

kunar80 wrote:

А если в моём проекте основных гридов три? Мне кажется, что журнал всё равно можно сделать один? Ведь значения пишуться в другую таблицу ( у Вас это logs), и в неё можно собрать все необходимые колонки из трёх гридов?

Работает. Но проблема с ID. В logs записал id_doc. В скрипте: sDoc1ID, sDoc2ID и sDoc3ID. sDoc1ID работает правильно, а sDoc2ID и sDoc3ID пишут значение "-1" на любую операцию.
Впрочем, думаю, что мне от ID лучше вообще отказаться, так как у меня учитываются документы, каждый из которых имеет свой собственный номер.  И проблема отпадёт сама собой.

Не боги горшки лепят!

Re: Ведение истории

Хочу прикрутить историю изменений к своему проекту. Надо чтобы отображалось старое значение и новое. Ну и соответственно кто внес. Подарите пример, пожалуйста.

8 (edited by Serhij 2014-11-17 17:22:42)

Re: Ведение истории

Владислав Косяков wrote:

Хочу прикрутить историю изменений к своему проекту. Надо чтобы отображалось старое значение и новое. Ну и соответственно кто внес. Подарите пример, пожалуйста.

У себя я сделал вход в программу по логину (у меня без пароля) на основе проекта из этой темы: http://myvisualdatabase.com/forum/viewtopic.php?id=649. В ней есть и мой проект.
Там имеется переменная sUser, в которую сохраняется логин вошедшего пользователя. Она объявлена в самом начале всего скрипта.
В начале скрипта я также объявил переменную sLastActionForm: string;, которая используется для определения действия (новая запись, показать запись); переменную sEditUserOld: string;, в которую записывается старое значение и переменную sEditUserNew: string;, куда записывается новое значение.
Для формы редактирования записи я добавил событие OnShow:

procedure Form6_OnShow (Sender: string; Action: string);
begin
   sLastActionForm := Action;
end;

Для грида, из которого берутся записи для редактирования, я добавил событие OnCellClick:

procedure Form4_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
   var
   sID: string;
begin
   sID := IntToStr(Form4.TableGrid1.dbItemID); // по клику на записи получаем её идентификатор
   sEditUserOld := SQLExecute ('SELECT name FROM user WHERE id = '+ sID); // используя полученный идентификатор, вытягиваем из базы нужное значение
end;

На форме редактирования записи для кнопки я созал событие OnAfterClick:

procedure Form6_btnSaveEditedUser_OnAfterClick (Sender: string);
   var
   sCurrentUser: string;
   sCurrentDate: string;
   sOperation: string;
begin
   sCurrentUser := '"' + sUser + '"'; // записываем логин пользователя
   sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:mm:ss.000', now) + '"'; // записываем текущую дату и время
   sEditUserNew := Form6.Edit1.Text; // записываем старое значение
   if sLastActionForm = 'ShowRecord' then sOperation := 'Змінено ім''я користувача з ' + sEditUserOld + ' на ' + sEditUserNew; // записываем результат операции

   SQLExecute ('INSERT INTO actionlog (user, operation, date) VALUES ('+ sCurrentUser +',"'+ sOperation +'",'+ sCurrentDate +')'); // записываем всё в таблицу лога
end;