Имя: Пароль:
1C
1С v8
Подписка на событие регистра ПередЗаписью и ПриЗаписи
0 PVS_Mtl
 
04.05.16
08:01
Есть независимый регистр сведений, периодический. Если делается запись через МенеджерЗаписи, то вначале происходит удаление, потом вставка. Если через набор записей, то удаления (т.е. срабатывания ПередЗаписью с нулевым количеством) нет. Когда используем менеджер, запись всегда одна, и в первое срабатывание ПередЗаписью она из таблицы удаляется. Когда используем набор, передЗаписью срабатывает один раз и старые записи в таблице есть.
Задача - универсальный код для подписки (вызванной как посредством менеджера, так и набора), использующий "старые" записи в ПриЗаписи. Где-то на форуме мне попадалось решение с использованием временной таблицы для передачи удаляемых записей. Если не трудно, покажите ссылку.
1 PVS_Mtl
 
04.05.16
10:52
Для передачи удаленных записей между двумя ПередЗаписью собираюсь использовать временную таблицу, менеджер временных таблиц передавать через экспортную переменную модуля обычного приложения.
Жаль, не могу найти пример с сайта...
2 Лефмихалыч
 
04.05.16
10:56
ЭтотОбъект.ДополнительныеСвойства.Вставить("СтарыйНабор", ДанныеКоторыеХочешьПередаватьМеждуСобытиямиИПодписками)
3 Лефмихалыч
 
04.05.16
10:57
получать, соответственно
ЭтотОбъект.ДополнительныеСвойства.СтарыйНабор

или

СтарыйНабор = Неопределено;
Если не ЭтотОбъект.ДополнительныеСвойства.Свойство("СтарыйНабор", СтарыйНабор) Тогда
   ВызватьИсключение "Сектор 'Б' на барабане, вы - банкрот, всё у вас сгорело к четовой матери!";
4 PVS_Mtl
 
04.05.16
12:33
Спасибо за ответ! Но в подписке нет переменной ЭтотОбъект, а есть Источник. И в случае первого прогона ПередЗаписью источник один, а при втором прогоне совершенно другой. Это было в первую очередь проверено, задолго до написания вопроса. Или же я чего-то в ответе не поняла.
5 PVS_Mtl
 
04.05.16
12:35
Т.е. источник меняется, и допсвойство не видно.
6 hhhh
 
04.05.16
12:37
(5) откуда второй прогон? вы же нам только что сказали, что нет второго прогона?
7 PVS_Mtl
 
04.05.16
12:40
(6) Если делается запись через МенеджерЗаписи, то вначале происходит удаление, потом вставка. Итого два прогона ПередЗаписью. Первый раз с нулевым количеством.
Если делается запись через НаборЗаписей, прогон всегда один, второго нет.
8 hhhh
 
04.05.16
12:43
(7) ну вы передаете данные через ДополнительныеСвойства внутри одного прогона. Между ПередЗаписью и ПриЗаписи. Зачем вы второй прогон сюда?
9 PVS_Mtl
 
04.05.16
12:49
(8) В том-то и дело, что я их хочу передать во второй прогон, если он есть.
Т.к. если прогонов было 2, старых данных на втором прогоне в таблице нет. А если один (всего один и второго не будет), старые данные есть. Транзакция заканчивается после второго прогона в общем случае. В приЗаписи мне нужно каким-то способом определить, какой по счету прогон - второй или первый. Если он второй, старые данные брать из временной таблицы.
А то получается, что иначе работа алгоритма должна зависеть от того, при помощи какого объекта был создан набор записей.
10 Лефмихалыч
 
04.05.16
12:59
(4) вот жешь беда-то необоримая...
11 Лефмихалыч
 
04.05.16
13:01
(7) это происходит пир любой записи в регистр
12 Лефмихалыч
 
04.05.16
13:02
короче, автор, ты сруйню затеял.
Зачем тебе это все? Людскими словами можешь объяснить - для чего ветка?
13 PVS_Mtl
 
04.05.16
13:06
(12) Чтобы при окончании транзакции из двух прогонов в окончательном ПриЗаписи получить старые данные.
14 PVS_Mtl
 
04.05.16
13:08
Видела раньше ветку, где решалась аналогичная задача. Сейчас не могу найти. Хотелось бы посмотреть, может в ней решение удачней моего с экспортной переменной для менеджера временных таблиц.
15 Лефмихалыч
 
04.05.16
13:34
(13) не получишь. Живи с этим
16 Лефмихалыч
 
04.05.16
15:05
Даже если передЗАписью делать запрос к регистру по значениям отбора из Источника, пхать это в ДополнительныеСвойства, то при втором вызове ПередЗаписью источник будет уже другой и там ни чего в допсвойствах не будет.
Если - во временное хранилище только разве, но открытым и нерешаемым остается вопрос, как во втором вызове обработчика угадать ИД записи во временном хранилище.
17 PVS_Mtl
 
04.05.16
16:02
(16) Уже недели 2 работает вариант с помещением в ТЗ, а её в параметр сеанса. Есть намерение сделать через временную таблицу (см выше), а менеджер временных таблиц передавать через экспортную переменную модуля обычного приложения. Но помню, видела тут изящный вариант, но похоже никто больше на него не обратил внимания, а я как назло не могу найти.
18 ptiz
 
04.05.16
16:08
(17) Ой, нехорошо через общую переменную - не будет работать на сервере. Либо параметр сеанса, либо где-то в БД хранить - еще один регистр "удаленных записей" или этот же с признаком "к удалению".
19 Элит
 
04.05.16
16:27
Я решала подобную задачу в Документообороте. Удалось "двойной" заход решить через проверку регистра сведений "история событий". Иначе никак не получалось.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший