|
"Руками" отслеживать модифицированность? | ☑ | ||
---|---|---|---|---|
0
Мисти
10.08.18
✎
14:42
|
Есть какая-нибудь известная функция?
Просто модифицированность не пойдет, потому что мне нужно отслеживать изменения только нескольких параметров (включая таб. часть) Создать строку при открытии, куда записать всё, включая таб часть? И при закрытии проверить, не изменилась ли она? Мне же всё равно, что именно поменялось из этих параметров? |
|||
1
Малыш Джон
10.08.18
✎
14:44
|
(0) почему строку?
а так - да, при открытии сохраняешь куда-нибудь значения тех реквизитов, которые нужно отследить, а перед закрытием - сравниваешь с текущими значениями этих рекизитов |
|||
2
Адинэснег
10.08.18
✎
14:46
|
(0) при создании объекта запиши в доп свойства старые значения реквизитов, сравнивай при перед записью значение доп свойствах со значениями полей
|
|||
3
Serg_1960
10.08.18
✎
14:51
|
(0) Если доступна Ссылка, то зачем записывать куда-то?
|
|||
4
Мисти
10.08.18
✎
14:52
|
А зачем так сложно? Все записывать, все сравнивать? Строку - быстрее и проще!
|
|||
5
Serg_1960
10.08.18
✎
14:53
|
А зачем в тёмную играть и хотите простые советы иметь?
|
|||
6
Адинэснег
10.08.18
✎
14:54
|
Доп свойства - это свойство объекта, в считай памяти
а доставать через ссылку это уже обращение к БД |
|||
7
Serg_1960
10.08.18
✎
14:55
|
"потому что мне нужно отслеживать изменения только нескольких параметров" - каких параметров? Мой телепат уже отдыхает.
|
|||
8
Мисти
10.08.18
✎
14:55
|
Пока писала вопрос - думала - а как с таб. частью быть, а как написала - поняла, что туда же!
|
|||
9
Адинэснег
10.08.18
✎
14:55
|
(4) реквизит/ТЧ может поменяться не интерактивно, например, в процедуре ПриИзмененииДоговора()
|
|||
10
Мисти
10.08.18
✎
14:56
|
(7) Ну, не все, которые влияют на модифицированность, а только половина. Какая разница, какие? Я даже еще не смотрела, мне прислали список.
|
|||
11
Мисти
10.08.18
✎
14:57
|
Если и может, то какая разница? Я сравню результат при закрытии.
|
|||
12
Serg_1960
10.08.18
✎
14:59
|
Будет смешно смотреть, если юзверь сохранит объект без закрытия :)
|
|||
13
Адинэснег
10.08.18
✎
15:01
|
(13) или не интерактивно модифицирует, групповой обработкой , например
|
|||
14
Мисти
10.08.18
✎
15:09
|
Ну, при записи. Или перед записью, посмотрю.
Если не интерактивно, то "всё пропало". |
|||
15
vde69
10.08.18
✎
15:09
|
перед любой записью документа все требуемые к контролю реквизиты кладешь в список значений, дальше его сортируешь и потом переводишь в строку, от этой строки вычисляешь ХЕШ и сохраняешь его в документе.
перед записью если новый ХЕШ отличается от записаного - значит была модификация. данный метод очень надежный при условии, что корректно будешь строить ХЕШ... |
|||
16
vde69
10.08.18
✎
15:10
|
(15) +
данный метод подходит для ЛЮБОЙ записи и программной и интерактивной... |
|||
17
Garykom
гуру
10.08.18
✎
15:12
|
(15) Метод
1. Очень медленный 2. Плохо реализуемый в 77 |
|||
18
Мисти
10.08.18
✎
15:12
|
А есть алгоритм для хеш?
|
|||
19
Мисти
10.08.18
✎
15:12
|
у меня 8!
|
|||
20
Garykom
гуру
10.08.18
✎
15:15
|
(18) (19) Да хоть 100 разных, один фиг могут быть ошибки и иногда при изменении данных в реквизитах хеш совпадет и подумает что изменений не было ))
|
|||
21
Ахмадинежад
10.08.18
✎
15:15
|
(19)
ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML,Объект); ДанныеСтрока = ЗаписьXML.Закрыть(); Хеш = Новый ХешированиеДанных(ХешФункция.CRC32); Хеш.Добавить(ДанныеСтрока); Возврат Хеш.ХешСумма; |
|||
22
Ахмадинежад
10.08.18
✎
15:15
|
Объект - например структура со значениями реквизитов шапки и ТЧ
|
|||
23
Ахмадинежад
10.08.18
✎
15:16
|
//Реквизиты шапки и таб.части
Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ "+Док.Метаданные().ПолноеИмя(); Результат=Запрос.Выполнить(); Выборка=Результат.Выбрать(); СтрокаРеквизитов=""; Для каждого Колонка Из Результат.Колонки Цикл Если Колонка.Имя="ВерсияДанных" ИЛИ Колонка.Имя="МоментВремени" ИЛИ Колонка.Имя="Предсталение" Тогда Продолжить; КонецЕсли; СтрокаРеквизитов=СтрокаРеквизитов+?(ПустаяСтрока(СтрокаРеквизитов),"",",")+Колонка.Имя; КонецЦикла; СтруктураДокумента=Новый Структура(СтрокаРеквизитов); Если Выборка.Следующий() Тогда ЗаполнитьЗначенияСвойств(СтруктураДокумента,Док); Для каждого ТабЧасть Из Док.Метаданные().ТабличныеЧасти Цикл СтруктураДокумента.Вставить(ТабЧасть.Имя,Док[ТабЧасть.Имя].Выгрузить()); КонецЦикла; КонецЕсли; |
|||
24
vde69
10.08.18
✎
15:23
|
(17) по скорости - вполне приемлемо
для старых версий платформы - да не очень подходит... (20) совпадений не встречал, у меня по этому прицепу были базы с контролем более 10 лямов записей в месяц, за 2 года ни разу ни чего не вылезло... |
|||
25
Cyberhawk
10.08.18
✎
15:24
|
Какая конфа и форма (ОФ / УФ)?
|
|||
26
Cyberhawk
10.08.18
✎
15:26
|
(24) "совпадений не встречал" // У тебя алгоритм сигнаизировал при совпадении хэша, но несовпадении его "ключа"? Сомневаюсь. Скорее всего ты просто никак не заметил коллизию?
|
|||
27
Мисти
10.08.18
✎
15:29
|
У меня будет просто строчка.
И еще нужен признак - выгружен документ или нет, это совершенно самописная выгрузка, которая запускается руками прямо из документа. Можно ли этот признак завести просто в документе или городить-таки регистр? |
|||
28
xxTANATORxx
10.08.18
✎
15:40
|
перед записью проверять Объект.ТвойРеквизит = Ссылка.ТвойРеквизит предлагали?
|
|||
29
Charity
10.08.18
✎
16:26
|
Делаете РС, в который пишете значения значимых реквизитов. При закрытии формы сравниваете текущие значения с тем, что в РС. Если разные, пишите в РС. Таким образом, вы увидите полную историю изменений значений реквизита в разрезе юзеров и значений.
|
|||
30
Мисти
10.08.18
✎
17:11
|
А мне не нужна история изменений!
Сделаю-как я просто "выгружено" булево. |
|||
31
mistеr
10.08.18
✎
18:04
|
(21) >ХешФункция.CRC32
Вот это ты свинью подложил ТС-у! |
|||
32
Вафель
10.08.18
✎
18:25
|
у тебя прям в документе хранится флаг выгружен? лучше так не делать
|
|||
33
Вафель
10.08.18
✎
18:26
|
смысл перепроверять значение реквизитов? проще перевыгрузить
|
|||
34
Мисти
10.08.18
✎
18:29
|
(33) Почему нет? Задание - проверять.
|
|||
35
Сияющий в темноте
10.08.18
✎
20:27
|
Хэш должен быть мд5 или Sha,могу выслать реализацию на VbScript
за хеш на срс обычно программисту дают пинка,данная функци прекрасно отслеживает небольшое изменение данных,но в силу малости вариантов вполне может совпадать на совершенно различных данных.при использовании срс обычно неявно задана еще и длина данных,так как при передаче она задана. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |