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



"Руками" отслеживать модифицированность?

"Руками" отслеживать модифицированность?
Я
   Мисти
 
10.08.18 - 14:42
Есть какая-нибудь известная функция?
Просто модифицированность не пойдет, потому что мне нужно отслеживать изменения только нескольких параметров (включая таб. часть)
Создать строку при открытии, куда записать всё, включая таб часть?
И при закрытии проверить, не изменилась ли она? Мне же всё равно, что именно поменялось из этих параметров?
 
 
   Малыш Джон
 
1 - 10.08.18 - 14:44
(0) почему строку?
а так - да, при открытии сохраняешь куда-нибудь значения тех реквизитов, которые нужно отследить, а перед закрытием - сравниваешь с текущими значениями этих рекизитов
   Адинэснег
 
2 - 10.08.18 - 14:46
(0) при создании объекта запиши в доп свойства старые значения реквизитов, сравнивай при перед записью значение доп свойствах со значениями полей
   Serg_1960
 
3 - 10.08.18 - 14:51
(0) Если доступна Ссылка, то зачем записывать куда-то?
   Мисти
 
4 - 10.08.18 - 14:52
А зачем так сложно? Все записывать, все сравнивать? Строку - быстрее и проще!
   Serg_1960
 
5 - 10.08.18 - 14:53
А зачем в тёмную играть и хотите простые советы иметь?
   Адинэснег
 
6 - 10.08.18 - 14:54
Доп свойства - это свойство объекта, в считай памяти
а доставать через ссылку это уже обращение к БД
   Serg_1960
 
7 - 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
Если и может, то какая разница? Я сравню результат при закрытии.
   Serg_1960
 
12 - 10.08.18 - 14:59
Будет смешно смотреть, если юзверь сохранит объект без закрытия :)
   Адинэснег
 
13 - 10.08.18 - 15:01
(13) или не интерактивно модифицирует, групповой обработкой , например
   Мисти
 
14 - 10.08.18 - 15:09
Ну, при записи. Или перед записью, посмотрю.
Если не интерактивно, то "всё пропало".
   vde69
 
15 - 10.08.18 - 15:09
перед любой записью документа все требуемые к контролю реквизиты кладешь в список значений, дальше его сортируешь и потом переводишь в строку, от этой строки вычисляешь ХЕШ и сохраняешь его в документе.
перед записью если новый ХЕШ отличается от записаного - значит была модификация.

данный метод очень надежный при условии, что корректно будешь строить ХЕШ...
   vde69
 
16 - 10.08.18 - 15:10
(15) +
данный метод подходит для ЛЮБОЙ записи и программной и интерактивной...
   Garykom
 
17 - 10.08.18 - 15:12
(15) Метод
1. Очень медленный
2. Плохо реализуемый в 77
   Мисти
 
18 - 10.08.18 - 15:12
А есть алгоритм для хеш?
   Мисти
 
19 - 10.08.18 - 15:12
у меня 8!
   Garykom
 
20 - 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 * ИЗ "+Док.Метаданные().ПолноеИмя(); 
    
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать();
    
    СтрокаРеквизитов="";
    Для каждого Колонка Из Результат.Колонки Цикл
        Если Колонка.Имя="ВерсияДанных" ИЛИ Колонка.Имя="МоментВремени" ИЛИ Колонка.Имя="Предсталение" Тогда Продолжить; КонецЕсли;
        СтрокаРеквизитов=СтрокаРеквизитов+?(ПустаяСтрока(СтрокаРеквизитов),"",",")+Колонка.Имя;
    КонецЦикла;

    СтруктураДокумента=Новый Структура(СтрокаРеквизитов);
    
    Если Выборка.Следующий() Тогда
        ЗаполнитьЗначенияСвойств(СтруктураДокумента,Док);
        Для каждого ТабЧасть Из Док.Метаданные().ТабличныеЧасти Цикл
            СтруктураДокумента.Вставить(ТабЧасть.Имя,Док[ТабЧасть.Имя].Выгрузить()); 
        КонецЦикла; 
    КонецЕсли;
   vde69
 
24 - 10.08.18 - 15:23
(17) по скорости - вполне приемлемо

для старых версий платформы - да не очень подходит...

(20) совпадений не встречал, у меня по этому прицепу были базы  с контролем более 10 лямов записей в месяц, за 2 года ни разу ни чего не вылезло...
   Cyberhawk
 
25 - 10.08.18 - 15:24
Какая конфа и форма (ОФ / УФ)?
   Cyberhawk
 
26 - 10.08.18 - 15:26
(24) "совпадений не встречал" // У тебя алгоритм сигнаизировал при совпадении хэша, но несовпадении его "ключа"? Сомневаюсь. Скорее всего ты просто никак не заметил коллизию?
   Мисти
 
27 - 10.08.18 - 15:29
У меня будет просто строчка.
И еще нужен признак - выгружен документ или нет, это совершенно самописная выгрузка, которая запускается руками прямо из документа.
Можно ли этот признак завести просто в документе или городить-таки регистр?
   xxTANATORxx
 
28 - 10.08.18 - 15:40
перед записью проверять Объект.ТвойРеквизит = Ссылка.ТвойРеквизит предлагали?
   Charity
 
29 - 10.08.18 - 16:26
Делаете РС, в который пишете значения значимых реквизитов. При закрытии формы сравниваете текущие значения с тем, что в РС. Если разные, пишите в РС. Таким образом, вы увидите полную историю изменений значений реквизита в разрезе юзеров и значений.
   Мисти
 
30 - 10.08.18 - 17:11
А мне не нужна история изменений!
Сделаю-как я просто "выгружено" булево.
   mistеr
 
31 - 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
за хеш на срс обычно программисту дают пинка,данная функци прекрасно отслеживает небольшое изменение данных,но в силу малости вариантов вполне может совпадать на совершенно различных данных.при использовании срс обычно неявно задана еще и длина данных,так как при передаче она задана.


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