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


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

Зачем Движения.Записать(); в процедуре ОбработкаПроведения ?

Зачем Движения.Записать(); в процедуре ОбработкаПроведения ?
Я
   pavlushov
 
27.04.18 - 13:45
Обратил внимание что в БП 2.0 и БП 3.0 в процедурах ОбработкаПроведения в конце используется Движения.Записать() - вопрос, зачем? Ведь сама процедура ОбработкаПроведения предусматривает запись движений, я бы понял если бы движения записывались не с замещением а с добавлением, но это не так. Кто знает в чем фишка?
 
 
   DrShad
 
1 - 27.04.18 - 13:46
есть некоторые регистры, которые свои движения формируют на основании других
   H A D G E H O G s
 
2 - 27.04.18 - 13:48
(0) Иногда требуется самому управлять порядком записи движений для устранений взаимоблокировок.
   Вафель
 
3 - 27.04.18 - 13:49
Это в БП то? где 1.5 регистра?
   pavlushov
 
4 - 27.04.18 - 13:51
но там просто одним вызовом записываются все уже сформированные движения, т.е. идет так: УчетТоваров.СформироватьДвиженияСписаниеТоваров()
УчетТоваров.СформироватьДвиженияВозвратТоваровПоставщику()
УчетТоваров.СформироватьДвиженияКорректировкаСтоимостиТары()
...
...
Движения.Записать();

Зачем?
   pavlushov
 
5 - 27.04.18 - 13:55
(1) ну тут я понимаю, т.е. ты например записал некий набор и потом запрос сделал по уже записанному регистру, но тут не так, сначала формируются все наборы а потом они разом записываться через вызов Движения.Записать(), т.е. если эту строчку убрать из кода ничего не поменяется, движения и так будут записаны
   Вафель
 
6 - 27.04.18 - 14:05
Может быть дело в этой строчке
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);

   Franchiser
 
7 - 27.04.18 - 14:08
Может это связано с настройкой в документе по движениям "Удаление движений". Поведение в 2.0 и 3.0 по разному было. В 3.0 нужно писать Записывать = Истина иначе не запишется.
   pavlushov
 
8 - 27.04.18 - 14:14
(7) То что нужно писать Движения.ИмяРегистра.Записывать = Истина, связано со свойством документа (как объекта конфигурации) "Запись движений при проведении", если стоит "Записывать модифицированные" - то платформа сама определяет какие наборы были модифицированы и из запишет, если стоит "Записывать выбранные" то программист сам определяет какие наборы нужно записать, соответственно ты и пишешь Движения.ИмяРегистра.Записывать = Истина
   pavlushov
 
9 - 27.04.18 - 14:19
(6) нет, в ней просто устанавливается флаг Движения.ИмяРегистра.Записывать, т.е. определяются наборы которые будут записаны
   1Сергей
 
10 - 27.04.18 - 14:33
(8) ну, вот и добавили эту строку для этой опции. Чтобы при любом значении записывались движения
 
 Рекламное место пустует
   pavlushov
 
11 - 27.04.18 - 14:38
(10) флаг все равно нужен, если у тебя у набора не стоит флаг "Записывать" (Движения.МойРегистр.Записывать) то использование Движения.Записать() не запишет движения, вот если использовать Движения.МойРегистр.Записать() то запишет.
   pavlushov
 
12 - 27.04.18 - 14:40
КоллекцияДвижений (RegisterRecordsCollection)
Записать (Write)
Синтаксис:

Записать()
Описание:

Выполняет запись движений при проведении в единой последовательности, т.е. делает то же самое, что делает документ после окончания обработчика ОбработкаПроведения, включая снятие признака Записывать у наборов записей.

поэтому то я и не понимаю использование этого метода внутри обработчика ОбработкаПроведения - ладно бы это использовалось в другом месте, ну мы бы обработкой записывали бы движения в регистр
   pavlushov
 
13 - 27.04.18 - 14:43
вообще конечно странно, если убрать из обработчика ОбработкаПроведения строчку Движения.Записать(); - то замер производительности не показывает прироста, т.е. вроде как Движения не записываются дважды, за счет вызова метода Записать() и за счет самого обработчика.
   Franchiser
 
14 - 27.04.18 - 14:52
Прироста и не будет.
Как я понимаю если у документа стоит "Записывать выбранные", то нужно  в обработчие проведения по нормальному писать Движения.ИмяРегистра.Записывать = Истина, но даже если это не написал то можно тупо написать Записать(). Но если .Записывать = Истина то можно и не писать Записать().
   Serg_1960
 
15 - 27.04.18 - 14:58
:)

"Новая методика проведения документа в 1С 8.2" (20.01.2014)
http://notes1c8.blogspot.ru/2014/01/novaja-metodika-provedenija-dokumenta.html
   Franchiser
 
16 - 27.04.18 - 15:04
А у тебя Записать() идет в самом конце?
   Serg_1960
 
17 - 27.04.18 - 15:07
И поправьте меня, если я не прав, но в теме никто так и не упомянул про подписки на событие.
   тарам пам пам
 
18 - 27.04.18 - 15:08
(13) Движения.Записать() сбрасывает флаг Записывать у всех наборов, потому двойной записи и не происходит.
   Franchiser
 
19 - 27.04.18 - 15:11
(17) А что подписки? они выполняются в момент записи наборов.
   Serg_1960
 
20 - 27.04.18 - 15:13
Миста такая Миста :) ответ на вопрос автора был дан в первом же посте. А верный ответ, по традиции, будет дан в конце ветки :))
   piter3
 
21 - 27.04.18 - 15:15
(20) А поговорить )
   Serg_1960
 
22 - 27.04.18 - 15:16
(18) Вы, как и все остальные, забыли про подписки на событие "При проведении"(ОбработкаПроведения) документа?
   Ботаник Гарден Меран
 
23 - 27.04.18 - 15:21
На партнерке в 2014 еще вопрос разжеван.
   тарам пам пам
 
24 - 27.04.18 - 15:22
(22) Я отвечал на вопрос "почему запись не происходит дважды", каким боком тут вообще подписки?
   Вафель
 
25 - 27.04.18 - 15:27
(23) и какова причина?
   Serg_1960
 
26 - 27.04.18 - 15:28
(24) Ооо... sorry, Акелла промахнулся - я обращался к (19) а не к Вам.

А по поводу (18) - Вы совершенно правы.

Если мне память не изменяет, то при явной записи типа Движения.Регистр.Записать() не только модифицированность устанавливается в ложь, но и (что важно) выполняются обработчики "ПередЗаписью", "ПриЗаписи" и подписки "При записи" этого регистра.
   Ботаник Гарден Меран
 
27 - 27.04.18 - 15:30
(25)
п.1, конечно, и просто им так удобно. Например, отдельно замерить время записи наборов в общем времени обработки проведения.
   Ботаник Гарден Меран
 
28 - 27.04.18 - 15:39
ТС вообще просто недописал, что Движения.Записать() никогда не появляется в процедурах ОбработкаПроведения самой последней строкой.
   pavig
 
29 - 27.04.18 - 15:47
(22)
А что с ними?
Объясните присутствующим.
   pavig
 
30 - 27.04.18 - 15:49
(26)
Обработчики наборов записей регистров выполняются в любом случае вне зависимости от того, явно эти наборы записывают или не явно.
   Serg_1960
 
31 - 27.04.18 - 15:56
(30) Я не буду Вам напоминать про очередность выполнения обработчиков и подписок на события - Вы явно игнорируете этот аспект :)
   pavig
 
32 - 27.04.18 - 16:01
(31)
А что с очередностью не так? Что дает явная запись движений? Другую очередность?
При явной записи движений обработчики модулей наборов записей выполняются после обработчиков в подписках? Или может между подписками (сарказм)?

Может уже напишете человеческим языком что именно имели в виду и не будете строить из себя всезнайку?
   Serg_1960
 
33 - 27.04.18 - 16:15
(32) Ёпрст, "Ты что, дальтоник, Скрипач?"(цы) - я вроде бы русским языком об этом же и говорю. Да, порядок исполнения обработчиков - различный.
При явной записи движений документа обработчики модулей наборов записей (и подписки наборов записей) выполняются до обработчиков в подписках на событие "При проведении".

http://catalog.mista.ru/public/417810/
Это же азбука:
"Важно понимать: если в обработке проведения документа или в подписках на событие, вызванных ранее, не происходила запись движений регистров в явном виде (Движения.Регистр.Записать()), то движения документа еще НЕ записаны в базу. Поэтому их нельзя получить с помощью запроса, но можно получить из коллекции движений источника."
 
 
   hhhh
 
34 - 27.04.18 - 16:20
(25) ну для нового контроля остатков, епт. По новому контролю остатков, сначала делаем все движения, а потом уже запрос - контроль на минуса.
   Вафель
 
35 - 27.04.18 - 16:22
(33) ну тут то явно не из-за этого
   Serg_1960
 
36 - 27.04.18 - 16:26
+(33) об особенностях использования "прямой" записи движений в регистры при проведении было сказано ещё в первой ссылке, которую я привёл ранее. Поэтому я счёл возможным, не дублировать информацию оттуда в ветке. Если кто-то (не буду пальцем показывать) ссылку не читал - какие ко мне могут быть вопросы? Укажи ссылку, потом перескажи, потом объясни и ещё раз повтори... а я тут, между прочим, на общественных началах :)
   pavlushov
 
37 - 27.04.18 - 16:27
т.е. разработчику просто нужно чтобы обработчики модулей наборов записей регистров отработали раньше чем подписки завязанные на проведение? И как это практически применимо? Для чего?

Или вообще не это? Нужно чтобы в подписке можно было уже прочитать регистры, а если их явно не записать то и читать еще будет не чего?
   pavig
 
38 - 27.04.18 - 16:31
(33)
Ну это же прописные истины, это итак всем ясно и понятно.
Я посмел предположить, что Вы какую-то умную вундервафлю тут выкладываете. Даже грешным делом успел подумать что вы имеете ввиду, что порядок обработчиков меняется.
Жесть какая.
Тем более в контексте (0) это вообще ни о чем не говорит.
   Serg_1960
 
39 - 27.04.18 - 16:33
(35) "Тут" это где? :) В том числе и по этой причине.

Разработчик конфигурации максимально сосредоточил "минимально обязательный" набор движений документа в пределах модуля документа. Если можно так выразиться. Они сформированы, проверены и не имеют противоречий - из серии "берите и пользуйтесь" - удобно же ведь.
   Serg_1960
 
40 - 27.04.18 - 16:35
(38) Верно, ничего сакрального я и не говорил и даже не претендовал. Автор спросил, ему ответили... я заметил, как мне показалось, что ответ не в полной мере. Ваш Кэп :)
   Вафель
 
41 - 27.04.18 - 16:37
(39) Ботаник уже дал верный ответ. Остальное все фантазии на тему
   pavlushov
 
42 - 27.04.18 - 16:37
(40) т.е. разработчику просто нужно чтобы обработчики модулей наборов записей регистров отработали раньше чем подписки завязанные на проведение? И как это практически применимо? Для чего?

Или вообще не это? Нужно чтобы в подписке можно было уже прочитать регистры, а если их явно не записать то и читать еще будет не чего?
   pavlushov
 
43 - 27.04.18 - 16:41
(40) мне просто интересно что же делает подписка? контроль остатков?
   pavig
 
44 - 27.04.18 - 16:43
(42)
Да ничего это не значит. Подписки ни при чем.
Правильный ответ был ранее в (27), в т.ч. (1)

Мне даже кажется что в БП 3.0 вообще нет такого, чтобы одни регистры формировали свои записи на основе других. То есть для БП это только для удобства замеров и не более.
   Serg_1960
 
45 - 27.04.18 - 16:47
(42) "разработчику просто нужно..." - да, в том числе. Если в обработчике модуля документа возникнут ошибки - подписки не будут вызваны.
"Нужно чтобы в подписке можно было" - да, запросом удобнее получать данные, чем запрос объединять с коллекцией движений.

PS: ещё раз повторю: подписки на события - это главная причина темы. Просто я обратил внимание на этот аспект в том числе, - на обработчики регистров движений и подписки на события.
   Serg_1960
 
46 - 27.04.18 - 16:48
Тьфу, - "это НЕ главная причина темы"
   Serg_1960
 
47 - 27.04.18 - 16:56
(44) Имхо, как мне кажется, дело тут не только в БП, а в БСП и в унификации и приведению к единообразию алгоритмов конфигураций. Вот, например, в УПП проблема такая досталась от того, что она собрана из различны конфигураций: часть движений уже "видна" запросом, а другая часть - доступна только через Источник.Движения...
   Ботаник Гарден Меран
 
48 - 27.04.18 - 16:59
(44)
В БП это вообще не для регистров, а для счетов-фактур, которые формируются на основании (меняют статус при удалении документа-основания и т.д.).
   Вафель
 
49 - 27.04.18 - 17:00
(48) а зачем движения записанные для счет-фактур
 
 Рекламное место пустует
   Ботаник Гарден Меран
 
50 - 27.04.18 - 17:22
(49)
Бегло по коду:
в модуле проведения СФ используется РС РублевыеСуммыДокументовВВалюте с условием равенства регистратора документам-основаниям СФ.
   pavig
 
51 - 27.04.18 - 17:24
(50)
У меня этот регистр вообще пустой.
   Ботаник Гарден Меран
 
52 - 27.04.18 - 17:28
(51)
Продолжаем наблюдения:
- сумма авансов по взаиморасчетам по бухрегистру;
- закупленные товары комитентов (ну это только для 4 кв. 2014).
   Serg_1960
 
53 - 27.04.18 - 17:31
Легче найти алгоритм, который автоматически перезаполняет/перепроводит с/ф :)


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