|
В данной транзакции уже были ошибки.... помоги плиз | ☑ | ||
---|---|---|---|---|
0
yfylhjkjy
20.06.13
✎
09:06
|
Есть необходимость в одной самописной базе попробовать переровести (причем под перепровести понимается сначала отменить проведение, установить у одного реквизита другое значение и провести... если не удалось оставить как было). Пытался сделать так:
Попытка НачатьТранзакцию(); мДок = Результат.Ссылка.ПолучитьОбъект(); мДок.Записать(РежимЗаписиДокумента.ОтменаПроведения); мДок.Подтверждено = Истина; мДок.Записать(РежимЗаписиДокумента.Проведение); ЗафиксироватьТранзакцию(); Исключение КонецПопытки; Если документ провести нельзя, то вылетает ошибка про транзанкцию. В чем ошибка? |
|||
1
yfylhjkjy
20.06.13
✎
09:06
|
перенесите пожалуйста в секцию v8!!! спасибо
|
|||
2
Ёпрст
20.06.13
✎
09:08
|
в попытку надо оборачивать
|
|||
3
Ёпрст
20.06.13
✎
09:08
|
+ отменатранзакции
ну и наеборот только, попытка унутри транзакции |
|||
4
Ёпрст
20.06.13
✎
09:10
|
Вот только, в данном коде, лучше вообше выкинуть транзакцию - она и так есть в модуле проведения..
Проще условие поставить, что запись не завершилась и привет |
|||
5
Vadim_37
20.06.13
✎
09:10
|
А стандартной групповой обработкой не проще сделать?
|
|||
6
yfylhjkjy
20.06.13
✎
09:11
|
Нет не проще, потому что нужно именно попытаться сначала откатить, потом установить реквизит, потом провести. Если не получилось оставить документ в первозданном виде
|
|||
7
yfylhjkjy
20.06.13
✎
09:13
|
(4) тут подводный камень, в том, что у меня до этого проведенный документ тогда может стать не проведенным.
|
|||
8
Vadim_37
20.06.13
✎
09:14
|
(6) Что значит попытаться сначала откатить? Документ по какой-то причине может не стать проведенным?
|
|||
9
yfylhjkjy
20.06.13
✎
09:16
|
Я все делаю в одной транзанкции именно для того, чтобы не получилось так, что я отменил проведение документа, реквизит установил, провести не удалось и он у меня повис не проведенный.
|
|||
10
Ёпрст
20.06.13
✎
09:38
|
(9) а зачем отменять проведение, чтоб поменять реквизит ?!
|
|||
11
Fish
20.06.13
✎
09:41
|
(10) Тоже непонятно. Меняешь реквизит и всё.
|
|||
12
Infsams654
20.06.13
✎
09:49
|
(0) так база-то открыта может у кого еще, или сам что-то ? "в одной самописной базе"
|
|||
13
yfylhjkjy
20.06.13
✎
10:01
|
(9) (10) Для того, чтобы поменять реквизит не нужно отменять проведение. Еще раз: в какой-то хрен знает откуда взявшейся базе есть документ. В зависимости от галочки меняется логика движение. Совершенно не хочется разбираться почему тупое перепроведение с новым значение реквизита не дает такого же эффекта как совокупность действий отмена, изменение реквизита, проведение. Требуется просто решить поставленную задачу.
|
|||
14
yfylhjkjy
20.06.13
✎
10:03
|
конечно, в нормально сделанном документа должно быть дастаточно изменение реквизита и новое проведение, без этих дебрей с отменой.
|
|||
15
trantor77
20.06.13
✎
10:17
|
Если в какой нибудь вложенной транзакции (в данном случае проведение, отмена) возникает откат транзакции откатываются все внешние транзакции. Повлиять на это разработчик на 1С никак не может.
|
|||
16
AaNnDdRrEeYy
20.06.13
✎
10:18
|
(0) Эта ошибка означает что в самом модуле объекта мДок в обработчиках записи (приЗаписи, ОбработикаПроведения и т.д) была ошибка или Отказ = Истина. твоя Попытка погасила это и дальше при фиксации транзакции это все вылезло.
мне кажется эта ошибка из за несоотвествий версий объекта сделай вот так НачатьТранзакцию(); мДок = Результат.Ссылка.ПолучитьОбъект(); мДок.Записать(РежимЗаписиДокумента.ОтменаПроведения); //вот тут я обновляю версию объекта, повторно его получая мДок = мДок.Ссылка.ПолучитьОбъект(); мДок.Подтверждено = Истина; мДок.Записать(РежимЗаписиДокумента.Проведение); ЗафиксироватьТранзакцию(); |
|||
17
yfylhjkjy
20.06.13
✎
11:04
|
(16) Не проканало
|
|||
18
Xatori
20.06.13
✎
12:20
|
(17) Перенеси Код из Обработки проведения в Перед записью, должно взлететь.
|
|||
19
yfylhjkjy
20.06.13
✎
13:27
|
вот так получилось
Пока Результат.Следующий() Цикл НачатьТранзакцию(); Попытка мДок = Результат.Ссылка.ПолучитьОбъект(); мДок.Записать(РежимЗаписиДокумента.ОтменаПроведения); Исключение КонецПопытки; Попытка мДок = мДок.Ссылка.ПолучитьОбъект(); мДок.Подтверждено = Истина; мДок.Записать(РежимЗаписиДокумента.Проведение); Исключение КонецПопытки; ЗафиксироватьТранзакцию(); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |