|
v8: Юзер редактирует Регистр сведений. Непериодический. Узнать, что и на что он менял. | ☑ | ||
---|---|---|---|---|
0
AF
29.03.12
✎
14:24
|
Сломал голову... Существует некий регистр сведений. Непериодический. Независимый. В нем записи<>0. В какой то момент юзер редактирует этот регистр. Причем из многих мест, документов, справочников, обработок...
Необходимо узнать, что было до того как, и что стало после того как, и эти данные записать в отдельный регистр сведений. Не спрашивайте меня, почему сделано так. Сделано и все. Можно во все формы, где это событие может быть, привинтить процедуру, но это грустно и долго. В модуле набора записей без проблем читаю первичные данные, и что пишется в момент записи. Проблема в том, что первичные данные, если я и запишу, то в момент записи эти первичные данные = неопределено, так как для записи открывается новая копия модуля набора записей и в ней уже первичных данных нет... Хочется изящного и простого решения... |
|||
1
vicof
29.03.12
✎
14:25
|
слямзи с УПП Версионирование
|
|||
2
Jstunner
29.03.12
✎
14:26
|
подписка на событие перед записью рс
|
|||
3
mikecool
29.03.12
✎
14:27
|
ПередЗаписью и ПриЗаписи у модуле набора записей
|
|||
4
AF
29.03.12
✎
14:27
|
(1) нету... ((( Может пример? Или советы...?
|
|||
5
rotting
29.03.12
✎
14:27
|
(0) сохрани в первоначальные данные в глобальную переменную
|
|||
6
AF
29.03.12
✎
14:27
|
(3) не катит.
|
|||
7
AF
29.03.12
✎
14:28
|
(5) А если пользователей х? х переменных? )))))))))
|
|||
8
Jstunner
29.03.12
✎
14:28
|
(6) катит.
|
|||
9
aka AMIGO
29.03.12
✎
14:31
|
изячно будет сравнить с локальной копией рабочей базы, обновляемой 1 раз в день/месяц/квартал/год..
|
|||
10
Jstunner
29.03.12
✎
14:33
|
после каждой записи в РС делать полную выгрузку базы
|
|||
11
Maxus43
29.03.12
✎
14:33
|
подписки катят, нефиг
|
|||
12
vde69
29.03.12
✎
14:34
|
(6) катит
Процедура ПередЗаписьюРегистровПравДоступаПередЗаписью(Источник, Отказ, Замещение) Экспорт УстановитьПривилегированныйРежим(Истина); Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Источник.ДополнительныеСвойства.Удалить("ОбновитьДоступ"); Источник.ДополнительныеСвойства.Удалить("ТаблицаШтатныхЕдиниц"); ТипЗначенияИсточника = ТипЗнч(Источник); МетаданныеРегистра = Метаданные.НайтиПоТипу(ТипЗначенияИсточника); Если Источник.Модифицированность() Тогда // тут нужно еще проверку на типы изменяемых данных Если МетаданныеРегистра.Имя = "ШтатноеРасписание" Тогда Если НужнаЗапись Тогда Источник.ДополнительныеСвойства.Вставить("ОбновитьДоступ", Истина); Источник.ДополнительныеСвойства.Вставить("ТаблицаШтатныхЕдиниц", ТаблицаШтатныхЕдиниц); КонецЕсли; Процедура ПриЗаписиРегистровПравДоступаПриЗаписи(Источник, Отказ, Замещение) Экспорт УстановитьПривилегированныйРежим(Истина); Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбновитьДоступ = Ложь; Источник.ДополнительныеСвойства.Свойство("ОбновитьДоступ", ОбновитьДоступ); ТаблицаШтатныхЕдиниц = Ложь; Источник.ДополнительныеСвойства.Свойство("ТаблицаШтатныхЕдиниц", ТаблицаШтатныхЕдиниц); ТипЗначенияИсточника = ТипЗнч(Источник); МетаданныеРегистра = Метаданные.НайтиПоТипу(ТипЗначенияИсточника); Если ОбновитьДоступ = Истина Тогда //Попытка // Для каждого эл Из ТаблицаШтатныхЕдиниц Цикл // // запишем в очередь обновления ролевого доступа // Рег = РегистрыСведений.ОчередьОбновленияПрав.СоздатьМенеджерЗаписи(); // Рег.ШтатнаяЕдиница = эл.ШтатнаяЕдиница; // Рег.Активность = Истина; // Рег.Записать(Истина); // КонецЦикла; //Исключение // Отказ = Истина; //КонецПопытки; // КонецЕсли; УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры |
|||
13
AF
29.03.12
✎
14:38
|
(12) пока не понял.
|
|||
14
Maxus43
29.03.12
✎
14:40
|
В подписке Перед Записью - можно узнать что "было" и что записывается в данный момнент
|
|||
15
AF
29.03.12
✎
14:42
|
Доступные процедуры в модуле..
Процедура ПередЗаписью(Отказ, Замещение) КонецПроцедуры Процедура ПриЗаписи(Отказ, Замещение) КонецПроцедуры Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) КонецПроцедуры |
|||
16
Maxus43
29.03.12
✎
14:43
|
(15) мать-перемать) в Регистре самом "Перед Записью"
|
|||
17
AF
29.03.12
✎
14:44
|
(16) Ага, я тоже так возрадовался... Да рановато. В этой хне пусто. Регистр уже пустой.
|
|||
18
vde69
29.03.12
✎
14:45
|
(15) делаешь 2 подписки, одна перед записью, другая при записи, цепляешь их к процедурам в общем модуле (12)
в процедуре ПередЗаписьюРегистровПравДоступаПередЗаписью сравниваешь что было и что стало и необходимый результат цепляешь в дополнительныеСвойства дальше в процедуре ПриЗаписиРегистровПравДоступаПриЗаписи читаешь дополнительныеСвойства и что-то делаешь |
|||
19
AF
29.03.12
✎
14:46
|
Причем я его пытался читать и модулем, и запросом... КоличествоЗаписей()=0
|
|||
20
vde69
29.03.12
✎
14:46
|
(17) LOL
смотри у меня есть фишка Если Источник.Модифицированность() Тогда |
|||
21
Maxus43
29.03.12
✎
14:47
|
(17) первый раз оттуда удаляются записи - там пусто, но сделав запрос или прочитав набор записей по данному отбору - увидиш что "было".
а когда в перед записью не пусто - то это что "сейчас пишет". (19) не верю, отбор ставь номральный в запросе |
|||
22
AF
29.03.12
✎
14:53
|
Т.е иначе говоря фигачить промежуточный регистр...
(21) Редактируемый вид характеристики - статус. Этот запрос Перед записью с отбором по виду характеристик количество()=0 Без отбора - все характеристики, кроме статуса. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СписокХарактеристик.ВидХарактеристики, | СписокХарактеристик.ЗначениеХарактеристики |ИЗ | РегистрСведений.СписокХарактеристик КАК СписокХарактеристик |ГДЕ | СписокХарактеристик.Владелец = &Владелец"; |
|||
23
AF
29.03.12
✎
14:54
|
(20) Нет у меня Источник. Допустимые процедуры и переменные модуля выше.
|
|||
24
AF
29.03.12
✎
15:01
|
Может я и надоел, но все таки...
|
|||
25
Maxus43
29.03.12
✎
15:02
|
не понял. в пед записью регистра у ЭтотОбъект есть отбор, отбор по измерениям. Точно такой же отбор надо в запросе устанавливать. Чудес не бывает, в перед записью запросом вытаскивается всё нормально
|
|||
26
AF
29.03.12
✎
15:08
|
(25) Да, вытаскивается и валю все в таблицу значений. А потом, когда я ПередЗаписью заглядываю в эту ТЗ, там пусто...
|
|||
27
vde69
29.03.12
✎
15:14
|
(26) ты читать умеешь? в (18) про дополнительные свойства объекта читал?
|
|||
28
Maxus43
29.03.12
✎
15:19
|
(26) вот прям заставил меня проверить...
в самом регистре: Процедура ПередЗаписью(Отказ, Замещение) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтветственныеЛица.СтруктурнаяЕдиница, | ОтветственныеЛица.ФизическоеЛицо |ИЗ | РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица |ГДЕ | ОтветственныеЛица.СтруктурнаяЕдиница = &СтруктурнаяЕдиница"; Запрос.УстановитьПараметр("СтруктурнаяЕдиница", ЭтотОбъект.Отбор.СтруктурнаяЕдиница.Значение); Результат_ЧтоБыло = Запрос.Выполнить().Выгрузить(); Сообщить(Результат_ЧтоБыло.Количество()); КонецПроцедуры заходит туда 2 раза, первый раз - удаление записи, запрос возвращает что БЫЛО до этого. 2-й раз - сама запись, в ЭтотОбъект там Что СТАЛО, запрос возвращает пусто. Всё правильно. |
|||
29
AF
29.03.12
✎
15:40
|
(28) Я пошел этим же путем. Тока в шапку добавил...
Перем ТЗ; Процедура ПередЗаписью(Отказ, Замещение) Если ЭтотОбъект.Количество()>5 (на самом деле больше..., но какая разница...) ТЗ.Колонки.Добавить... и т.д. и т.п... в ТЗ я пишу все. КонецЕсли; КонецПроцедуры Так как количество записей получаемых разное, то второй раз ТЗ не заполняется И в этот момент я отлавливаю, что стало..., заглядываю в ТЗ... а ТЗ = неопределено. Т.е ТЗ сбрасывается... Пробовал ТЗ присваивать значение 10. Для теста. И в отладчике вижу: ТЗ=Неопределено. (до присвоения) ТЗ=10 (после присвоения) ТЗ=неопределено (при записи). И действительно, не поспоришь... заходит туда 2 раза, первый раз - показывает что было, второй раз ничего не показывает. И сохранить, что показывал я не могу... |
|||
30
vde69
29.03.12
✎
15:46
|
>>>И сохранить, что показывал я не могу...
четвертый раз говорю ДополнительныеСвойста объекта |
|||
31
Maxus43
29.03.12
✎
16:17
|
когда получил ТЗ со старыми данными - тогда их и записывай, нафига их пытаться передать куда-то, когда заходит во 2-й раз - там ТЗ уже другая.
|
|||
32
vde69
29.03.12
✎
16:19
|
(31) за тем, что бы
1. сравнить и писать только разность 2. записывать только в конце (чего зря писать если потом будет откат транзакции?) |
|||
33
КМ155
29.03.12
✎
16:20
|
(29) Процедура ПередЗаписью(Отказ, Замещение)
ТЗ=ЭтотОбъект.Выгрузить(); ЭтотОбъект.ДополнительныеСвойства.Вставить("НаборПередЗаписью",ТЗ); КонецПроцедуры |
|||
34
wladimir90
29.03.12
✎
16:23
|
Реквизит Контрагент и рядом - СтарыйКонтрагент. Ну типа того.
|
|||
35
Maxus43
29.03.12
✎
16:26
|
ок ок, доп свойства юзать
|
|||
36
Фауст
29.03.12
✎
16:26
|
Сделай регистр периодическим
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |