|
Сохранить данные при отказе проведения документа | ☑ | ||
---|---|---|---|---|
0
kugelfangg
02.07.12
✎
16:41
|
Здравствуйте, Господа!
Суть проблемы: При проведении документа через "попытку" производится запись в регистр сведений в ресурс/реквизит. Как только проведений документа уходит в исключение, все данные записанные в этот регистр в процессе проведения, удаляются. Подскажите пожалуйста, как избежать удаления накопленных в процессе проведения данных из определенного регистра сведений в момент отказа проведения документа? |
|||
1
butterbean
02.07.12
✎
16:43
|
убрать запись в регистр из попытки
|
|||
2
Mort
02.07.12
✎
16:43
|
Никак не могу выбрать между вопросами: "Накуа?" и "Как это себе представляешь?"
|
|||
3
0_Serg_0
02.07.12
✎
16:44
|
вывести эту запись в исключения
|
|||
4
sanja26
02.07.12
✎
16:44
|
при записи..
|
|||
5
Rovan
гуру
02.07.12
✎
16:48
|
(0) не советуем так делать
платформу 1С умные люди делали - они специально создали такой механизм ! |
|||
6
kugelfangg
02.07.12
✎
16:49
|
(5) я совершенно не против данного механизма. Но вот в одном регистре он очень мешает.
|
|||
7
kugelfangg
02.07.12
✎
16:52
|
(3)(4) в попытке у меня:
ИсходныйДокумент.Записать(РежимЗаписиДокумента.Проведение); При проведении документ начинает лазить по огромному количеству общих модулей и регистрам. Так что такой вариант при текущем коде невозможен |
|||
8
Ненавижу 1С
гуру
02.07.12
✎
16:54
|
сделай свой метод в модуле объекта:
ЗаписатьЧтотоВОсобыйРегистр(); Записать(РежимЗаписиДокумента.Проведение); |
|||
9
0_Serg_0
02.07.12
✎
16:54
|
(7)
попытка ИсходныйДокумент.Записать(РежимЗаписиДокумента.Проведение); исключение запись твоих важных данных в регистр конецпопытки; |
|||
10
0_Serg_0
02.07.12
✎
16:56
|
+(9) по идее к моменту "исключение" они уже собраны и их достаточно просто записать
|
|||
11
kugelfangg
02.07.12
✎
16:58
|
(9)(10) К моменту исключения они уже собраны и записаны, но как только происходит исключение, собранные данные удаляются.
|
|||
12
hhhh
02.07.12
✎
17:05
|
(11) удаляются с диска. А в оперативной памяти должны остаться.
|
|||
13
kugelfangg
02.07.12
✎
17:08
|
(12)Ок, и как их достать? =)
|
|||
14
hhhh
02.07.12
✎
17:10
|
(13) ну в переменной посмотреть, которая была "набор записей".
|
|||
15
kugelfangg
02.07.12
✎
17:15
|
(14)А если нет переменной? есть только строки регистра?
Может есть какая-нибудь настройка, "запрещать откат внесенных изменений регистре"? Через транзакции пробовал(НачатьТранзакцию(),ЗафиксироватьТранзакцию()), не помогло... |
|||
16
qwerty09
02.07.12
✎
17:36
|
(15) если нет, то сделай и пиши данные вне конструкции попытка-исключение
>> Через транзакции пробовал(НачатьТранзакцию(),ЗафиксироватьТранзакцию()), не помогло...
чет я не пойму как это могло помочь...попытка-исключение это уже открытие-откат транзакции. |
|||
17
Serg_1960
02.07.12
✎
17:38
|
Вопрос можно? А почему отказ в проведении документа (обычная, штатная ситуация) порождает у автора исключение?
|
|||
18
qwerty09
02.07.12
✎
17:48
|
(17) ну всякое может быть...пока он его обрабатывать будет, кто то из юзверов его заблокирует или из-за блокировок по таймауту вывалится, или прав кому то не хватит провести...я тоже всегда в попытку-исключение оборачиваю подобную куиту.
|
|||
19
Axel2009
02.07.12
✎
17:59
|
(15) это даже не 1с придумали. а ребята, которые придумывали стандарт по целостности данных. при таком подходе хотя бы все знают, что данные не запишутся. а то после таких как ты ищи дырки.
|
|||
20
Fragster
гуру
02.07.12
✎
18:01
|
в 1с нету вложенных транзакций, так что надо порождать распределенную транзакцию, например писать РС с помощью вызова веб сервиса
|
|||
21
Fragster
гуру
02.07.12
✎
18:02
|
а вообще это всё изврат
|
|||
22
kugelfangg
02.07.12
✎
18:02
|
(19) Это мы все уже поняли. НО это спец. регистр которого этот принцип касаться не должен. И вопрос заключается в том, как это сделать с текущими условиями, а не в том хорошо это или плохо.=)
|
|||
23
Axel2009
02.07.12
✎
18:03
|
(22) пиши в журнал регистрации
|
|||
24
qwerty09
02.07.12
✎
18:04
|
(22) так что там за регистр то такой?
|
|||
25
blopp
02.07.12
✎
18:04
|
(0) Если совсем пофигу на архитектуру - вынеси запись в отдельную процедуру и вызывай ее в фоновом задании.
У него будет свой коннект к БД, к транзакции документа отношения не имеющий. |
|||
26
Serg_1960
02.07.12
✎
18:11
|
Глянь на мой изврат, может пригодится на что нибудь :)
Процедура ПереПроведениеДокументаПоРегиструХХХ(ТекСсылка, ИмяРегистра) Попытка Объект = ТекСсылка.ПолучитьОбъект(); НачатьТранзакцию(); Объект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); Объект.Движения[ИмяРегистра].Прочитать(); ТаблицаЗаписей = Объект.Движения[ИмяРегистра].Выгрузить(); ОтменитьТранзакцию(); Объект.Движения[ИмяРегистра].Загрузить(ТаблицаЗаписей); Объект.Движения[ИмяРегистра].Записать(Истина); Исключение Если ТранзакцияАктивна() Тогда ОтменитьТранзакцию(); КонецЕсли; КонецПопытки; Возврат; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |