|
Где сохранить данные между вызовами событий разных объектов? | ☑ | ||
---|---|---|---|---|
0
tciban
25.07.22
✎
10:19
|
А вот такой, коллеги, возник вопрос - где бы мне сохранить структурку данных в подписке на событие документа, что бы потом ее вытащить в модуле набора записей регистра, в событии при записи?
Учитывая, что в регистре мы имеем ссылку на документ, а значит ДополнительныеСвойства документа нам не годятся, Учитываем так же, что в УТ 10.3 удаление движений регистра идет программно, потому у нас подписки модуля набора записей вызываются 2-жды. ДополнительныеСвойства регистра тоже не годятся :( А я как раз хочу передать в событие ПриЗаписи движения документа до перепроведения... ПараметрыСеанса тоже не стоит использовать - их надо аккуратно инициализировать в соответствующем месте, а хочется все проще сделать. Куда засунуть данные? Что то вроде глобальной переменной, но что бы доступна была и на сервере и на клиенте. Какое нибудь хранилище или что еще что живет в пределах сеанса в памяти? |
|||
1
H A D G E H O G s
25.07.22
✎
10:30
|
Свой отдельный, специально обученныц параметр сеанса на все случаи жизни.
|
|||
2
tciban
25.07.22
✎
10:36
|
(1) Не, это слишком просто и очевидно. Какие еще есть способы хочу узнать! Вот например как такая идея - через поток?
Как то так: Поток = Новый ПотокВПамяти(); ЗаписьДанных = Новый ЗаписьДанных(Поток); и далее... |
|||
3
Garykom
гуру
25.07.22
✎
10:38
|
(0) А чем не устраивает классика в виде https://www.koderline.ru/expert/instruktsii/article-vremennoe-khranilishche-v-1s/ ?
|
|||
4
tciban
25.07.22
✎
10:41
|
(3) А разве нам не надо знать адрес для чтения из временного хранилища? А как мы передадим адрес?
|
|||
5
RomanYS
25.07.22
✎
10:44
|
(0) Почему не годятся ДополнительныеСвойства набора записей регистра?
|
|||
6
Garykom
гуру
25.07.22
✎
10:45
|
(4) Для этого используется БезопасноеХранилищеДанных
|
|||
7
Кура-Цеце
25.07.22
✎
10:47
|
(5) Потому что при записи регистра у тебя два разных объекта набора, каждый со своими дополнительными данными. Один используется при удалении, второй - при добавлении.
|
|||
8
Кура-Цеце
25.07.22
✎
10:48
|
(6) Микросервис же. На go. Не?
|
|||
9
RomanYS
25.07.22
✎
10:49
|
(7) так первый набор его не интересует, а во второй прекрасно всё передаётся из модуля/подписки проведения
|
|||
10
Garykom
гуру
25.07.22
✎
10:49
|
(8) Видимо тебя трясет что другие смогли кроме 1С освоить еще и много других технологий? А ты не смог?
|
|||
11
tciban
25.07.22
✎
10:50
|
(5) потому что в УТ 10.3 набор записей создается дважды - при очистке регистра и при записи новых движений. Меня интересует второй вызов. Меду этими вызовами ДополнительныеСвойства очищаются.
|
|||
12
RomanYS
25.07.22
✎
10:50
|
(7) кстати проверил на ЗАВИСИМОМ РС, при проведении запись один(!) раз
|
|||
13
Кура-Цеце
25.07.22
✎
10:52
|
(12) А теперь проверь при перепроведении с "удалять движения автоматически"
|
|||
14
tciban
25.07.22
✎
10:53
|
(6) БезопасноеХранилищеДанных
Доступность: Мобильный клиент, мобильное приложение (клиент). У меня УТ 10.3 Не мобильное приложение. ОФ Хотя совместимость конфы отключена, да... |
|||
15
Garykom
гуру
25.07.22
✎
10:53
|
(14) Гм что то путаешь.
https://pro1c8.ru/kak-hranit-paroli/ |
|||
16
RomanYS
25.07.22
✎
10:54
|
(13) Да, теперь записи две. Но допсвойства переданные из обработки проведения есть только во втором, собственно что и нужно ТС
|
|||
17
Кура-Цеце
25.07.22
✎
10:55
|
(15) Это БСПшный регистр сведений, о освоивший еще и много других технологий.
|
|||
18
RomanYS
25.07.22
✎
10:55
|
(11) из обработки проведения ты работаешь именно со вторым вызовом
|
|||
19
Garykom
гуру
25.07.22
✎
10:56
|
(17) Ну да. А что его УТ 10.3 нет? Оно не на БСП?
|
|||
20
tciban
25.07.22
✎
10:57
|
Господа! Если я смогу передать адрес на хранилище, то зачем мне вообще хранилище? я то что нужно и так передам.
|
|||
21
Кура-Цеце
25.07.22
✎
10:58
|
(18) Да, похоже для движений это отдельный случай. Надо только убедится, что оно из подписки работает, он же уже не в модуле.
|
|||
22
Garykom
гуру
25.07.22
✎
10:59
|
(20) адрес хранилища можно приколотить
|
|||
23
RomanYS
25.07.22
✎
11:00
|
(21) Ну да, если в модуле набор явно не записали, то проблем в подписке не будет. А если была явная запись - поздно пить боржоми, но можно ещё раз перечитать регистр
|
|||
24
tciban
25.07.22
✎
11:04
|
(22) если я могу поместить адрес хранилища куда либо, откуда я смогу его получить там где мне надо, то что мешает мне туда же засунуть те, данные, которые передавать через хранилище планируется?
|
|||
25
tciban
25.07.22
✎
11:05
|
(23) Проблема в том, что при отмене проведения документа вход в подписку будет 1 раз, при перепроведении - 2 раза. При первом проведении - 1 раз. Как в модуле набора записей понять что происходит с документом?
|
|||
26
Garykom
гуру
25.07.22
✎
11:06
|
(24) СП открываешь и там:
Глобальный контекст (Global context) ПолучитьИзВременногоХранилища (GetFromTempStorage) Синтаксис: ПолучитьИзВременногоХранилища(<Адрес>) Параметры: <Адрес> (обязательный) Тип: Строка. Адрес, указывающий на значение во временном хранилище. ЗЫ <Адрес> (обязательный) Тип: Строка. |
|||
27
RomanYS
25.07.22
✎
11:12
|
(25) по наличию допсвойства, оно будет передаваться только из проведения
|
|||
28
Garykom
гуру
25.07.22
✎
11:16
|
(0) "передать в событие ПриЗаписи движения документа до перепроведения"
а для чего это требуется? чтобы понимать что ничего не поменялось? |
|||
29
Кура-Цеце
25.07.22
✎
11:16
|
(19) Нет, УТ 10 не на БСП. БСП начали внедрять во все продукты с управляемыми формами, УТ 11, БП 3 и т.п.
|
|||
30
Garykom
гуру
25.07.22
✎
11:17
|
(28)+ т.е. например не надо док в план обмена/синхронизацию засовывать, он такой же
|
|||
31
Кура-Цеце
25.07.22
✎
11:18
|
(26) А сам адрес, из которого данные извлекать надо, ты как собираешся в точку получения передавать? И что мешает точно таким же путем вместо адреса нужные данные?
|
|||
32
Garykom
гуру
25.07.22
✎
11:32
|
(31)
Адрес0 = "e1cib/tempstorage/f5e3d398-0315-4d44-8efa-553f0b1775f3?seanceId=7be41162-ea24-4dbd-9f02-fc38f964c65d"; Адрес1 = ПоместитьВоВременноеХранилище("Данные1", Адрес0); Значение = ПолучитьИзВременногоХранилища(Адрес0); Сообщить("Значение: "+Значение); |
|||
33
Garykom
гуру
25.07.22
✎
11:33
|
(32)+ Но это не совсем документированная хрень, так нежелательно
|
|||
34
СеменовСемен
25.07.22
✎
11:35
|
(0) в подписке таки объект, а не ссылка.
У него есть движения, а там и доп свойства |
|||
35
Ненавижу 1С
гуру
25.07.22
✎
11:38
|
(34) имеется ввиду подписка на регистр, где регистратором является нужный документ
|
|||
36
tciban
25.07.22
✎
11:48
|
Коллеги! Ну не верю я, что никто с такой задачей как передача данных куда то в событие из не связанного с этим места не сталкивался! Я ведь почему спрашиваю - хочу найти наиболее простой и универсальный способ. Так то я способов придумал конечно. Например в УТ 10.3 в глобальном модуле есть переменная глОбщиеЗначения, хоть и доступна она только на клиенте, но работает. Ну еще конечно можно через ПараметрыСеанса... Но как то все это не то... Я уверен, что кто нибудь придумал проще и гениальнее!
|
|||
37
Ненавижу 1С
гуру
25.07.22
✎
11:55
|
(36) глобальные переменные - это путь в никуда или к нашему "гению 1с"
По факту, используйте ДополнительныеСвойства объекта. Их же можно передавать и в набор записей регистра. При правильном использовании - все будет хорошо. Ну вот такая объектная модель 1С. |
|||
38
tciban
25.07.22
✎
12:06
|
(37) глобальные переменные - это путь в никуда или к нашему "гению 1с" - ну не я добавил в модуль приложения эту переменную, это типовой код 1С. И они это сделали раньше "гения", опередили его.
|
|||
39
Lama12
25.07.22
✎
12:08
|
Все не читал. При использовании ВременногоХранилища наверно стоит добавить признак из какого сеанса запись идет? Если параллельно будут проводиться документы, то как определить параметры какого документа в хранилище?
ИМХО, с параметром сеанса вроде красивее. Но все таки ДополнительныеСвойства всетаки надо как-то постараться использовать. |
|||
40
tciban
25.07.22
✎
12:14
|
(39) Один и тот же документ в разных сеансах проводить не получится, а признак ИмяВидаСНомером я сделал :) Ну а параметры сеанаса да, наверное правильнее сосредоточиться на них
|
|||
41
Кура-Цеце
25.07.22
✎
12:19
|
(32) > ?seanceId=7be41162-ea24-4dbd-9f02-fc38f964c65d
Хардкод идентификатора сеанса в коде, какая милота. Не, ну может в микросервисах на go так и принято, не знаю. Но 1С, вообще-то многопользовательская система. Это и к хранению промежуточных параметров в базе данных относится. |
|||
42
Garykom
гуру
25.07.22
✎
12:22
|
(41) Написал что так нежелательно.
Но если руки не кривые и знания есть то можно. Кто мешает идентификатор сеанса подставлять? |
|||
43
Кура-Цеце
25.07.22
✎
12:32
|
(42) > идентификатор сеанса подставлять
Так-так-так. А теперь расскажи, откуда его взять и что для этого надо. |
|||
44
Garykom
гуру
25.07.22
✎
12:41
|
(43) Логично же получить используя ПоместитьВоВременноеХранилище
|
|||
45
Ryzeman
25.07.22
✎
12:43
|
(0) господи, зачем так извращаться... У тебя набор записывается дважды - проверяй на количество. Если оно нулевое - пропускай своё допсвойство, если не нулевое - работай с ним.
В рамках мозгового штурма ещё могу предложить временный текстовый файлик и отдельную базу данных к с обменом через odata. |
|||
46
tciban
25.07.22
✎
12:49
|
(45) В данной конкретной задаче я хочу сравнить движения до перепроведения (а это первое вхождение в модуле набора записей ПередЗаписью) и при проведении - а это второе вхождение в бработчик При Записи модуля набора записей регистра. И допсвойство, в которое я в первом вхождении что то помещу к этому моменту уже пустое!!!
|
|||
47
Ryzeman
25.07.22
✎
12:54
|
(46) В таком случае не логичнее сравнивать данные до попытки их записать?...
|
|||
48
Мультук
гуру
25.07.22
✎
13:21
|
(46)
//В нужно документе Процедура ОбработкаПроведения() //Сформировали пул движений а-ля УТ 11 //Сравнили ДО //Явно сохранили движения //Сравнили после КонецПроцедуры |
|||
49
tciban
25.07.22
✎
13:22
|
Кстати, вспомнил, почему мне не годиться параметр сеанса! Тип данных параметра сеанса нельзя сделать Структура, только фиксированная структура максимум. Я же хочу запомнить вид операции (проведение,
перепроведение, отмена проведения) таблица движений документа до, границ последовательности до операции. (47) Проще всего получить таблицу новых движений в событии ПриЗаписи. |
|||
50
tciban
25.07.22
✎
13:24
|
(48) Это пройденный вариант! Не работает. Если я обнаружу, что движения до и после идентичны, то после завершения обработчика ОбработкаПроведения граница последовательности все равно сдвинется.
|
|||
51
tciban
25.07.22
✎
15:11
|
в общем что бы не страдать сделал я параметр сеанса типа хранилище и все через него пустил. работает.
|
|||
52
Ненавижу 1С
гуру
25.07.22
✎
15:18
|
(51) адепт гения
|
|||
53
Ryzeman
25.07.22
✎
15:19
|
(52) ++++
|
|||
54
Garykom
гуру
25.07.22
✎
15:26
|
(51) Правильно сделал
|
|||
55
Garykom
гуру
25.07.22
✎
15:26
|
(54)+ Только я бы не тип хранилище а адрес в параметрах сеанса
|
|||
56
RomanYS
25.07.22
✎
15:38
|
(54) Правильно использовать допсвойства, которые ровно для этого и придуманы.
|
|||
57
СеменовСемен
25.07.22
✎
16:41
|
(35) все верно. В документе передаешь.
В наборе записей получаешь |
|||
58
Конструктор1С
25.07.22
✎
17:26
|
(51) ректальненько, тянет на "гениальность"
|
|||
59
СеменовСемен
25.07.22
✎
17:35
|
(58) ну у гения хотя бы заказ есть не ломать конфу
|
|||
60
tciban
26.07.22
✎
14:18
|
(52) Вот тут я не понял в чем была шутка юмора - чем тебе Параметр Сеанса не угодил?
|
|||
61
tciban
26.07.22
✎
14:18
|
(55) А смысл в таком усложнении?
|
|||
62
RomanYS
26.07.22
✎
14:22
|
(60) странный вопрос. Очевидно глобальный контекст (включаю ПС) не предназначен для передачи параметров между связанными объектами. Есть прямое решение и никакой необходимости в костылях
|
|||
63
tciban
26.07.22
✎
14:23
|
(56) Я уже устал объяснять - допсвойство живет пока живет документ-объект. В модуле записей регистра у тебя нету документа, есть только ссылка на него! Ну е-мое, как еще то объяснить?! Вот ты в событии документа ПередЗаписью засунешь что то в доп. свойство и как ты это увидишь, гед в модуле набора записей регистра?
Сразу же про допсвойства регистра - при проведении реализации в УТ 10.3 набор записей создается 2 раза! Сначала удаляются записи регистра, потом снова создается набор записей и туда пишется новые записи. Между двумя этими событиями содержимое допсвойств не выживает! Или я где то ошибаюсь? Ну так расскажи где. |
|||
64
RomanYS
26.07.22
✎
14:26
|
(63) >>Между двумя этими событиями содержимое допсвойств не выживает!
Ему и не надо выживать между. Допсвойство заполненное в проведении придёт во вторую запись. |
|||
65
tciban
26.07.22
✎
14:29
|
(64) Где же эго увидеть при второй записи? Ну если не лезть к нему в Обработке проведения?
Еще раз - в событии При записи модуля набора записей регистра нет документа-объекта. Там есть ссылка. У нее нет допсвойств. Мне же нужно вернуть гп на место именно в модуле набора записей, при записи. в другом месте ГП еще не менялась, ее не вернуть. |
|||
66
tciban
26.07.22
✎
14:29
|
надеюсь объяснил не слишком путано :)
|
|||
67
RomanYS
26.07.22
✎
14:34
|
(65) что такое ГП?
в обработке/подписке проведения Движения.ТвойРегистр.ДополнительныеСвойства.Вставить("ТвойПараметрДляНабораЗаписей"); При записи регистра Если ДополнительныеСвойства.Свойство("ТвойПараметрДляНабораЗаписей") и ... |
|||
68
RomanYS
26.07.22
✎
14:35
|
(67) в подписке проведения это будет работать только если в модуле не было прямой записи набора
|
|||
69
Конструктор1С
26.07.22
✎
15:22
|
(63) ты можешь вообще пояснить, зачем тебе понадобился онанизм по работе с какими-то данными документа в модуле набора записей?
|
|||
70
tciban
26.07.22
✎
15:41
|
(67) (69) ГП - граница последовательности. Она меняется при записи регистра Партии товаров на складах. Для поступления товров и услуг, оприходования и поступления допрасходов вернуть на место ее, если ничего на самом деле по партиям не менялось можно только в модуле набора записей в событии ПриЗаписи. Для всего остального да, в Обработке проведения можно все отловить и вернуть
|
|||
71
errorg
28.07.22
✎
02:31
|
(20) Ссылка на регистратор между записями пустого и нового наборов регистра не меняется.
ПоместитьВоВременноеХранилище(ДвиженияДоПроведения, Строка(Регистратор.УникальныйИдентификатор())) |
|||
72
tciban
28.07.22
✎
07:18
|
(71) Спасибо! Хорошая идея.
|
|||
73
errorg
28.07.22
✎
09:32
|
(72) Да не особо:) Видимо, комбинировать надо с (32)
|
|||
74
tciban
28.07.22
✎
20:30
|
(73) в чем видите проблему?
|
|||
75
aha2022
07.08.22
✎
01:20
|
Может кому понадобится. В ут 10 получилось использовать совет из (67). В подписке ПередЗаписьюДокумента В дополнительное свойства ДокументОбъект записываем начальные движения документа. В зависимости от состояния документа и режима записи - в подписках ОбработкаПроведения и ОтменаПроведения используем эти движения для контроля/ или передаем в Дополнительное свойство Движения.ТвойРегистр (тогда эти свойства будут доступны при записи набора записей регистра)
|
|||
76
aha2022
07.08.22
✎
01:23
|
На мой взгляд, тут самое нетривиальное - подход "перекидывания" дополнительных свойств между разными объектами (документом и набором записей регистра) в разных подписках.
|
|||
77
Сергиус
08.08.22
✎
01:12
|
(0)Отдельные "гении" в справочник писать предлагали..)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |