|
Хранение состояния РС | ☑ | ||
---|---|---|---|---|
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) Так никто и не говорил, что лишь программно пишется.Кода там и вовсе нет. Все проблемы от того, что смотрим то, что удобно, а не то что есть. Это факт.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |