Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Журнализация изменений документов (число прочтений - 7118 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Журнализация изменений документов
24. Ноября 2008 :: 12:44
Печать  
Встала тут задача анализа изменений документов: кто, когда и что именно в них менял.

Соответственно, смежные задачи:
- получение снимка документа на определенный момент времени
- анализ изменений документов по определенным критериям

Формат базы - SQL.
Может, кто-нибудь реализовывал или сталкивался с чем-нибудь подобным?
Задача, в принципе, довольно универсальная.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #1 - 24. Ноября 2008 :: 12:49
Печать  
Почему не сталкивались? работает...
Код
Выбрать все
//_____________________________________________________________________________
Функция глИзмененыРеквизиты(Конт)  Экспорт
	Вид = Конт.Вид();
	Если Конт.ДатаДок <> Конт.ТекущийДокумент().ДатаДок Тогда
	    Возврат 1;
	КонецЕсли;
	Для Н=1 По Метаданные.Документ(Вид).РеквизитШапки() Цикл
		Ид=Метаданные.Документ(Вид).РеквизитШапки(Н).Идентификатор;
		Если Конт.ПолучитьАтрибут(Ид)<>Конт.ТекущийДокумент().ПолучитьАтрибут(Ид) Тогда
			Возврат 1;
		КонецЕсли;
	КонецЦикла;
	Док = Конт.ТекущийДокумент();
	Если Док.КоличествоСтрок()<>Конт.КоличествоСтрок() Тогда
	    Возврат 1;
	КонецЕсли;
	Для Н=1 По Метаданные.Документ(Вид).РеквизитТабличнойЧасти() Цикл

		Конт.ВыбратьСтроки();
		Пока Конт.ПолучитьСтроку()=1 Цикл

			Док.ПолучитьСтрокуПоНомеру(Конт.НомерСтроки);

			Ид=Метаданные.Документ(Вид).РеквизитТабличнойЧасти(Н).Идентификатор;

			Если Конт.ПолучитьАтрибут(Ид)<>Док.ПолучитьАтрибут(Ид) Тогда
				Возврат 1;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Возврат 0;
КонецФункции //глИзмененыРеквизиты


//_____________________________________________________________________________
Процедура глРегистрацияИзменений(Конт) Экспорт
	Если Конт.Выбран() = 0 Тогда
	    Возврат;
	КонецЕсли;
	Если глИзмененыРеквизиты(Конт) = 0 Тогда
		Возврат;
	КонецЕсли;
КонецПроцедуры //глРегистрацияИзменений(Конт)
 

  
Наверх
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #2 - 24. Ноября 2008 :: 12:50
Печать  
А дальше, как фантазия подскажет...
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #3 - 24. Ноября 2008 :: 12:59
Печать  
toypaul когда-то делал.
Цитата:
Плагин ToySpy предназначен для настройки отслеживания изменений в базе данных 1С на платформе SQL Server. Под изменениями понимаются действия удаления, добавления, редактирования объектов базы данных – справочников, документов. С помощью специального отчета можно просмотреть список изменений, который включает в себя следующие данные: дата изменения, пользователь, компьютер, значения старых и новых реквизитов.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #4 - 24. Ноября 2008 :: 13:10
Печать  
trdm писал(а) 24. Ноября 2008 :: 12:49:
Почему не сталкивались? работает...

Какой знакомый код Улыбка
http://www.mista.ru/articles1c/hare/article.80.html
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Журнализация изменений документов
Ответ #5 - 24. Ноября 2008 :: 13:16
Печать  
trdm

Дим, а где это у тебя используется?
В ПриЗаписи?

Здесь ведь есть некая проблема: можно зарегистрировать изменения, а записи как таковой, например, не произойдет (не проведется/не запишется).

Конечно, можно продолжить изыскания и вытащить из 1C событие типа "ПослеЗаписи".
Если бы это получилось, можно было бы сделать более стабильное решение.

Вторая проблема - все это работает для интерактивных и принудительных регистраций.
Стоит забыться и изменения зарегистрированы не будут.
Именно в текущей задаче меня это не заботит, но тем не менее.

berezdetsky

О, спасибо.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #6 - 24. Ноября 2008 :: 13:33
Печать  
fez писал(а) 24. Ноября 2008 :: 13:10:
trdm писал(а) 24. Ноября 2008 :: 12:49:
Почему не сталкивались? работает...

Какой знакомый код Улыбка
http://www.mista.ru/articles1c/hare/article.80.html

гы...
вообще вытащил из конфигурации, которая была под рукой Улыбка
  
Наверх
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #7 - 24. Ноября 2008 :: 14:59
Печать  
kms писал(а) 24. Ноября 2008 :: 13:16:
Конечно, можно продолжить изыскания и вытащить из 1C событие типа "ПослеЗаписи".
Если бы это получилось, можно было бы сделать более стабильное решение.

У меня для документов работает эмулятор этого события, сделанный из ПриЗаписи() и ПослеОбновленияФормы() и ещё чего-то. Могу это дело выложить. Только скажи - пойдет ли оно тебе "как есть" (придется поработать напильником), или чтобы проще разбираться - вырезать сам эмуль?
Да. Событие у меня - ПослеУспешнойЗаписи() а не абы как Улыбка
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Журнализация изменений документов
Ответ #8 - 24. Ноября 2008 :: 15:06
Печать  
Пойдет, конечно.
Когда задача стоит - пойдет в любом виде. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Журнализация изменений документов
Ответ #9 - 24. Ноября 2008 :: 15:23
Печать  
berezdetsky писал(а) 24. Ноября 2008 :: 12:59:
toypaul когда-то делал.
Цитата:
Плагин ToySpy предназначен для настройки отслеживания изменений в базе данных 1С на платформе SQL Server. Под изменениями понимаются действия удаления, добавления, редактирования объектов базы данных – справочников, документов. С помощью специального отчета можно просмотреть список изменений, который включает в себя следующие данные: дата изменения, пользователь, компьютер, значения старых и новых реквизитов.


Достойный вариант, кстати, - для моей задачи.
Это как раз реализация системы, построенной на триггерах.
Отчеты, конечно, надо будет написать свои.
Но все желания, в принципе, по этой схеме реализуются.
Про проблемы (с производительностью, например) пока ничего сказать не могу.
Ну, подозреваю, что серьезных проблем в принципе быть не должно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #10 - 24. Ноября 2008 :: 15:53
Печать  
kms писал(а) 24. Ноября 2008 :: 15:06:
Пойдет, конечно.
Когда задача стоит - пойдет в любом виде. Улыбка

В общем, вот наборчик. По твоему вопросу - смотри файл класс_ПерехватФормыДокумент.txt.
Остальное бросил до кучи, чтоб контекст и вызовы проще понять было. Если вздумаешь заюзать КОП ДетекторИзменений - предупрездаю, там есть баг в подготовке данных изменения табличной части. С этим багом проработали год, поэтому пока не исправляю, думаю... (косяк в нумерации записей в таблице изменений, улетающей на SQL, лишний инкремент...)
  

dnp_s_com_cls.zip ( 17 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Dimitry
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 21. Апреля 2008
Re: Журнализация изменений документов
Ответ #11 - 25. Ноября 2008 :: 08:42
Печать  
Я решил эту задачу на триггерах, т.к. нужно было журнализировать изменения только 3-х типов документов. Анализ изменений производится отчетом. Скорость работы базы не изменилась. Если надо кину примером. Да и основной плюс - пользователь ни при каких обстоятельствах не сможет скрыть своих действий.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Журнализация изменений документов
Ответ #12 - 25. Ноября 2008 :: 10:35
Печать  
Dimitry писал(а) 25. Ноября 2008 :: 08:42:
Я решил эту задачу на триггерах, т.к. нужно было журнализировать изменения только 3-х типов документов. Анализ изменений производится отчетом. Скорость работы базы не изменилась. Если надо кину примером. Да и основной плюс - пользователь ни при каких обстоятельствах не сможет скрыть своих действий.

На шапку хорошо. а по табличной части?
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Журнализация изменений документов
Ответ #13 - 25. Ноября 2008 :: 11:28
Печать  
dnp

О, идея понятна.
Ну надо же, и правда какая элегантная эмуляция события ПослеЗаписи!
Я, правда, теперь намерен отправить ее в прошлое, если получится.

trdm

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

Под консолидацией я понимаю, например, обработку простой перестановки строк в документе.
Тут ведь зависит от задачи - мы можем считать это существенным либо несущественным.
Если это несущественно, то в твоей реализации это будет отсеиваться на этапе записи.
А в реализации на триггерах - на этапе анализа данных.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Журнализация изменений документов
Ответ #14 - 25. Ноября 2008 :: 11:28
Печать  
Dimitry писал(а) 25. Ноября 2008 :: 08:42:
Я решил эту задачу на триггерах, т.к. нужно было журнализировать изменения только 3-х типов документов. Анализ изменений производится отчетом. Скорость работы базы не изменилась. Если надо кину примером. Да и основной плюс - пользователь ни при каких обстоятельствах не сможет скрыть своих действий.

Конечно кидай, интересно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать