Имя: Пароль:
1C
1С v8
Отследить изменения записей независимого регистра сведений
, ,
0 AsadRoman
 
30.01.19
11:18
Задача: при изменении (удалении) записи в РС необходимо производить запись в журнал регистрации об изменении (удалении).
Метод решения: сравниваем запись до изменения и измененная запись. Если есть изменения, то записываем в журнал информацию. Если запись удаляется, то записываем в журнал.
Проблема: Запись происходит в два этапа. В первый этап записывается пустая запись, во второй измененная запись.
Вопрос: как отследить что происходит: изменение или удаление?
1 Волшебник
 
30.01.19
11:20
Всегда происходит удаление, потом запись.
2 AsadRoman
 
30.01.19
11:27
Т.е. задача нереализуема?
3 Numerus Mikhail
 
30.01.19
11:28
ДополнительныеСвойства?
4 AsadRoman
 
30.01.19
11:30
ДополнительныеСвойства при втором этапе оказываются пустыми. Переменная, объявляемая в модуле набора записей тоже "обнуляется"
5 Вася Теркин
 
30.01.19
11:31
В БСП есть сериализация и в платформе с 13 вроде релиза есть сериализация....
6 Вася Теркин
 
30.01.19
11:32
Запись в журнал через подписку...
7 Вася Теркин
 
30.01.19
11:32
+(5) История данных в закладке Свойства в конфигураторе...
8 Вася Теркин
 
30.01.19
11:32
А почему именно в журнал?
9 AsadRoman
 
30.01.19
11:34
(5) Если запись удаляется, где смотреть историю?
10 Вася Теркин
 
30.01.19
11:34
+(6) А нет ,подписки нет, только в модуре набора записей
11 GazM9ic
 
30.01.19
11:34
(0) (1) перед записью набора сделать дополнительное чтение по отбору записываемого набора записей и сравнить записи.
удаление это запись очищенного набора(значит было чтение с отбором)
12 Вася Теркин
 
30.01.19
11:34
В БСП остается, там кроме гуида ещё есть поле Представление.
13 Вася Теркин
 
30.01.19
11:35
если сотрешь Справочник, написер, сохранится в БСП его стандартное представление.
14 AsadRoman
 
30.01.19
11:35
(8) Есть другие предложения? Принимаются.
15 Вася Теркин
 
30.01.19
11:37
1.БСП - версионирование
2.РС- свойства -История данных
3. Самому в XML выгружать как и в БСП.
4. Машина времени. Я когда-то делал.
16 Вася Теркин
 
30.01.19
11:48
Машина времени - предполагается что РС новый, иначе запросы переписывать придется.
В измерения твоего РС добавляешь ВерсияЗаписи(Чип число, целое).

Регистр никогда не стирается, а дополняется новыми записями. В измерении ВерсияЗаписи указываешь номер текущей версии записи плюс один.
Добавляешь ПВХ КлючАналитикиИзмерений,
Добавляешь РС: КлючАналитикиИзмерений, НомерВерсииЗаписи (периодический) - из него будешь получать актуальные версии на свою дату и по номерам версий узнаешь какие записи РС актуальны на любой момент.
Можно применять для больших загружаемых объемов если в них не очень много правят.
Плюс сможешь формировать любой отчет прошлым не поднимая бэкапа.
Минус решения - не работают СрезПервых и СрезПоследних.
Система хранит все состояния РС на любой момент. Т.е. можно формировать отчет как "из настоящего", так и вернуться в 9 утра и оттуда сформировать. В запрос все равно надо передавать момент, на который определяешь  актуальные версии записей.
17 Вася Теркин
 
30.01.19
11:50
"из него будешь получать актуальные версии на свою дату" - СР.Срезпоследних(ТекущаяДата()) ну или любой другой момент времени.
Потом по этому набору вытаскиваешь записи из основного РС
18 Вася Теркин
 
30.01.19
11:53
Да, основоной РС не периодический, если основной РС периодический ,то можно просто измерение добавить и в самом запросе вычислить какие записи РС актуальны соединяя РС с самособой. Немного ресурсоемко, но зато без бэкапов ныряешь в любую точку времени.
19 Вася Теркин
 
30.01.19
11:54
Т.е. для периодического основного РС второй периодический РС и ПВХ КлючАналитикиИзмерений не нужны.
20 Serg_1960
 
30.01.19
11:55
Хех :) Если при записи в модуле набора записей количество записей равно нулю, а модифицированность = Истина - то это удаление.
21 Вася Теркин
 
30.01.19
11:55
Нужно только написать небольшой запрос, который вычисляет данные как в срезеполседних и какв срезе первых и помещает их а МенеджерВТ
22 Serg_1960
 
30.01.19
11:57
*(20) Тьфу оговорился :) - перед записью.
23 Cyberhawk
 
30.01.19
11:59
Гопнический вариант предлагаю - завести реквизит в регистре, в него писать ссылку на справочник, заполнять элемент справочника значениями полей записи регистра. И версионирование на этот справочник повесить.
24 Serg_1960
 
30.01.19
12:05
В (1) правильно написано. Но: удаление выполняется записью "пустого" набора. Почему автор решил, что миссия не выполнима? Пустой набор не означает пустой отбор.
25 Вася Теркин
 
30.01.19
12:05
(23) Версионирование хоть в БСП, хоть в Истории значений сжатое или поэксемеленое.
Совреиенные запросы 1С не умеют с этим работать. Потом обрабатывать записи как? Распаковывать версионирование? Очень медленно
26 Cyberhawk
 
30.01.19
12:07
(25) А зачем распаковывать да еще и быстро? Какой кейс решается?
27 Cyberhawk
 
30.01.19
12:11
Задача автора решается промежуточным буфером: при записи пустого набора пиши в него что запись с таким-то ключом (отбором) удалена. Если это действительно удаление, то инфа в буфере будет истинной.
Если это обновление, то в буфер запишешь еще одну запись и таким образом там тоже будет истинная информация содержаться.
28 Cyberhawk
 
30.01.19
12:12
Но изменение ключа у записи таким образом не отловишь. А вот по варианту (23) - легко )
29 Cyberhawk
 
30.01.19
12:13
Ну и (16) что-то такое тоже предлагает, полагаю - хранить где-то отдельно исходный ключ
30 Вася Теркин
 
30.01.19
12:16
(26) Поработать с историей данных полноценно.  первоначально, если речь о журнале - момент появления записи.
Второе - момент любой модификации записей с произвольным отбором по свойствам и/или категориям.
Третье - удаление
Четвертое - повторная запись того же набора.
например с периферии льют эксели или xml или вебсервисами. Или даже через интерфейс операторы бьют. Но потом удаляют или подправляют. От этого меняется общий результат. На 10 утра было так ,а на 12 стало иначе. Вот надо знать что где меняли и сколько раз.
Написать запрос в РС. Ну просто перебором в цикле всех записей не вариант, количество записей - это перемножение активной аналитики разных измерений. Это много очень.
31 Вася Теркин
 
30.01.19
12:17
Плюс иногда полезно знать когда данные появились-загрузились.
В практике приходят два сотра, приносят тебе один и тот же свод распечатанный, а там данные разные. В разное время распечатывали.
Права на исправление не всегда решают...
32 Вася Теркин
 
30.01.19
12:18
Или сам сидишь и следишь как загрузки идут, или в обед формируешь отчет с периодичностью каждые 15 минут. И знаешь когда что кто загружал.
33 Вася Теркин
 
30.01.19
12:34
Плюс просто можно посмотреть записи, у которых версия больше 1
34 AsadRoman
 
30.01.19
12:37
Спасибо всем.
Историю данных пытался включить, но почему-то вываливается с ошибкой что нет реквизита РазделениеДанных. При чем тут он еще не разбирался.
Основная теорема систематики: Новые системы плодят новые проблемы.