|
Насколько корректен механизм? | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
26.12.12
✎
15:21
|
День добрый.
Ситуация: - Документ делает движение в регистр. - Документ заполняется автоматически на основании этого регистра без учета движений. Насколько корректно в момент заполнения распроводить документ в транзакции, а потом откатывать транзакцию? Как пример: НачатьТранзакцию(); Если Не ЭтоНовый() Тогда ЭтотОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; ТаблицаДанных=Запрос.Выполнить().Выгрузить(); ОтменитьТранзакцию(); |
|||
1
sapphire
26.12.12
✎
15:23
|
Я бы так делать не стал.
|
|||
2
H A D G E H O G s
26.12.12
✎
15:24
|
(1) Причина?
|
|||
3
mzelensky
26.12.12
✎
15:24
|
(2) а если ГЛЮКАНЕТ и до "ОтменитьТранзакцию();" не дойдет?!
|
|||
4
GROOVY
26.12.12
✎
15:24
|
Подобный механизм в методичке от 1С есть. Но мне не нравится, блокировать таблицы ради забавы в форме... Как то не серьезно.
|
|||
5
sapphire
26.12.12
✎
15:25
|
(4) Так ведь не факт что на форме.
|
|||
6
ptiz
26.12.12
✎
15:25
|
Я бы просто движения почистил.
|
|||
7
Господин ПЖ
26.12.12
✎
15:25
|
(0) по факту это единственный способ без гимороя посчитать средний дневной заработок например...
|
|||
8
sapphire
26.12.12
✎
15:26
|
(0) Подыми ТЖ и посмотри что 1С отправит серванту, если по-душе - то пользуйся на здоровье.
|
|||
9
H A D G E H O G s
26.12.12
✎
15:26
|
(4) Понятно.
Документ работает с 1-им регистром накопления, так что думаю, не критично. |
|||
10
sapphire
26.12.12
✎
15:27
|
(6) Если ты не понял кода в (0) лучше .. того...
|
|||
11
GROOVY
26.12.12
✎
15:27
|
А почему бы в запросе не исключить существующие движения текущего документа?
|
|||
12
Stim
26.12.12
✎
15:27
|
«1С:Предприятие» не поддерживает вложенных
транзакций. Это означает, что всегда действует только транзакция самого верхнего уровня. Все транзакции, вызванные внутри уже открытой транзакции, фактически относятся к той же транзакции, а не образуют вложенную транзакцию. Таким образом, отмена изменений, выполняемая во вложенной транзакции, будет приводить в конечном счете не к отмене изменений самой вложенной транзакции, а к отмене всех изменений транзакции верхнего уровня. (с) |
|||
13
ptiz
26.12.12
✎
15:28
|
(10) Да всё понятно. Чистка движений легче для системы тем, что не срабатывают события документа.
|
|||
14
sapphire
26.12.12
✎
15:28
|
(9) Это как:
Документ заполняется автоматически на основании этого регистра без учета движений. Т.е. на начало месяца или текущий остаток? |
|||
15
sapphire
26.12.12
✎
15:28
|
(12) Не в кассу
|
|||
16
Lys
26.12.12
✎
15:28
|
(0) А зачем распроводить-то?
Какие именно данные из регистра требуется получить - остатки на момент "перед документом", или обороты без учета движений данного документа? |
|||
17
sapphire
26.12.12
✎
15:29
|
(13) Я, наверное, тебя не понимаю.
|
|||
18
sapphire
26.12.12
✎
15:29
|
(16) Остатки без документа.
|
|||
19
Фокусник
26.12.12
✎
15:30
|
(3) Транзакция останется не завершенной, т.е. ничего не произойдет
|
|||
20
H A D G E H O G s
26.12.12
✎
15:30
|
(16) Обороты.
|
|||
21
Lys
26.12.12
✎
15:32
|
(20) Обороты ДО документа, или позиция документа находится внутри интервала получаемых оборотов?
|
|||
22
kumena
26.12.12
✎
15:32
|
(7) там движения для расчета базы нужны, без этого никак.
|
|||
23
х86
26.12.12
✎
15:32
|
(11)+1
я бы оборот по регистру сделанный этим доком "вычел" |
|||
24
H A D G E H O G s
26.12.12
✎
15:33
|
Есть отдельный, рассово верный Учет затрат, строящийся на типовом УчетеЗатратБУ.
И надо приводить его в соответствии с типовым за месяц. |
|||
25
Lys
26.12.12
✎
15:34
|
+(21) в зависимости от ответа - либо в периоде запроса юзаем Границу (ВидГраницы.Исключая), либо (11)
|
|||
26
H A D G E H O G s
26.12.12
✎
15:35
|
(23) Мне лениво было и я запилил (0). Вот думаю про подводные камни.
|
|||
27
H A D G E H O G s
26.12.12
✎
15:37
|
Ладно, понятно, блокировки пока только зло.
|
|||
28
х86
26.12.12
✎
15:38
|
(26)там еще с правами могут быть траблы, т.е. у пользователя может не быть прав на отмену проведения и это всё нужно делать в привилегированном модуле и т.п.
|
|||
29
Dmitrii
гуру
26.12.12
✎
15:44
|
Я бы сделал как-то так:
ТаблицаНабораЗаписей = Движения.МойРегистр.Выгрузить(); Движения.МойРегистр.Очистить(); Движения.МойРегистр.Записать(); ЗаполнитьДокументПоДаннымРегистра(); Движения.МойРегистр.Загрузить(ТаблицаНабораЗаписей); Движения.МойРегистр.Записать(); |
|||
30
ptiz
26.12.12
✎
15:46
|
(29) Только всё равно - только в транзакции.
|
|||
31
GROOVY
26.12.12
✎
15:47
|
(29) Я бы (уж если выбирать из двух зол) остановился на отменетранзакции, чем на 2х записях и загрузки/выгрузки данных движений в ТЗ.
|
|||
32
Dmitrii
гуру
26.12.12
✎
16:03
|
(31) >> чем на 2х записях и загрузки/выгрузки данных движений в ТЗ.
А в транзакции при отмене проведения записи производится не будет? Будет. Да к тому же не по одному регистру, а сразу по всем изменившимся наборам. Плюс запись самого документа и его ТЧ. Потом еще откат транзакции. Единственный сомнительный вопрос по выгрузке/загрузке набора записей через ТЗ. Но тут всё зависит от размера набора записей. |
|||
33
mistеr
26.12.12
✎
16:12
|
(31) Еще вариант снять активность записей.
|
|||
34
GROOVY
26.12.12
✎
16:15
|
(32) Транзакция будет в кеше, по факту запись на диск не произойдет. в (29) будет 2 неявные транзакции, которые успешно завершаться, с блокировками блекджеком и пр.
(33) не вариант, так как записывать набор все равно надо будет. |
|||
35
Dmitrii
гуру
26.12.12
✎
16:20
|
(34) >> Транзакция будет в кеше, по факту запись на диск не произойдет
Как так? Если запись пустого набора не произведена в базу (отмена проведения в кеше), то как тогда получаются запросом (из базы) данные БЕЗ учета записей сделанных документом? |
|||
36
GROOVY
26.12.12
✎
16:31
|
(35) А вот так. Транзакция она на то и транзакция, данные читаются через кеш, для других сеансов данные заблокированы.
|
|||
37
mistеr
26.12.12
✎
16:34
|
(34) Кто ж спорит. По сравнению с пересчетом итогов транзакции это мелочь IMHO.
Раз документ перезаполнятеся, значит итоговые движения будут скорее всего другими. Так что распроводить самое правильное. Только без откатов, как в типовых: "Для заполнения нужно отменить проведение. Продолжить?" |
|||
38
GROOVY
26.12.12
✎
16:37
|
(37) А что после изменения активности пересчета итогов не будет?
|
|||
39
mistеr
26.12.12
✎
17:04
|
(38) Будет. Я не пропихиваю это как лучший вариант. Просто вариант.
|
|||
40
MKZM
26.12.12
✎
17:38
|
Года полтора назад делал создание цепочек связанных документов, если на каком-то этапе возникала ошибка - отменял транзакцию. Все изменения отменялись. Проблем не наблюдалось.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |