Имя: Пароль:
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
Я решала подобную задачу в Документообороте. Удалось "двойной" заход решить через проверку регистра сведений "история событий". Иначе никак не получалось.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший