Имя: Пароль:
1C
 
"Руками" отслеживать модифицированность?
,
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
за хеш на срс обычно программисту дают пинка,данная функци прекрасно отслеживает небольшое изменение данных,но в силу малости вариантов вполне может совпадать на совершенно различных данных.при использовании срс обычно неявно задана еще и длина данных,так как при передаче она задана.
Основная теорема систематики: Новые системы плодят новые проблемы.