Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Есть ли минусы у такой проверки?

Есть ли минусы у такой проверки?
Я
   Beduin
 
04.07.19 - 16:59
В цикле много документов.
Для к = 1 по 1000 Цикл
ДокСсылка = Док[к].Ссылка;
ДокОбъект = Док[к].ПолучитьОбъект();

//Тут заполнение какое-то ДокОбъект
.......Алгоритмы заполнения
//

И после всего этого
Проверяю по все метаданным
ДокСсылка <> ДокОбъект

Если не равны то записываю, если равны то не записываю.

конецЦикла

Мне кажется колхоз. Есть альтернативные варианты и как это на базу влияет, есть получать объект, обрабатывать его но не записывать?
Только оперативка грузится или в бд тоже, что-то.
 
 
   Nuobu
 
1 - 04.07.19 - 17:01
Делать через выборку.
   Жан Пердежон
 
2 - 04.07.19 - 17:01
(0) они всегда не равны, у них даже типы разные
   H A D G E H O G s
 
3 - 04.07.19 - 17:02
Глупости.
Передать в запрос таблицу предполагаемо новых значений и вернуть в результат запроса доки, в которых поменялись значения с уже новыми значениями
   Beduin
 
4 - 04.07.19 - 17:02
(2) По метаданным по всем реквизитам, включая таб.части.
   Nuobu
 
5 - 04.07.19 - 17:02
(2) Он имеет ввиду ДокСсылка.Реквизит1 <> ДокОбъект.Реквизит1
   Beduin
 
6 - 04.07.19 - 17:03
(3) Проблема в том, что код на получение значений это полотно на десятки страниц и я плюнул и решил просто в конце проверять.
   Beduin
 
7 - 04.07.19 - 17:04
(6) В конце, когда уже записывается все.
   H A D G E H O G s
 
8 - 04.07.19 - 17:04
(6) Этот кусок будет работать вечность
   H A D G E H O G s
 
9 - 04.07.19 - 17:05
(6) Значения можно собрать в ТЗ
   Fragster
 
10 - 04.07.19 - 17:05
сериализуй докобъект в xml до изменений, потом перед записью и сравнивай строки
   H A D G E H O G s
 
11 - 04.07.19 - 17:05
И потом выйдя из лапши, даже используя на крайняк, ВременноеХранилище() - сделать все красиво
   H A D G E H O G s
 
12 - 04.07.19 - 17:06
Ну и решить - если эти десятки страниц писал - ты - то либо переписать, либо оторвать себе руки. Если же твой предок - найти его адрес.
   Beduin
 
13 - 04.07.19 - 17:08
(12) Там стандартное письмо из Простоквашино. Каждые полгода кто-то дописывает. Новый.
   Garykom
 
14 - 04.07.19 - 17:08
(0) Задача изменить документы но если старые данные = новым данным то нет смысла перезаписывать так?
   Garykom
 
15 - 04.07.19 - 17:08
(14)+ Сорри *обновить документы
   Beduin
 
16 - 04.07.19 - 17:08
(8)(9) Мне тогда в табличках придется хранить все поля документа. Вообще все.
   ptiz
 
17 - 04.07.19 - 17:08
(0) "Тут заполнение какое-то ДокОбъект " - так и проверяй модифицированность.
А если там присваивается то же самое значение реквизита, что и было - не присваивай в таких случаях, чтобы модифицированность не вставала.
   H A D G E H O G s
 
18 - 04.07.19 - 17:09
(16) Все новые поля. Чебынет?
   Beduin
 
19 - 04.07.19 - 17:09
(14) Да, верно.
   Garykom
 
20 - 04.07.19 - 17:09
(19) Для этого используют хеши, недавно одна девочка тут мучалась.
   ptiz
 
21 - 04.07.19 - 17:10
(0) А вообще - ничего смертельного в проверке циклом реквизитов нет, если это не в транзакции и время работы не напрягает.
   Beduin
 
22 - 04.07.19 - 17:11
(17) А присваивание идет в полотне бесконечного кода, мне тогда надо будет туда лезть. И там это фиксить.
Я в конце просто перед записью проверяю.
   Beduin
 
23 - 04.07.19 - 17:14
(10)(19) Вот хорошие мысли) Хэш и Сериализация.
   H A D G E H O G s
 
24 - 04.07.19 - 17:14
(23) Потом расскажешь.
   ptiz
 
25 - 04.07.19 - 17:19
Лучше бы, в самом деле, 1С реализовала функцию сравнения объектов вместо каких-то GROUPING SETS.
   Garykom
 
26 - 04.07.19 - 17:25
(25) Чем тебе не нравится ЗначениеВСтрокуВнутр ?
   рикардо милос
 
27 - 04.07.19 - 18:16
(26) Примечание:

Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется.
   Вафель
 
28 - 04.07.19 - 18:19
вместо присваивания делай процедуру ПрисвоетьЕслиНеравно.
Тогда по флагу модифицированности можно отсеивать


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