Имя: Пароль:
1C
1С v8
Движения в регистр не записываются
, , ,
0 1nvertex
 
17.07.14
14:18
В подписке на событие при проведении, код:
________________________________
НаборТовары = ДокОбъект.Движения.ПартииТоваровНаСкладах;
Если Не НаборТовары.Модифицированность() Тогда
    НаборТовары.Прочитать();
КонецЕсли;

ТЗ_Партии = НаборТовары.Выгрузить();
________________________________

Больше НаборТовары и вообще ПартииТоваровНаСкладах нигде не трогаю, работаю только с ТЗ_Партии.

Почему при оперативном проведении записи в регистре партий появляются через раз? Как исправить?
1 Hans
 
17.07.14
14:20
В обработке проведения документа Движения.записать() есть? Возможно если это написать движения будут всегда.
2 1nvertex
 
17.07.14
14:26
(1) Не помогло.
3 1nvertex
 
17.07.14
14:28
Если мой код убрать записывается все и всегда.
4 Ymryn
 
17.07.14
14:31
НаборТовары.Прочитать(); - вообще вот эта строчка должна очищаться весь набор, если он был изменен в результате обработки на то, что было записано в регистре. Т.е если ты это делаешь после того как заполнил движения, то ты должен бы все потерять. Если делаешь до, то ты должен получить то, что в самом регистре и это никак не должно сказаться. Поэтому тут или всегда не должно записываться, либо вообще никак влиять не должно. Но как-то моя теория расходится с практикой. :(
5 Ymryn
 
17.07.14
14:31
(4) *исправляюсь не очищать, а заменять
6 Ymryn
 
17.07.14
14:32
А врубился, не всегда Модифицированность срабатывает судя по всему.
7 GROOVY
 
17.07.14
14:33
Потому как набор записей еще не был записан в модуле документа. Ты читаешь пустой набор.
8 GROOVY
 
17.07.14
14:34
И, не могу понять в чем сакральный смысл чтения набора записей, если мы не собираемся его изменять?
9 Hans
 
17.07.14
14:41
(8) наверное он что то будет другое писать на основе этих данных.
10 GROOVY
 
17.07.14
14:44
(9) Для чтения (только) не используют объекты, которые система анализирует для установки блокировок.
11 Hans
 
17.07.14
14:50
(10) Пишем как можем. Оптимизировать будем потом.
12 GROOVY
 
17.07.14
14:51
(11) Нет ничего более постоянного, чем временное.
А, что если эта подписка не последняя, а вы там данные чтением поменяли?
13 1nvertex
 
17.07.14
14:52
(6) Ymryn, как такое может быть?
(7) GROOVY, Добавление ДокОбъект.Движения.Записать() перед кодом не помогает.
(8) GROOVY, Анализирую данные для записи в свой регистр.
14 1nvertex
 
17.07.14
14:52
(12) Подписка последняя, больше ничего нет.
15 GROOVY
 
17.07.14
14:54
(13) 2. И не должно.
(14) В системе нельзя угадать последовательность вызова подписок на события. Это четко прописано в документации.
16 Ymryn
 
17.07.14
14:55
(13) Ну я пытаюсь угадать, почему не всегда :) Чревовещание работает пока плохо. В целом, главный вопрос -  НаборТовары.Прочитать();
Вот этим что достигается?
Отдается отчет себе, что это может изменить текущий НаборТовары?
17 1nvertex
 
17.07.14
14:59
(15) Проверил по замеру производительности, подписка последняя. Больше никуда не заходит.
18 Hans
 
17.07.14
15:00
Если движения через раз попробуй побаловаться со свойством "Удалять движения автоматически" и Обработкой удаления проведения.
19 GROOVY
 
17.07.14
15:01
(17) Это хорошо, главное, каждый раз перед запуском проверяй.
Не пойму, а запросом данные не вытащить? Ну или крайняк не менять существующий набор данных, а его копию создать?
20 1nvertex
 
17.07.14
15:09
(19) А смысл создавать копию, если записей в коллекции движений нет? В копии их тоже не будет.
21 1nvertex
 
17.07.14
15:11
(19) Запросом по каким данным? Их еще нигде нет, они не записаны.
22 sirsp
 
17.07.14
15:14
(13) 3. Может стоит подписаться на запись регистра, а не документа?
23 LORD
 
17.07.14
15:16
РегистрНакопления.МодульНаборЗаписей
24 LORD
 
17.07.14
15:16
может через него проще?
25 РенеДекарт
 
17.07.14
15:17
(0) вот тут уже ерунда:
>В подписке на событие при проведении
>Если Не НаборТовары.Модифицированность()
>НаборТовары.Прочитать();
- вы что, при проведении порядок проведения по регситрам (и модифицированность) хотите отловить? Да еще потом и прочитать именнно то, что нужно, а не то, что еще не успело записаться? Вы еще в транзакцию влезьте, чтобы в её середине - поменять у неё конец ))
Независимо от того, куда вы едете — это в гору и против ветра!