Имя: Пароль:
1C
1С v8
Нужно ли отмена проведения в транзакции 1с 8
0 DmitriyDI
 
09.02.17
16:55
НачатьТранзакцию();
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

// тут меняем что-то в накладной

ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.неОперативный);
ЗафиксироватьТранзакцию();

нужна ли в этой конструкции отмена проведения, может в ней есть какой-то смысл, держит накладную пока происходят изменения чтобы ее никто не мог изменить или что-то еще?
1 elCust
 
09.02.17
17:04
(0) держит накладную пока происходят изменения чтобы ее никто не мог изменить

Этим занимается блокировка, транзакция немного другое делает
2 Лефмихалыч
 
09.02.17
17:07
смотря что в обработке проведения написано. Если там написано прямыми руками, то - не нужна. А, если кривыми и вызов Записать(РежимЗаписиДокумента.Проведение) завершится неудачей по причине того, что документ именно проведен, то - обязательно.
Но это надо очень кривые и злые руки иметь
3 H A D G E H O G s
 
09.02.17
17:13
(1) Этим нанимается блокировка, накладываемая на время действия транзакции. Все автор правильно рассуждает.
4 Heckfy
 
09.02.17
17:14
(0) Нужна. А если сбой аппаратный например? Без транзакции часть движений может остаться.
5 H A D G E H O G s
 
09.02.17
17:14
(0) Ты для себя (и нас) ответь на вопрос - зачем тебе транзакция.

- Чтобы никто не успел залезть между
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
и
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.неОперативный);
в этот документ?

- Чтобы, если не удалось перепровести - вернуть к исходному положению?
6 DmitriyDI
 
09.02.17
17:22
(5) если он ее не перепроведет он и так вернется к исходному положению, без транзакции, я так понимаю

так как в базе много других регламентных заданий, думаю нужно чтобы в момент когда она изменяет документ никто его не трогал, код этот изначально не мой
7 DmitriyDI
 
09.02.17
17:37
(2) да я думал об этом, если там только написано, что-то типа того , если проведен то отказ = истина, но такого не нашел там..
8 Serg_1960
 
09.02.17
17:42
Если это типовая конфигурация, то ни отмена проведения, ни транзакции, в принципе, не нужны.

// Тут меняем что-то в накладной
...
НачатьТранзакцию();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.неОперативный);
ЗафиксироватьТранзакцию();
9 youalex
 
09.02.17
17:48
(6) при записи - возникает неявная транзакция, при ошибке (или явном указании Отказ = Истина) - вызывается исключение, которое откатывает эту транзакцию (и данные документа, и его движения, и вообще все, что было изменено в этой транзакции) Точнее, то что было изменено - не фиксируется в случае отмены
10 DmitriyDI
 
09.02.17
17:53
(9) а разве они зафиксируются в случае отмены, если не написать вначале:
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
11 Вафель
 
09.02.17
18:00
в ерп например некоторые документы проводятся по разному с отменой и без
12 Вафель
 
09.02.17
18:01
чистое перепроведение может сохранять результаты закрытия месяца
13 DmitriyDI
 
09.02.17
18:02
Конфигурация комплексная 1.1, документ реализация
14 DmitriyDI
 
09.02.17
18:03
и сразу второй вопрос, если это не влияет и я уберу отмену проведения, то это по идее должно ускорить данный кусок кода, или нет?
15 Serg_1960
 
09.02.17
18:09
(11) Отмена проведения - не самоцель, она не нужна как таковая для перепроведения документа.

Но: если перед проведением документа анализируется состояние регистров, и в этих алгоритмах не предусмотрено учитывать движения этого документа, то документ требуется снимать с проведения. Нужно или не нужно отменять проведение - смотреть в конфигурации.
16 Serg_1960
 
09.02.17
18:11
+ В моей, например, конфигурации движения документа удаляются автоматически при проведении документа.
17 DmitriyDI
 
09.02.17
18:13
(15) согласен, тут такого нет