Отслеживать изменения в регистрах сведений #578567


#0 by DCKiller
Задача следующая: необходимо реализовать что-то наподобие системы продвинутого контроля изменений пользователем значений независимых регистров сведений. Т.е. в истории должна фиксироваться информация о том, кто, когда и что изменил в регистре. Для фиксации этих действий будет предназначен в свою очередь спец. регистр сведений, сама фиксация изменений осуществляется по подписке на событие "ПроверкаЗаполнения". Проблема состоит в следующем: если пользователь что-либо меняет в записи регистра сведений, то как это отследить? Как при записи в историю изменений регистра определить, к какой именно записи регистра из зафиксированных в истории это изменение относится. По сути, речь идет о чем-то вроде УИДа для записей регистров сведений, по которому мы с этими записями при фиксации изменений в них в историю будем обращаться, но как реализовать такое решение? Создавать в каждом регистре сведений, чью историю изменений планируется фиксировать, отдельное измерение для хранения этого УИДа, слишком геморно. Есть еще варианты?
#1 by IamAlexy
в форме записи события нет типа призаписи?
#2 by Wobland
а если без формы?
#3 by Wobland
в модуле набора записей есть событие
#4 by DCKiller
Есть, но "Проверказаполнения" мне здесь больше подходит. Собственно, суть не в этом, потому что вид события, при котором это должно происходить, поставленной проблемы не решает.
#5 by DCKiller
Какое событие?
#6 by IamAlexy
сделай свою форму редактирования записи. в форме сделай свою кнопку сохранения на кнопку повесь что угодно.. проверки, регистрирование в подсистеме версионирования.. затем после всех проверок и регистраций пиши в базу.. в чем проблема?
#7 by smitru
А может задуматься над сутью задачи???? Какой смысл городить у НЕобъектных данных тот функционал, который есть у объектных???
#8 by DCKiller
Я, кажется, не совсем ясно выразил свой вопрос... Видишь ли, проблема как раз в "проверки, регистрирование в подсистеме версионирования.." и т.д. Как организовать эту проверку? Допустим, у нас есть регистр сведений "История", следующего состава: Измерения: ОбъектБазы - собственно наименование регистра сведений, изменения записей которого фиксируются Пользователь - кто изменил Ресурсы: Значение - новое значение поля регистра Понятно, что пользователь может изменить сразу несколько записей регистра. И как определить, какая именно запись была изменена? Смысл тот, что нужно фиксировать таким образом историю изменений записей регистров.
#9 by Wobland
ПриЗаписи событие. попадаешь туда, и делаешь, что надо. пост 8 не читал
#10 by Starhan
а пример, что считать изменением? например только изменение рессурса или добавление записей по одонму из измерений.?
#11 by DCKiller
Зря не читал. Там вся проблема изложена. Ищо раз. Изменение полей существующей записи, добавление новой записи, удаление записи. Ну понятное дело, что для вида изменений можно создать доп. измерение в регистре истории, куда заносить информацию о том, что это было: добавление, удаление или изменение записи.
#12 by Starhan
а регистр 1, несколько или любой. И откуда есть возможность его менять (из каких форм)? гм Подписка на событие перед записью и по каждой строке проверка. Есть запись, нет записи с каикими ресурсами запись.
#13 by catena
Проблема не в самой регистрации изменений, а в идентификации измененной записи. При изменении эл-та справочника, например, можно по УИД определить, что меняли. А в независимом РС нет.
#14 by Starhan
+ или при записи (не помню старые данные еще в базе или нет.) Потомучто перед записью может быть отказ. У тебя будет информация что юзер изменил регистр а на самом деле нет. А я так понял, что требуется именно понять изменили или нет. А сравнить текущее значение в наборе и старое значение в ресурсе по тем же измерениям - не проблема. что значит понять по уид что меняли? ) при изменении поля в справочнике у него меняется УИД? )))
#15 by DCKiller
Регистров несколько. Изменения м.б. как непосредственно из формы списка, так и из тех форм, где размещена таблица, имеющая тип РегистрСведенийСписок.<ЭтотРегистр>. С подпиской на событие я уже разобрался. См. , там проблема объяснена. Именно так! В этом и есть проблема.
#16 by Starhan
я ж те уже сказал по каждой строке в наборе записей ищешь по тем же измерениям строчку в регистре и сам определяешь изменеине.
#17 by Starhan
нормлаьно будет работать если там не 100 строк сразу меняют (в друг обраоткой есть какое то массовое заполнение)
#18 by DCKiller
Позже увидел :) А в каком событии получить набор записей до изменения? ПередЗаписью? Или лучше "проверка заполнения"?
#19 by МимохожийОднако
Посмотри версионирование в БСП.
#20 by Starhan
пкеред записью точно получишь и набор и старые данные еещ в базе будут, но есть проблема описанная в . Остальное надо проверять, не пробовал :)
#21 by МимохожийОднако
Проще дать запрет на изменение безответственным пользователям, чем городить регистрацию их действий.
#22 by DCKiller
Не катит. ПередЗаписью, если какое-то значение в записи уже меняли, он возвращает запись с этим новым значением :(
#23 by Reset
"Возникает перед выполнением записи набора регистра сведений. Процедура-обработчик вызывается после начала транзакции записи, но **до начала записи набора** регистра сведений" Обманывают?
#24 by DCKiller
Мля, у меня в событии ПередЗаписью параметр "Объект" содержит уже измененные значения полей!
#25 by Reset
У тебя каша в голове. Разумеется, объект содержит подготовленные к записи значения. Ты как раз и собираешься сравнивать их (новые) с существующими (еще не измененными).
#26 by Alex375
Вопрос: а как же получить исходные записи, которые были предоставлены пользователю для редактирования? :)
#27 by DCKiller
То есть чтобы получить старые значения, нужно создать другой набор записи с фильтром по измерениям нового отбора, и ттолько так сравнивать? наверно так? (см. выше)
#28 by Alex375
это при условии что у тебя был изначально отбор. А если такого отбора не было? Брать весь регистр, что-ли? Тоже не вариант, так как в это время другие могли уже поменять значения.
#29 by DCKiller
Ну тогда как? Повторяю, Объект содержит уже измененные поля записи регистра.
#30 by DCKiller
Странно, отбор по измерениям вроде есть в любом случае.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С