|
Зачем Движения.Записать(); в процедуре ОбработкаПроведения ? | ☑ | ||
---|---|---|---|---|
0
pavlushov
27.04.18
✎
13:45
|
Обратил внимание что в БП 2.0 и БП 3.0 в процедурах ОбработкаПроведения в конце используется Движения.Записать() - вопрос, зачем? Ведь сама процедура ОбработкаПроведения предусматривает запись движений, я бы понял если бы движения записывались не с замещением а с добавлением, но это не так. Кто знает в чем фишка?
|
|||
1
DrShad
27.04.18
✎
13:46
|
есть некоторые регистры, которые свои движения формируют на основании других
|
|||
2
H A D G E H O G s
27.04.18
✎
13:48
|
(0) Иногда требуется самому управлять порядком записи движений для устранений взаимоблокировок.
|
|||
3
Вафель
27.04.18
✎
13:49
|
Это в БП то? где 1.5 регистра?
|
|||
4
pavlushov
27.04.18
✎
13:51
|
но там просто одним вызовом записываются все уже сформированные движения, т.е. идет так: УчетТоваров.СформироватьДвиженияСписаниеТоваров()
УчетТоваров.СформироватьДвиженияВозвратТоваровПоставщику() УчетТоваров.СформироватьДвиженияКорректировкаСтоимостиТары() ... ... Движения.Записать(); Зачем? |
|||
5
pavlushov
27.04.18
✎
13:55
|
(1) ну тут я понимаю, т.е. ты например записал некий набор и потом запрос сделал по уже записанному регистру, но тут не так, сначала формируются все наборы а потом они разом записываться через вызов Движения.Записать(), т.е. если эту строчку убрать из кода ничего не поменяется, движения и так будут записаны
|
|||
6
Вафель
27.04.18
✎
14:05
|
Может быть дело в этой строчке
|
|||
7
Franchiser
гуру
27.04.18
✎
14:08
|
Может это связано с настройкой в документе по движениям "Удаление движений". Поведение в 2.0 и 3.0 по разному было. В 3.0 нужно писать Записывать = Истина иначе не запишется.
|
|||
8
pavlushov
27.04.18
✎
14:14
|
(7) То что нужно писать Движения.ИмяРегистра.Записывать = Истина, связано со свойством документа (как объекта конфигурации) "Запись движений при проведении", если стоит "Записывать модифицированные" - то платформа сама определяет какие наборы были модифицированы и из запишет, если стоит "Записывать выбранные" то программист сам определяет какие наборы нужно записать, соответственно ты и пишешь Движения.ИмяРегистра.Записывать = Истина
|
|||
9
pavlushov
27.04.18
✎
14:19
|
(6) нет, в ней просто устанавливается флаг Движения.ИмяРегистра.Записывать, т.е. определяются наборы которые будут записаны
|
|||
10
1Сергей
27.04.18
✎
14:33
|
(8) ну, вот и добавили эту строку для этой опции. Чтобы при любом значении записывались движения
|
|||
11
pavlushov
27.04.18
✎
14:38
|
(10) флаг все равно нужен, если у тебя у набора не стоит флаг "Записывать" (Движения.МойРегистр.Записывать) то использование Движения.Записать() не запишет движения, вот если использовать Движения.МойРегистр.Записать() то запишет.
|
|||
12
pavlushov
27.04.18
✎
14:40
|
КоллекцияДвижений (RegisterRecordsCollection)
Записать (Write) Синтаксис: Записать() Описание: Выполняет запись движений при проведении в единой последовательности, т.е. делает то же самое, что делает документ после окончания обработчика ОбработкаПроведения, включая снятие признака Записывать у наборов записей. поэтому то я и не понимаю использование этого метода внутри обработчика ОбработкаПроведения - ладно бы это использовалось в другом месте, ну мы бы обработкой записывали бы движения в регистр |
|||
13
pavlushov
27.04.18
✎
14:43
|
вообще конечно странно, если убрать из обработчика ОбработкаПроведения строчку Движения.Записать(); - то замер производительности не показывает прироста, т.е. вроде как Движения не записываются дважды, за счет вызова метода Записать() и за счет самого обработчика.
|
|||
14
Franchiser
гуру
27.04.18
✎
14:52
|
Прироста и не будет.
Как я понимаю если у документа стоит "Записывать выбранные", то нужно в обработчие проведения по нормальному писать Движения.ИмяРегистра.Записывать = Истина, но даже если это не написал то можно тупо написать Записать(). Но если .Записывать = Истина то можно и не писать Записать(). |
|||
15
Serg_1960
27.04.18
✎
14:58
|
:)
"Новая методика проведения документа в 1С 8.2" (20.01.2014) http://notes1c8.blogspot.ru/2014/01/novaja-metodika-provedenija-dokumenta.html |
|||
16
Franchiser
гуру
27.04.18
✎
15:04
|
А у тебя Записать() идет в самом конце?
|
|||
17
Serg_1960
27.04.18
✎
15:07
|
И поправьте меня, если я не прав, но в теме никто так и не упомянул про подписки на событие.
|
|||
18
тарам пам пам
27.04.18
✎
15:08
|
(13) Движения.Записать() сбрасывает флаг Записывать у всех наборов, потому двойной записи и не происходит.
|
|||
19
Franchiser
гуру
27.04.18
✎
15:11
|
(17) А что подписки? они выполняются в момент записи наборов.
|
|||
20
Serg_1960
27.04.18
✎
15:13
|
Миста такая Миста :) ответ на вопрос автора был дан в первом же посте. А верный ответ, по традиции, будет дан в конце ветки :))
|
|||
21
piter3
27.04.18
✎
15:15
|
(20) А поговорить )
|
|||
22
Serg_1960
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) и какова причина?
|
|||
26
Serg_1960
27.04.18
✎
15:28
|
(24) Ооо... sorry, Акелла промахнулся - я обращался к (19) а не к Вам.
А по поводу (18) - Вы совершенно правы. Если мне память не изменяет, то при явной записи типа Движения.Регистр.Записать() не только модифицированность устанавливается в ложь, но и (что важно) выполняются обработчики "ПередЗаписью", "ПриЗаписи" и подписки "При записи" этого регистра. |
|||
27
Ботаник Гарден Меран
27.04.18
✎
15:30
|
(25)
п.1, конечно, и просто им так удобно. Например, отдельно замерить время записи наборов в общем времени обработки проведения. |
|||
28
Ботаник Гарден Меран
27.04.18
✎
15:39
|
ТС вообще просто недописал, что Движения.Записать() никогда не появляется в процедурах ОбработкаПроведения самой последней строкой.
|
|||
29
pavig
27.04.18
✎
15:47
|
(22)
А что с ними? Объясните присутствующим. |
|||
30
pavig
27.04.18
✎
15:49
|
(26)
Обработчики наборов записей регистров выполняются в любом случае вне зависимости от того, явно эти наборы записывают или не явно. |
|||
31
Serg_1960
27.04.18
✎
15:56
|
(30) Я не буду Вам напоминать про очередность выполнения обработчиков и подписок на события - Вы явно игнорируете этот аспект :)
|
|||
32
pavig
27.04.18
✎
16:01
|
(31)
А что с очередностью не так? Что дает явная запись движений? Другую очередность? При явной записи движений обработчики модулей наборов записей выполняются после обработчиков в подписках? Или может между подписками (сарказм)? Может уже напишете человеческим языком что именно имели в виду и не будете строить из себя всезнайку? |
|||
33
Serg_1960
27.04.18
✎
16:15
|
(32) Ёпрст, "Ты что, дальтоник, Скрипач?"(цы) - я вроде бы русским языком об этом же и говорю. Да, порядок исполнения обработчиков - различный.
При явной записи движений документа обработчики модулей наборов записей (и подписки наборов записей) выполняются до обработчиков в подписках на событие "При проведении". http://catalog.mista.ru/public/417810/ Это же азбука: "Важно понимать: если в обработке проведения документа или в подписках на событие, вызванных ранее, не происходила запись движений регистров в явном виде (Движения.Регистр.Записать()), то движения документа еще НЕ записаны в базу. Поэтому их нельзя получить с помощью запроса, но можно получить из коллекции движений источника." |
|||
34
hhhh
27.04.18
✎
16:20
|
(25) ну для нового контроля остатков, епт. По новому контролю остатков, сначала делаем все движения, а потом уже запрос - контроль на минуса.
|
|||
35
Вафель
27.04.18
✎
16:22
|
(33) ну тут то явно не из-за этого
|
|||
36
Serg_1960
27.04.18
✎
16:26
|
+(33) об особенностях использования "прямой" записи движений в регистры при проведении было сказано ещё в первой ссылке, которую я привёл ранее. Поэтому я счёл возможным, не дублировать информацию оттуда в ветке. Если кто-то (не буду пальцем показывать) ссылку не читал - какие ко мне могут быть вопросы? Укажи ссылку, потом перескажи, потом объясни и ещё раз повтори... а я тут, между прочим, на общественных началах :)
|
|||
37
pavlushov
27.04.18
✎
16:27
|
т.е. разработчику просто нужно чтобы обработчики модулей наборов записей регистров отработали раньше чем подписки завязанные на проведение? И как это практически применимо? Для чего?
Или вообще не это? Нужно чтобы в подписке можно было уже прочитать регистры, а если их явно не записать то и читать еще будет не чего? |
|||
38
pavig
27.04.18
✎
16:31
|
(33)
Ну это же прописные истины, это итак всем ясно и понятно. Я посмел предположить, что Вы какую-то умную вундервафлю тут выкладываете. Даже грешным делом успел подумать что вы имеете ввиду, что порядок обработчиков меняется. Жесть какая. Тем более в контексте (0) это вообще ни о чем не говорит. |
|||
39
Serg_1960
27.04.18
✎
16:33
|
(35) "Тут" это где? :) В том числе и по этой причине.
Разработчик конфигурации максимально сосредоточил "минимально обязательный" набор движений документа в пределах модуля документа. Если можно так выразиться. Они сформированы, проверены и не имеют противоречий - из серии "берите и пользуйтесь" - удобно же ведь. |
|||
40
Serg_1960
27.04.18
✎
16:35
|
(38) Верно, ничего сакрального я и не говорил и даже не претендовал. Автор спросил, ему ответили... я заметил, как мне показалось, что ответ не в полной мере. Ваш Кэп :)
|
|||
41
Вафель
27.04.18
✎
16:37
|
(39) Ботаник уже дал верный ответ. Остальное все фантазии на тему
|
|||
42
pavlushov
27.04.18
✎
16:37
|
(40) т.е. разработчику просто нужно чтобы обработчики модулей наборов записей регистров отработали раньше чем подписки завязанные на проведение? И как это практически применимо? Для чего?
Или вообще не это? Нужно чтобы в подписке можно было уже прочитать регистры, а если их явно не записать то и читать еще будет не чего? |
|||
43
pavlushov
27.04.18
✎
16:41
|
(40) мне просто интересно что же делает подписка? контроль остатков?
|
|||
44
pavig
27.04.18
✎
16:43
|
(42)
Да ничего это не значит. Подписки ни при чем. Правильный ответ был ранее в (27), в т.ч. (1) Мне даже кажется что в БП 3.0 вообще нет такого, чтобы одни регистры формировали свои записи на основе других. То есть для БП это только для удобства замеров и не более. |
|||
45
Serg_1960
27.04.18
✎
16:47
|
(42) "разработчику просто нужно..." - да, в том числе. Если в обработчике модуля документа возникнут ошибки - подписки не будут вызваны.
"Нужно чтобы в подписке можно было" - да, запросом удобнее получать данные, чем запрос объединять с коллекцией движений. PS: ещё раз повторю: подписки на события - это главная причина темы. Просто я обратил внимание на этот аспект в том числе, - на обработчики регистров движений и подписки на события. |
|||
46
Serg_1960
27.04.18
✎
16:48
|
Тьфу, - "это НЕ главная причина темы"
|
|||
47
Serg_1960
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)
Бегло по коду: в модуле проведения СФ используется РС РублевыеСуммыДокументовВВалюте с условием равенства регистратора документам-основаниям СФ. |
|||
51
pavig
27.04.18
✎
17:24
|
(50)
У меня этот регистр вообще пустой. |
|||
52
Ботаник Гарден Меран
27.04.18
✎
17:28
|
(51)
Продолжаем наблюдения: - сумма авансов по взаиморасчетам по бухрегистру; - закупленные товары комитентов (ну это только для 4 кв. 2014). |
|||
53
Serg_1960
27.04.18
✎
17:31
|
Легче найти алгоритм, который автоматически перезаполняет/перепроводит с/ф :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |