|
Определить что объект изменился | ☑ | ||
---|---|---|---|---|
0
Franchiser
гуру
31.10.18
✎
18:40
|
Как быстро определить что объект изменился?
Есть загруженный документ, далее документ перезагружается, нужно перезаписать документ только в случае если в нем изменилось что-либо. Поможет ли здесь, например, хеш-функция? |
|||
1
Franchiser
гуру
31.10.18
✎
18:42
|
Сравнение реквизитов по ссылке и в объекте не предлагайте, про него знаю.
|
|||
2
Вафель
31.10.18
✎
18:43
|
проще по полям пробежаться.
ведб хэш функцию нужно было вычислять заранее |
|||
3
Franchiser
гуру
31.10.18
✎
18:48
|
(2) даже если есть табличная часть?
|
|||
4
palsergeich
31.10.18
✎
18:49
|
(3) И табличные части на вход хэш функции
Один из вариантов - сериализуете в XML и подаете на вход хэш функции |
|||
5
Cyberhawk
31.10.18
✎
18:57
|
Зачем это узнавать? Включи платформенную историю данныхили БСПшную историю изменений и спи спокойно.
|
|||
6
Franchiser
гуру
31.10.18
✎
18:57
|
(4) наверно это долго...
|
|||
7
Franchiser
гуру
31.10.18
✎
19:00
|
(5) хочу оптимизировать скорость перезагрузки документов. Сейчас для целостности документы все помечаются на удаление, затем записываются и проводятся. 0.3 сек пометка, 0.25 сек запись и проведение. Документов более 10 тыс.
|
|||
8
Cyberhawk
31.10.18
✎
19:01
|
(7) Зачем при регулярном обмене помечать на удаление, когда достаточно просто отменить проведение?
А если обмен разовый, так пометь на удаление до начала загрузки, а потом уже грузи без этой пометки на удаление. |
|||
9
Franchiser
гуру
31.10.18
✎
19:05
|
(8) хм, кстати да. Отмена проведения быстрее работает? Где то я встречал, что при восстановлении последовательности непроверенные документы становятся проведенными, поэтом помечаю
|
|||
10
Franchiser
гуру
01.11.18
✎
02:01
|
Нашел такую функцию тут Как быстро и красиво сравнить ВСЕ реквизиты документа? из подсистемы версионирования.
Функция СравнитьОбъекты(Объект1,Объект2) ЗаписьXML = Новый ЗаписьFastInfoset; ЗаписьXML.УстановитьДвоичныеДанные(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписатьXML(ЗаписьXML, Объект1, НазначениеТипаXML.Явное); ДанныеДвоичные1 = ЗаписьXML.Закрыть(); ЗаписьXML = Новый ЗаписьFastInfoset; ЗаписьXML.УстановитьДвоичныеДанные(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписатьXML(ЗаписьXML, Объект2, НазначениеТипаXML.Явное); ДанныеДвоичные2 = ЗаписьXML.Закрыть(); Возврат (ДанныеДвоичные1 = ДанныеДвоичные2); КонецФункции |
|||
11
Злопчинский
01.11.18
✎
02:03
|
(10) и чо? вопрос-то был в т.ч. и "как быстро"...
эта функция - быстрая? |
|||
12
Franchiser
гуру
01.11.18
✎
02:12
|
(11) человек пишет что это быстрее, чем повторная запись объектов через кд
|
|||
13
Franchiser
гуру
01.11.18
✎
02:15
|
Shved_72
66 - 29.11.15 - 09:42 (61) замерю потом отладчиком на большом объеме. пока стало в разы быстрей, за счет пропуска записи не измененных объектов |
|||
14
Franchiser
гуру
01.11.18
✎
02:17
|
Скорее всего остановлюсь на том, что сверю структуру записываемых реквизитов и реквизитами, помещенными в структуру из ссылки с помощью значениевстрокувнутр(), т.к. их не очень много
|
|||
15
Franchiser
гуру
01.11.18
✎
02:20
|
Ещё нужно проверить правда ли быстрее получить отдельные реквизиты из ссылки запросом, чем обращаться через точку, это же запрос в цикле будет при проведении ...
https://its.1c.eu/db/metod8dev#content:2754:hdoc |
|||
16
Mankubus
01.11.18
✎
05:50
|
(15) обращение через точку это тоже запрос
|
|||
17
0xFFFFFF
01.11.18
✎
05:54
|
(0) сравнить ВерсияДанных, не?
|
|||
18
Cyberhawk
01.11.18
✎
08:23
|
(10) Через ФастИнфоСет не рекомендую, если сравнивать хочешь объекты с ТЧ, т.к. он в этом плане багнутый (может терять строки ТЧ или всю ТЧ вообще) и это кажись за 10 лет так и не починили.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |