Имя: Пароль:
1C
1С v8
Хранение состояния РС
,
0 Evgen219r
 
14.01.15
16:49
Приветствую!

Есть задача хранить состояние регистров сведений в отдельном регистре.

Структура:
измерения:
- Регистр
- Пользователь
ресурсы:
- СостояниеДоЗаписи
- СостояниеПослеЗаписи

При реализации столкнулся с проблемой, что регистры записываются в 2 этапа.
1. Старый набор заменяется на пустой
2. Пустой набор, заменяется на новый.

В результате, есть попытка в регистр для хранения изменений сделать 2 записи в пределах секунды.

Нельзя ли как-то понять, что эти 2 этапа относятся к одной транзакции?
1 vicof
 
14.01.15
16:57
"Есть задача хранить состояние регистров сведений в отдельном регистре. "
Жестоко. А его состояние не надо нигде хранить?

"есть попытка в регистр для хранения изменений сделать 2 записи в пределах секунды."
какая попытка? кто пытается?
2 Evgen219r
 
14.01.15
17:08
Да, таковы реалии) Его состояние не надо. Надеюсь пока)

"какая попытка? кто пытается?"

Смотри:
запись РС это по сути запись в 2 прохода, описанных с сабже.

Т.к. запись в регистр состояний делается в событии ПриЗаписи() то с регистре состояния должно появится 2 записи. 1. Очистка набора 2. Запись нового набора
3 FIXXXL
 
14.01.15
17:10
(2) ну добавь измерение "НомерПрохода" :)
4 FIXXXL
 
14.01.15
17:12
и это... у тебя пользователь полностью регистр что ли перезаписывает каждый раз?
что ты хранишь то в Состояниях? жуть как интересно
5 Evgen219r
 
14.01.15
17:12
Пробовал))

Но каждый этап это отдельный набор записей по сути, поэтому переменная обнуляется
6 Ненавижу 1С
 
гуру
14.01.15
17:13
может проще сделать периодический РС?
7 Evgen219r
 
14.01.15
17:14
Зачем полностью?

Храню я там состояние до записи и после записи. Всю таблицу в реквизитах СостояниеДоЗаписи и СостояниеПослеЗаписи. Тип ХранилищеЗначений
8 Evgen219r
 
14.01.15
17:14
2 Ненавижу 1С:
А что это даст? периодичность же в пределах секунды минимальная
9 Ненавижу 1С
 
гуру
14.01.15
17:15
(8) я про тот регистр, изменения которого ты пытаешься логировать
10 Evgen219r
 
14.01.15
17:16
(6) А оба этапа записи, при небольших объёмах будут как раз в пределах одной секунды
11 Evgen219r
 
14.01.15
17:16
(9) Задача стоит хранить разные регистры
12 Diversus
 
14.01.15
17:18
(10) Так делать не надо. Это костыли.
13 Evgen219r
 
14.01.15
17:19
(12) А как надо?
14 FIXXXL
 
14.01.15
17:19
(10) а очистку тебе обязательно хранить?
смотри что набор пустой и не сохраняй
15 Diversus
 
14.01.15
17:21
В своей обработке я делал по другому.
http://softonit.ru/journal.html

Все сначала фиксируется полностью по регистру в разрезе отбора записываемых данных (очистка и запись), а потом анализируется если есть очистка и следующее событие запись (с непустыми строками) и с тем же отобором, то очистку регистра не принимаем во внимание.
16 Diversus
 
14.01.15
17:21
Обработке регистров я имел ввиду, а в целом - это подсистема.
17 Evgen219r
 
14.01.15
17:22
(14) К сожалению, да. Какой-то негодяй очищает записи. Поэтому задача фиксировать и очистку. В ЖР заказчик хранить не хочет. Приспичило в регистре
18 Evgen219r
 
14.01.15
17:23
(15) Интересовался этой темой. Увы не был услышан, заказчик хочет хранить в регистре
19 vicof
 
14.01.15
17:24
(17) А в ЖР есть информация о негодяях. Права резать не пробовали?
20 Evgen219r
 
14.01.15
17:25
(19) В ЖР есть информация о том, что кто-то записал регистр. Задача не в этом.
21 FIXXXL
 
14.01.15
17:26
(17) ну перед записью в РС-хранилище анализируй
если два набора - пиши, который непустой
если очистка - пиши пустой
22 Diversus
 
14.01.15
17:28
(21) Тут проблема в другом...
Ресурсы по измерениям могут быть:
1) Перезаписаны новыми значениями
2) Удалены

Плюс в событии всегда один набор, просто если перезапись, то это две записи подряд, сначала очистка, а потом запись новых.
23 Garykom
 
гуру
14.01.15
17:28
(0) Не издевайся и просто сделай исходный регистр периодическим + обертку к нему для прежних вызовов к нему удобно
24 Evgen219r
 
14.01.15
17:29
(22) Почему тогда переменная модуля очищается?
25 Evgen219r
 
14.01.15
17:31
(23) Не нужен периодический регистр. К тому же это ничего не изменит
26 Evgen219r
 
14.01.15
17:32
А вот как организовать этот анализ? Как отличить запись пустого набора при очистке его пользователем от промежуточной очистки самой 1С?
27 FIXXXL
 
14.01.15
17:34
(26) перед записью в РС-хранилище посмотреть записи на эту секунду?
28 Evgen219r
 
14.01.15
17:34
(22) Есть в связи с этим идеи по решению? Я уже голов сломал
29 FIXXXL
 
14.01.15
17:35
(28) радикально: измерение уникИД и генерить на каждый чих, т.е. запись и очистку
30 Evgen219r
 
14.01.15
17:36
(27) К примеру есть. Но она вполне может быть записью, отражающей промежуточную очистку
31 FIXXXL
 
14.01.15
17:36
в принципе в ЖР есть ведь ИД транзакции, вот что-то похожее прикрутить
32 Evgen219r
 
14.01.15
17:36
(29) Можно вот об этом по-подробнее?
33 FIXXXL
 
14.01.15
17:37
(32) измерение - Строка
писать туда Новый УникальныйИдентификатор()
34 Evgen219r
 
14.01.15
17:37
(31) Я как раз и ищу способ понять, как идентифицировать эту транзакцию и увязать с ней эти 2 этапа
35 Evgen219r
 
14.01.15
17:38
(33) Идентификатор записи? Попробую,спасибо
36 FIXXXL
 
14.01.15
17:40
(35) единственный минус - не рекомендуется делать измерением РС примитивные типы
37 Evgen219r
 
14.01.15
17:42
(33) Подожди-ка. А разве у записи может быть УИД?
38 FIXXXL
 
14.01.15
17:43
еще вариант изврата: сделать служебный документ
сделать его регистратором или измерением
создавать этот док при записи
39 FIXXXL
 
14.01.15
17:44
(37) у записи РС - нет
но ты можешь его сгенерировать сам
мойИД = Новый УникальныйИдентификатор()
40 Evgen219r
 
14.01.15
17:44
(38) Это уж совсем жесть))
41 Evgen219r
 
14.01.15
17:45
(39) А толку? ПриЗаписи() 1-й проход будет 1 УИД, во втором проходе другой
42 FIXXXL
 
14.01.15
17:46
(41) тебе ж записывать не дает? с этим разобрались :)
43 Evgen219r
 
14.01.15
17:50
(42) Ну или запись теряется. В принципе, уже спасибо) Но если подскажешь, как идентифицировать этот процесс и в него эти записи объединить?
44 SatansClaws
 
14.01.15
17:53
В модуле набора записей есть атрибут "ДополнительныеСвойства"

попробовать писать туда ГУИД и пытаться достучаться до записанного ГУИДа извне
45 FIXXXL
 
14.01.15
18:01
(43) у тебя РС, которые хранить надо, подчинены регистраторам?
46 ChAlex
 
14.01.15
18:05
А про какие 2 этапа идет речь?! Вообще-то запись набора выполняется 1 раз (Если не писать како-нибудь кривой код и записывать 5 раз)
47 Evgen219r
 
14.01.15
18:45
(46) Поставь точку останова в процедуру ПриЗаписи() ну или почитай выше
48 Evgen219r
 
14.01.15
19:12
Проблема решена. Коллеги, всем огромное спасибо за участие, а особенно FIXXXL. Оказалось главное сделать 2 записи, а остальное решается с помощью СКД уже в при формировании отчёта
49 ChAlex
 
14.01.15
20:22
(47) Набор записывается один раз!! Именно поставьте точку останова и проверьте. Только записывайте в регистр, который не подчинен регистратору. Судя по всему у вас запись ведется при проведении документа, о чем вы умалчиваете. И в таком случае первый раз идет запись при отмене проведения , а второй при проведении. В таком случае нужно просто по-другому организовать проведение документа (изменить  режим удаление движений с "Удалять автоматически при отмене проведения" на иной). Но... хозяин - барин
50 Evgen219r
 
15.01.15
10:19
(49) Уже. Регистр независимый. Не так переживать, никто не о чём не умалчивает и заговора нет. И точку поставил и проверил. Если есть желание помочь понять в чём я ошибаюсь, буду признателен, а криков не нужно, спасибо
51 Evgen219r
 
15.01.15
10:24
(49) v8: Странность при записи регистра сведений
Вот ещё злодей, который всё врёт
52 Лефмихалыч
 
15.01.15
10:35
Ветка - отличный пример того, что бывает, когда думают о том КАК сделать вместо того, чтобы подумать о том ЧТО и ЗАЧЕМ
53 Лефмихалыч
 
15.01.15
10:47
ну, и независимые регистры таки записываются один раз в 8.3, в 8.1 возможно было как-то иначе
54 Evgen219r
 
15.01.15
10:48
(52)Есть заказчик, он хочет так и платит за это. И, поверьте, были сделаны и иные ему предложения.
55 Evgen219r
 
15.01.15
10:49
(53) Появилась у меня мысль такая. Возможно, такая штука при интерактивной записи. Если не затруднит и проверите у себя для чистоты эксперимента, буду признателен
56 Kyon8
 
15.01.15
10:56
(55) При интерактивной записи пишется через менеджер записи, вроде. А при программной записи через менеджер, выполняется как раз 2 записи - очистка и сама запись.
57 Лефмихалыч
 
15.01.15
11:07
(54) может тогда просто хранить ХранилищеЗначения, в котором сериализованный набор? Тогда не надо будет решать проблему (0). Ну будут у тебя пустые наборы перемежаться с заполненными и хрен на них - задача будет решена, т.к. в любой момент ясно, кто и что изменил
58 Evgen219r
 
15.01.15
11:27
(57) Так в первом посте написано, что сама таблица регистра так и хранится. Но процессы записи всё равно произойдут в течении одной секунды. Решилась проблема использованием УИД
59 Лефмихалыч
 
15.01.15
11:34
(58) еще можно хранить в данных журнала регистрации - туда можно что угодно запхать. Всего-лишь обработку чтения смастерить придется
60 Evgen219r
 
15.01.15
12:13
(59) Можно много что. Но заказчик хочет так. Можно было, конечно послать его, но деньги из воздуха не берутся. Изначально и было в ЖР сохранено
61 Evgen219r
 
15.01.15
12:14
Всем спасибо, но уже пошли рассуждения на тему, кем бы была бабушка, если у неё были первичные половые признаки дедушки)))))
62 Evgen219r
 
15.01.15
12:15
Проблема решена. Благодарю всех участников форума за скорую помощь и множество ценных советов. Постараюсь, при случае, отплатить тем же
63 ChAlex
 
15.01.15
17:09
(50) Да криков то нет. Простой тест:

    Набор=РегистрыСведений.ГрафикТемператур.СоздатьНаборЗаписей(); (имеется такой в базе не зависимый с записью и периодический)
        Набор.Отбор.Страна.УстановитьОтбор(Справочники.Страны.Россия,Истина)
        Набор.Прочитать();
    Набор.Очистить();
    Зап=Набор.Добавить();
    Зап.Период=ТекущаяДата();
    Зап.Страна=Справочники.Страны.Россия;
    Набор.Записать();

Точка останова в модуле набора записей регистра сведений "ПриЗаписи". Останов происходит 1 раз! Хоть 8.2 (8.2.19.121 в режиме совместимости с 8.2.13 - это для полноты данных) хоть 8.3. И если у вас 2 раза записывается - смотрите листинги. Но запись осуществляется 1 раз и все остальное от лукавого. Лишняя запись идет от неправильного кода
64 ChAlex
 
15.01.15
17:10
+ (63) Возможно вопрос в интерактивной какой-нибудь форме. Но программно пишется 1 раз
65 Evgen219r
 
15.01.15
17:40
(64) Так никто и не говорил, что лишь программно пишется.Кода там и вовсе нет. Все проблемы от того, что смотрим то, что удобно, а не то что есть. Это факт.