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