Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Насколько корректен механизм?

Насколько корректен механизм?
Я
   H A D G E H O G s
 
26.12.12 - 15:21
День добрый.
Ситуация:
- Документ делает движение в регистр.
- Документ заполняется автоматически на основании этого регистра без учета движений.

Насколько корректно в момент заполнения распроводить документ в транзакции, а потом откатывать транзакцию?

Как пример:

    НачатьТранзакцию();
    Если Не ЭтоНовый() Тогда
        ЭтотОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    КонецЕсли;
    
    ТаблицаДанных=Запрос.Выполнить().Выгрузить();
    ОтменитьТранзакцию();
 
 
   sapphire
 
1 - 26.12.12 - 15:23
Я бы так делать не стал.
   H A D G E H O G s
 
2 - 26.12.12 - 15:24
(1) Причина?
   mzelensky
 
3 - 26.12.12 - 15:24
(2) а если ГЛЮКАНЕТ и до "ОтменитьТранзакцию();" не дойдет?!
   GROOVY
 
4 - 26.12.12 - 15:24
Подобный механизм в методичке от 1С есть. Но мне не нравится, блокировать таблицы ради забавы в форме... Как то не серьезно.
   sapphire
 
5 - 26.12.12 - 15:25
(4) Так ведь не факт что на форме.
   ptiz
 
6 - 26.12.12 - 15:25
Я бы просто движения почистил.
   Господин ПЖ
 
7 - 26.12.12 - 15:25
(0) по факту это единственный способ без гимороя посчитать средний дневной заработок например...
   sapphire
 
8 - 26.12.12 - 15:26
(0) Подыми ТЖ и посмотри что 1С отправит серванту, если по-душе - то пользуйся на здоровье.
   H A D G E H O G s
 
9 - 26.12.12 - 15:26
(4) Понятно.
Документ работает с 1-им регистром накопления, так что думаю, не критично.
   sapphire
 
10 - 26.12.12 - 15:27
(6) Если ты не понял кода в (0) лучше .. того...
 
 Рекламное место пустует
   GROOVY
 
11 - 26.12.12 - 15:27
А почему бы в запросе не исключить существующие движения текущего документа?
   Stim
 
12 - 26.12.12 - 15:27
«1С:Предприятие» не поддерживает вложенных
транзакций. Это означает, что всегда действует только транзакция самого верхнего уровня. Все транзакции, вызванные внутри уже открытой транзакции, фактически относятся к той же транзакции, а не образуют вложенную транзакцию. Таким образом, отмена изменений, выполняемая во вложенной транзакции, будет приводить в конечном счете не к отмене
изменений самой вложенной транзакции, а к отмене всех изменений транзакции верхнего уровня.
(с)
   ptiz
 
13 - 26.12.12 - 15:28
(10) Да всё понятно. Чистка движений легче для системы тем, что не срабатывают события документа.
   sapphire
 
14 - 26.12.12 - 15:28
(9) Это как:
Документ заполняется автоматически на основании этого регистра без учета движений.

Т.е. на начало месяца или текущий остаток?
   sapphire
 
15 - 26.12.12 - 15:28
(12) Не в кассу
   Lys
 
16 - 26.12.12 - 15:28
(0) А зачем распроводить-то?
Какие именно данные из регистра требуется получить - остатки на момент "перед документом", или обороты без учета движений данного документа?
   sapphire
 
17 - 26.12.12 - 15:29
(13) Я, наверное, тебя не понимаю.
   sapphire
 
18 - 26.12.12 - 15:29
(16) Остатки без документа.
   Фокусник
 
19 - 26.12.12 - 15:30
(3) Транзакция останется не завершенной, т.е. ничего не произойдет
   H A D G E H O G s
 
20 - 26.12.12 - 15:30
(16) Обороты.
   Lys
 
21 - 26.12.12 - 15:32
(20) Обороты ДО документа, или позиция документа находится внутри интервала получаемых оборотов?
   kumena
 
22 - 26.12.12 - 15:32
(7) там движения для расчета базы нужны, без этого никак.
   х86
 
23 - 26.12.12 - 15:32
(11)+1
я бы оборот по регистру сделанный этим доком "вычел"
   H A D G E H O G s
 
24 - 26.12.12 - 15:33
Есть отдельный, рассово верный Учет затрат, строящийся на типовом УчетеЗатратБУ.

И надо приводить его в соответствии с типовым за месяц.
   Lys
 
25 - 26.12.12 - 15:34
+(21) в зависимости от ответа - либо в периоде запроса юзаем Границу (ВидГраницы.Исключая), либо (11)
   H A D G E H O G s
 
26 - 26.12.12 - 15:35
(23) Мне лениво было и я запилил (0). Вот думаю про подводные камни.
   H A D G E H O G s
 
27 - 26.12.12 - 15:37
Ладно, понятно, блокировки пока только зло.
   х86
 
28 - 26.12.12 - 15:38
(26)там еще с правами могут быть траблы, т.е. у пользователя может не быть прав на отмену проведения и это всё нужно делать в привилегированном модуле и т.п.
   Dmitrii
 
29 - 26.12.12 - 15:44
Я бы сделал как-то так:

 ТаблицаНабораЗаписей = Движения.МойРегистр.Выгрузить();
 Движения.МойРегистр.Очистить();
 Движения.МойРегистр.Записать();
 ЗаполнитьДокументПоДаннымРегистра();
 Движения.МойРегистр.Загрузить(ТаблицаНабораЗаписей);
 Движения.МойРегистр.Записать();
   ptiz
 
30 - 26.12.12 - 15:46
(29) Только всё равно - только в транзакции.
   GROOVY
 
31 - 26.12.12 - 15:47
(29) Я бы (уж если выбирать из двух зол) остановился на отменетранзакции, чем на 2х записях и загрузки/выгрузки данных движений в ТЗ.
   Dmitrii
 
32 - 26.12.12 - 16:03
(31) >> чем на 2х записях и загрузки/выгрузки данных движений в ТЗ.

А в транзакции при отмене проведения записи производится не будет?
Будет. Да к тому же не по одному регистру, а сразу по всем изменившимся наборам. Плюс запись самого документа и его ТЧ.
Потом еще откат транзакции.

Единственный сомнительный вопрос по выгрузке/загрузке набора записей через ТЗ. Но тут всё зависит от размера набора записей.
   mistеr
 
33 - 26.12.12 - 16:12
(31) Еще вариант снять активность записей.
 
 
   GROOVY
 
34 - 26.12.12 - 16:15
(32) Транзакция будет в кеше, по факту запись на диск не произойдет. в (29) будет 2 неявные транзакции, которые успешно завершаться, с блокировками блекджеком и пр.

(33) не вариант, так как записывать набор все равно надо будет.
   Dmitrii
 
35 - 26.12.12 - 16:20
(34) >> Транзакция будет в кеше, по факту запись на диск не произойдет

Как так?
Если запись пустого набора не произведена в базу (отмена проведения в кеше), то как тогда получаются запросом (из базы) данные БЕЗ учета записей сделанных документом?
   GROOVY
 
36 - 26.12.12 - 16:31
(35) А вот так. Транзакция она на то и транзакция, данные читаются через кеш, для других сеансов данные заблокированы.
   mistеr
 
37 - 26.12.12 - 16:34
(34) Кто ж спорит. По сравнению с пересчетом итогов транзакции это мелочь IMHO.

Раз документ перезаполнятеся, значит итоговые движения будут скорее всего другими. Так что распроводить самое правильное. Только без откатов, как в типовых: "Для заполнения нужно отменить проведение. Продолжить?"
   GROOVY
 
38 - 26.12.12 - 16:37
(37) А что после изменения активности пересчета итогов не будет?
   mistеr
 
39 - 26.12.12 - 17:04
(38) Будет. Я не пропихиваю это как лучший вариант. Просто вариант.
   MKZM
 
40 - 26.12.12 - 17:38
Года полтора назад делал создание цепочек связанных документов, если на каком-то этапе возникала ошибка - отменял транзакцию. Все изменения отменялись. Проблем не наблюдалось.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует