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



Какие есть способы писать движения в регистр при проведении документа?

Какие есть способы писать движения в регистр при проведении документа?
Я
   DTX 4th
 
14.12.17 - 13:49
Обычно делаю так:

Движения.Рег.Записывать = Истина;

...// Добавляем движения


Движения.Рег.Записать();


Можно ли делать это как-то иначе, и как правильно?
 
 
   vicof
 
1 - 14.12.17 - 13:50
А зачем ты их два раза записываешь?
   vicof
 
2 - 14.12.17 - 13:51
Почитай статейку про новую методику проведения, там все разжевано
   Borteg
 
3 - 14.12.17 - 13:52
(1) насколько я помню они запишутся всеравно 1 раз, так как при выходе из обработчика проведения, пишутся только те записи у которых есть признак модифицированности.
   DTX 4th
 
4 - 14.12.17 - 13:53
(2) Новой методикой периодиски пользуюсь. Т.е. если не нужно читать измененные данные, то можно убрать Движения.Рег.Записать()? Видимо, оттуда и засело в голове, что надо записать. Или с типовыми механизмами что-то не поделил.
   vicof
 
5 - 14.12.17 - 13:58
"Начнем с последнего: Движения.ОстаткиТоваров.Записать(); Этот способ безусловно запишет данные в регистр накопления. Но при этом флаг "Записывать" у набора записей снят не будет. Но это ерунда, главное тут то, что при большом количестве наборов записей у документа нам придется самостоятельно контролировать что в каком порядке в базу пишется, это может (да что там "может", точно скажется) негативно сказаться на проблеме взаимных блокировок (DeadLock), когда одна транзакция заблокирует таблицу А и будет ждать освобождения таблицы Б, а другая транзакция будет вести себя строго наоборот.
теперь посмотрим как работает метод Движения.Записать(); Метод записывает только те движения документа у которых установлен флаг "Записывать", при этом флаг в итоге снимается, что не приводит к повторной записи движений по окончании транзакции проведения. И главное, Движения.Записать(); всегда записывают движения в том порядке в котором таблицы указаны в дереве метаданных, что на порядок уменьшает шансы взаимных блокировок, ведь все транзакции в одинаковом порядке блокируют таблицы."
   Borteg
 
6 - 14.12.17 - 14:04
(5) жесть какая-то написана. в управляемом режиме блокировок такое даже если захочешь не изобразишь
   Borteg
 
7 - 14.12.17 - 14:14
(0) в целом все зависит от того как у тебя проводятся документы. Ну и лучше писать не отдельные регистр, а или сразу все движения Движения.Записать(), или вообще не использовать записать в обработчике проведения, она сама все проведет
   Fragster
 
8 - 14.12.17 - 14:17
(1) да не, там один раз, ибо при .Записать() флаг системной записи при ЗапиыватьВыбранные или Модифицированные сбрасывается
   Fragster
 
9 - 14.12.17 - 14:17
(6) да запросто
   Borteg
 
10 - 14.12.17 - 14:25
(9) не представляю честно, при менеджером блокировок 1с, записать в регистр накопления где записи блокируются по регистратору одновременно блокировать записи по одному регистратору, так еще и с уровнем изоляции snapshot. Тоесть пишется в 2 транзакциях один и тот же документ?
 
 Рекламное место пустует
   Fragster
 
11 - 14.12.17 - 14:27
(10) 1с многопользовательская
   Borteg
 
12 - 14.12.17 - 14:28
(11) одновременно записывать один и тот же документ в 2 транзакциях? это шутка?
   Fragster
 
13 - 14.12.17 - 14:29
(12) не один и тот же. разные, но по пересекающимся наборам измерений.
   DTX 4th
 
14 - 14.12.17 - 14:29
(2) Перечитал, знания освежил, спасибо

Раньше не понимал, зачем нужно свойство Записывать. Теперь понятно - при начале проведения там уже могут быть данные, которые не нужно записывать.
   Borteg
 
15 - 14.12.17 - 14:31
(13) Касательно написанного,там описан регистр накопления, у него будет 2 разных регистратора, следовательно измерения никак не пересекутся.
   Borteg
 
16 - 14.12.17 - 14:32
(14) Если там есть данные, которые не надо записывать и не указать конструкция записывать=истина, эти же данные и останутся, они даже не сотрутся.
   DTX 4th
 
17 - 14.12.17 - 16:57
(15) Что-то теперь и я запутался.

Как происходит запись нескольких наборов?
Поочередно блокируются регистры и происходит запись, после которой блокировка снимается? Если так, то про DeadLock в (5) написана фигня.
   DTX 4th
 
18 - 18.12.17 - 10:38
Подниму
   DmitrO
 
19 - 18.12.17 - 10:42
(17)Блокировка снимается только при завершении транзакции.
   DTX 4th
 
20 - 18.12.17 - 10:54
(19) Т.е. если документ пишет в два регистра, Регистр1 и Регистр2, то схема проведения будет иметь следующий вид?

Блокировка Регистр1
Запись Регистр1
Блокировка Регистр2
Запись Регистр2
Разблокировка Регистр1
Разблокировка Регистр2
?
   Fragster
 
21 - 18.12.17 - 10:55
нет
   DmitrO
 
22 - 18.12.17 - 11:08
(20)да, думаю что даже при применении Движения.Записать(); порядок будет такой.
   DmitrO
 
23 - 18.12.17 - 11:17
(0)А вообще, об этом почему-то никто не написал. Свойство Записывать у набора записей регистра придумано для применения в паре со свойством метаданных документа "Запись движений при проведении" и его значением "Записывать выбранные".
   DmitrO
 
24 - 18.12.17 - 11:22
Сиськи мнете чета тут..
Ситуации и алгоритмы разные конечно бывают, но такой код:
Движения.Рег.Записывать = Истина;

..// Добавляем движения



Движения.Рег.Записать();

в общем случае не совсем нормальный. Если набор пишется явно, то Записывать = Истина; смысла не имеет.
   Dmitrii
 
25 - 18.12.17 - 12:02
(15) >> описан регистр накопления, у него будет 2 разных регистратора, следовательно измерения никак не пересекутся.

Бред. Не пересекаются наборы в первичных таблицах (т.к. регистраторы разные). В таблицах итогов возможны пересечения.

Сидят два менеджера и оба оформляют док-ты продажи одних и тех же товаров с одного и того же склада. У каждого свой документ. По набору измерений (склад и номенклатура) их наборы записей очень даже пересекутся. Так что, пока проводится документ первого менеджера, таблицы итогов будут заблокированы, а второй будет ждать пока блокировка не будет снята.


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