Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Определить что объект изменился

Определить что объект изменился
Я
   Franchiser
 
31.10.18 - 18:40
Как быстро определить что объект изменился?
Есть загруженный документ, далее документ перезагружается, нужно перезаписать документ только в случае если в нем изменилось что-либо.
Поможет ли здесь, например, хеш-функция?
 
 
   Franchiser
 
1 - 31.10.18 - 18:42
Сравнение реквизитов по ссылке и в объекте не предлагайте, про него знаю.
   Вафель
 
2 - 31.10.18 - 18:43
проще по полям пробежаться.
ведб хэш функцию нужно было вычислять заранее
   Franchiser
 
3 - 31.10.18 - 18:48
(2) даже если есть табличная часть?
   palsergeich
 
4 - 31.10.18 - 18:49
(3) И табличные части на вход хэш функции
Один из вариантов - сериализуете в XML и подаете на вход хэш функции
   Cyberhawk
 
5 - 31.10.18 - 18:57
Зачем это узнавать? Включи платформенную историю данныхили БСПшную историю изменений и спи спокойно.
   Franchiser
 
6 - 31.10.18 - 18:57
(4) наверно это долго...
   Franchiser
 
7 - 31.10.18 - 19:00
(5) хочу оптимизировать скорость перезагрузки документов. Сейчас для целостности документы все помечаются на удаление, затем записываются и проводятся. 0.3 сек пометка, 0.25 сек запись и проведение. Документов более 10 тыс.
   Cyberhawk
 
8 - 31.10.18 - 19:01
(7) Зачем при регулярном обмене помечать на удаление, когда достаточно просто отменить проведение?
А если обмен разовый, так пометь на удаление до начала загрузки, а потом уже грузи без этой пометки на удаление.
   Franchiser
 
9 - 31.10.18 - 19:05
(8) хм, кстати да. Отмена проведения быстрее работает? Где то я встречал, что при восстановлении последовательности непроверенные документы становятся проведенными, поэтом помечаю
   Franchiser
 
10 - 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) и чо? вопрос-то был в т.ч. и "как быстро"...
эта функция - быстрая?
   Franchiser
 
12 - 01.11.18 - 02:12
(11) человек пишет что это быстрее, чем повторная запись объектов через кд
   Franchiser
 
13 - 01.11.18 - 02:15
Shved_72
66 - 29.11.15 - 09:42
(61) замерю потом отладчиком на большом объеме. пока стало в разы быстрей, за счет пропуска записи не измененных объектов
   Franchiser
 
14 - 01.11.18 - 02:17
Скорее всего остановлюсь на том, что сверю структуру записываемых реквизитов и реквизитами, помещенными в структуру из ссылки с помощью значениевстрокувнутр(), т.к. их не очень много
   Franchiser
 
15 - 01.11.18 - 02:20
Ещё нужно проверить правда ли быстрее получить отдельные реквизиты из ссылки запросом, чем обращаться через точку, это же запрос в цикле будет при проведении ...

https://its.1c.eu/db/metod8dev#content:2754:hdoc
   Mankubus
 
16 - 01.11.18 - 05:50
(15) обращение через точку это тоже запрос
   0xFFFFFF
 
17 - 01.11.18 - 05:54
(0) сравнить ВерсияДанных, не?
   Cyberhawk
 
18 - 01.11.18 - 08:23
(10) Через ФастИнфоСет не рекомендую, если сравнивать хочешь объекты с ТЧ, т.к. он в этом плане багнутый (может терять строки ТЧ или всю ТЧ вообще) и это кажись за 10 лет так и не починили.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует