|
Временное хранение данных. Как реализовать? | ☑ | ||
---|---|---|---|---|
0
a2a4
22.02.17
✎
08:42
|
Решаю вопрос журналирования изменений регистра сведений. При удалении или создании нового проблем нет. Но при изменении встают вопросы. Есть желание писать типа {СтрокаОтбора}{ИзменяемыеЗначения}, то есть {"Период = "21.02.2017", МодельТС = "904702 ", ГСМ = "Бензин Аи 76""}{ЛинейнаяНорма=10(было)/11(новое)}.
Проблема в том, что изменение регистра сведений происходит за два этапа удаление + запись. При этом невозможно в один момент поймать и старое и новое значение. Как вариант пробовал ПоместитьВоВременноеХранилище пытаясь в адрес вставить строку отбора. Но выясняется что абы какую строку под адрес использовать нельзя. Есть ли варианты без создания специальных реквизитов в конфигурации временно хранить некоторые данные? |
|||
1
DrZombi
гуру
22.02.17
✎
08:46
|
(0) Так и пиши. свои длинные строки, вида {ИзменяемыеЗначения}, МодельТС, "Период. и т.д. сожми на коды: 1, 2, 3, 4, 5, 6 и т.д. нечего хранить лог в понятной форме для человека. Для этого отчеты есть :)
|
|||
2
Морозов Александр
22.02.17
✎
08:46
|
Регистр же документами изменяется? Перед проведением можно получить что было и что будет...
А вообще... владельцы больны. |
|||
3
osa1C
22.02.17
✎
08:48
|
(0) СоздатьНаборЗаписей() не пробовал?
|
|||
4
Fedor-1971
22.02.17
✎
08:49
|
(0) подписка на событие ПередУдалением? Новое у тебя есть, а старое ты удаляешь. Вопрос будет только в записи начального значения, но зачастую, хотят видеть кто, что и когда изменил, т.е. что было видим, а что стало есть на форме записи.
|
|||
5
a2a4
22.02.17
✎
08:53
|
(2) Регистр может меняться разными способами. И даже приходить по обмену. Поэтому универсально код вставить либо в подписку на событие (ПередЗаписью()) либо в модуль набора записей (ПередЗаписью()).
|
|||
6
a2a4
22.02.17
✎
08:58
|
Повторю. Изменение регистра сведений происходит в два этапа. На первом данные удаляются (то есть записывается регистр с пустыми значениями), на втором - записываются новые данные. На первом этапе можно получить ТОЛЬКО исходные данные. На втором этапе можно получить ТОЛЬКО новые, измененные данные.
|
|||
7
Fedor-1971
22.02.17
✎
09:09
|
(6) т.е. одна процедура делает запись пустого набора (что мешает перед записью пустого набора сохранить в лог то, что было целиком?). Другая, независимая, процедура в другой транзакции записи, пишет новые данные?
|
|||
8
a2a4
22.02.17
✎
09:21
|
(7) через какой лог предлагается работать? Это стандартное от 1С или самостоятельно огород городить?
В принципе в исходном сообщении задается вопрос - как временно хранить некоторые данные. |
|||
9
dmpl
22.02.17
✎
09:47
|
(8) В переменной. Ваш КЭП. Сделай глобальную структуру и клади туда наборы записей или ТЗ. Потом сравнивай сколько душе угодно.
|
|||
10
Serg_1960
22.02.17
✎
09:50
|
(0) "При этом невозможно в один момент поймать и старое и новое значение... Есть ли варианты... временно хранить некоторые данные?" :)
РегистрСведенийНаборЗаписей.ДополнительныеСвойства() Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события. Ваш к.э.п. |
|||
11
FIXXXL
22.02.17
✎
09:50
|
(9) или в ПовторногоИспользования
|
|||
12
RomanYS
22.02.17
✎
09:57
|
(0) Пиши в свой "журнал" удаление и запись, а потом постобработкой или при выводе в отчет объединяй их в "(было)/(новое)"
|
|||
13
a2a4
22.02.17
✎
10:02
|
(9)(12) крайний случай, забивать конфигурацию новыми объектами на каждый чих не есть хорошо (имхо)
(10) не работает - удаление (один объект), запись нового (уже другой объект). При удалении первого объекта удаляются и ДополнительныеСвойства. |
|||
14
DrWatson
22.02.17
✎
10:04
|
(13) а ты куда хочешь записывать лог, в журнал регистрации?
|
|||
15
a2a4
22.02.17
✎
10:08
|
(14) журналирование в журнал регистрации.
(11) можно подробнее |
|||
16
dmpl
22.02.17
✎
10:09
|
(13) 1 структура, которая даже не видна в метаданных что забивает?
|
|||
17
FIXXXL
22.02.17
✎
10:13
|
Функция ТекстОшибокНакопленныйПроцедуройСообщитьОбОшибке(ОчиститьМассивОшибок=Истина) Экспорт
ТекстО = ""; //считываем накопленные ошибки МассивО = ОбщегоНазначенияПовтИсп.МассивОшибокИзПроцедурыСообщитьОбОшибке(); //формируем текст ошибки Для Каждого ТекЭлемент из МассивО Цикл ТекстО = ТекстО + ТекЭлемент+Символы.ПС; КонецЦикла; //если надо, зачищаем считанное Если ОчиститьМассивОшибок Тогда МассивО = ОбщегоНазначенияПовтИсп.МассивОшибокИзПроцедурыСообщитьОбОшибке(); МассивО.Очистить(); КонецЕсли; Возврат ТекстО; КонецФункции Функция МассивОшибокИзПроцедурыСообщитьОбОшибке() Экспорт //при каждом вызове возвращается уже накопленный массив ошибок, если не было вызова ОбновитьПовторноИспользуемыеЗначения() //или с последнего обращения к этой процедуре не прошло более 20 минут //или массив не был считан с очисткой Возврат Новый Массив(); КонецФункции |
|||
18
FIXXXL
22.02.17
✎
10:13
|
(15) см (17)
|
|||
19
FIXXXL
22.02.17
✎
10:14
|
соответственно в любом месте пишем
МассивОшибок = ОбщегоНазначенияПовтИсп.МассивОшибокИзПроцедурыСообщитьОбОшибке(); МассивОшибок.Добавить(ТекстСообщения); |
|||
20
a2a4
22.02.17
✎
10:31
|
(16) сегодня нужно журналирование, завтра еще что-нибудь, послезавтра нужно третье - если каждый раз создавать новые объекты, то вскоре получите конфигурацию с кучей редкоиспользуемой хрени. Поэтому, первоначально рассматриваю варианты с минимальными изменениями в конфу. (В текущей конфигурации до сих пор разгребаю дерьмо от одних деятелей, хотя прошло более 5 лет).
|
|||
21
dmpl
22.02.17
✎
10:43
|
(20) Ну тогда доказывайте, что им это не нужно, раз не хотите писать
P.S. Вместо структуры можно и соответствие использовать, тогда в качестве ключа можно ключ записи указывать. |
|||
22
Fedor-1971
22.02.17
✎
10:46
|
(20) Во на как.
Храни в XML вне конфигурации, логи в оперативном доступе ни кому не надо, сможешь их периодически удалять без ущерба для хранимых данных и логике конфигурации |
|||
23
h-sp
22.02.17
✎
10:49
|
(20) почему вы не можете взять значения регистра в 2 этапа? расшифруйте.
|
|||
24
a2a4
22.02.17
✎
10:57
|
(21) это мне нужно. Но также мне нужна конфигурация с которой МНЕ приятнее, удобнее и оптимальнее работать.
Ладно. Всем спасибо. Красиво сделать не получается. Буду тупо писать в журнал и при удалении и при записи. А при необходимости (которая будет весьма редкой) буду смотреть обе записи. |
|||
25
Serg_1960
22.02.17
✎
12:14
|
(13) "не работает - удаление (один объект), запись нового (уже другой объект). При удалении первого объекта удаляются и ДополнительныеСвойства." - "Да вы просто не умеет их готовить"(цы)
Это один и тот-же набор записей регистра и, следовательно, ДополнительныеСвойства - не удаляются. |
|||
26
a2a4
27.02.17
✎
15:38
|
(25) Я просто проверил на практике.
|
|||
27
a2a4
27.02.17
✎
15:45
|
Наткнулся на следующее v8: Странность при записи регистра сведений
там указывают что "при записи пустого набора в ПередЗаписью Модифицированность() ИСТИНА в случае чистого удаления, и ЛОЖЬ в случае замещения (второй вызов будет)". Но при программной работе с наборами записей все оказывается не все однозначно. Опять же погонял на практике. 1. Если удалять через Набор=РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей(); Набор.Отбор.ИмяОтбора.Установить(ЗначениеОтбора); Набор.Записать() то при этом Источник.Модифицированность()=ЛОЖЬ 2. Если изменять/удалять посредством Набор=РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей(); Набор.Отбор.ИмяОтбора.Установить(ЗначениеОтбора); Набор.Прочитать(); Набор.Удалить(ИндексЗаписи); Набор.Записать(); то по факту будет перезапись за один проход и при этом Источник.Модифицированность()=Истина |
|||
28
Serg_1960
27.02.17
✎
17:20
|
"то по факту будет перезапись за один проход" - нет.
Sorry, но эта тема (про двойной вызов обработчиков) - тот ещё старый рваный баян. v8: Регистр сведений: события ПередЗаписью и ПриЗаписи |
|||
29
Мимохожий Однако
27.02.17
✎
17:31
|
(0)В чём конечная цель и выигрыш?
|
|||
30
Лефмихалыч
27.02.17
✎
17:40
|
(0) избитая граблями тема. Необъектные данные не журналируются, т.к. нет технической возможности отличить изменение от добавления и от удаления.
Живи с этим |
|||
31
Вафель
27.02.17
✎
17:42
|
Вот эта штука умеет отслеживать изменения регистров
http://catalog.mista.ru/public/18588/ |
|||
32
Serg_1960
27.02.17
✎
20:37
|
Эээ... насчет избитых граблями :( красиво, кстати, сказано :) У меня версионировались (в прошедшем времени) некоторые регистры сведений. Те, к которым слишком много юзверей имели доступ и вокруг которых устраивали много склок и разборок. "У семи нянек дитя без глазу"(цы) - пришлось версионировать, чтобы всегда быть готовым ответить на вопросы "Что, где, когда".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |