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

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

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

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

конецЦикла

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

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