Движения по регистрам в подписке на проведение документа #555808


#0 by Ayvengo
Вот текст кода: За запрос не кусайте больно :P             Почему так? Видимо я опять чего-то недопонимаю :( УПП 1.3.13.1. Добавил подписку при проведении и при записи, результат везде один и тот же ... :( ЧЯДНТ?
#1 by Живой Ископаемый
потому что не прочитал движения.
#2 by Ayvengo
Дааа! Движения по регистру ТоварыНаСкладах присутствуют ;) т.е. Источник.Движения.ТоварыНаСкладах.Количество = N
#3 by Lys
Потому, что на момент выполнения твоего кода движения документа по этому регистру уже ЗАПИСАНЫ в базу. А коллекция Движения - содержит только незаписанные наборы движений документа.
#4 by Ayvengo
а какого они записаны, если документ еще не проведен? о_О типовая конфигурация = 3
#5 by Axel2009
а прочитать кто будет писать?
#6 by Ayvengo
а почему ???
#7 by Axel2009
когда дошло до процедуры "ОбработкаПроведения", документ уже проведен.
#8 by Живой Ископаемый
2 ваш ответ противоречит тому, что имеет автор - в Движениях у него 0 а в запросе - не 0... ==== 2 давай ты расскажешь что тебе нужно ==== 2 он даже читать про прочитать не хочет, не то что писать
#9 by Axel2009
потому что один регистр добавляли через Документ.Движения.ТоварыНаСкладах, а другой через РегистрыНакопления.ПартииТоваровНаСкладах.СоздатьНаборЗаписей
#10 by Ayvengo
туда же .. читаем
#11 by Живой Ископаемый
2 их кто-то другой за тебя прочитал
#12 by Живой Ископаемый
2 нет, это ты читай... буквари.
#13 by Ayvengo
Всем спасибо, Прочитать помогло, но все-равно как-то не правильно .. в одном месте движения есть а в другом нету ... мне кажется Вы не правы = 3
#14 by Lys
Потому что движения в процессе проведения документа можно записать "принудительно", кодом. Что и делается в типовых, много где. Кроме того, подписка "ПриПроведении" выполняется ПОСЛЕ отработки основной "ОбработкиПроведения". А вот "Прочитать" - не надо советовать автору... использование этого метода внутри транзакции проведения таит в себе столько подводных камней, что лучше - нуегонафик...
#15 by Axel2009
чукча писатель? написал же в
#16 by Живой Ископаемый
2 ни одного не содержит
#17 by Lys
А ты пробегись по "ОбработкеПроведения", найди место, в котором формируются движения по ПартиямТоваровНаСкладах... затем сравни, как формируются движения по ТоварамНаСкладах. Тогда и поглядим, кто прав=)
#18 by Ayvengo
и что лучше использовать? если все так плохо ... извиняюсь, не обратил внимания на ник :(
#19 by Happy Bear
Хватит воду лить, прямо скажи.
#20 by Lys
Гм... у меня есть обратный пример, когда действия одного моего неопытного коллеги с использованием Прочитать привели к "пропаже" движений у проведенных документов при перепроведении.
#21 by Axel2009
а что если "принудительно записать", тогда записи в движениях пропадают? =)
#22 by Lys
Прямо сказали в
#23 by Живой Ископаемый
2 уже сказано в
#24 by Живой Ископаемый
тьфу, то есть
#25 by Axel2009
прочитать без очистить? =)
#26 by Axel2009
в ни разу не подводный камень.
#27 by Lys
В коллекции Движения документа-объекта - да.
#28 by Ayvengo
2 Lys, Вы говорите о том, что если мы прочитаем ... допустим в моем случае (есть движения по регистру ТоварыНаСкладах) прочитаем ТоварыНаСкладах, то они очистятся? Попробовал, вроде бы все нормально .. ничего никуда не пропало ...
#29 by Живой Ископаемый
2 ну... это вы мелко копнули, я думаю это из-за того что просто с утра испортил себе как-нить образом карму... Потому что corralation is not a causation. B без объяснения конкретных причин мы такие заявления отметаем как голословные.
#30 by Живой Ископаемый
2 все будет в порядке, не суетись.
#31 by Живой Ископаемый
correlation
#32 by Lys
Если интересно, могу рассказать подробную "механику" косяка.
#33 by Axel2009
у меня наверна 1ска делает неправильный мед =)
#34 by Живой Ископаемый
2 дядька, это Миста-форум... если ты не описываешь подробную механику, то это все равно что просто сотрясаешь воздух - тут никто никому на слово не верит
#35 by Axel2009
подробная механика состояла в том, что небыло прочитать, а потом пользовалась записать, и в итоге старые данные потирались, так как по умолчанию стоит <Замещать> как истина =)
#36 by Lys
Ок, спорить не буду - проверю сам. В памяти обратное сидит. Возможно, что-то путаю. Там как раз был другой случай: использовалось Прочитать + автоматическая запись движений при проведении.
#37 by Axel2009
о боже, меняю на все равно выводит "1"
#38 by Живой Ископаемый
2 было бы интересно.
#39 by Lys
+ Подробнее: ДокументОбъект, движения по регистрам формируются как в - часть непосредственно через заполнение Движения, часть - через СоздатьНаборЗаписей. Подписка - "ПриПроведении". Внутри подписки мой коллега бездумно использовал конструкцию Для Каждого Движение Из Источник.Движения Цикл   .... Далее - завершение транзакции проведения, и соответственно - запись наборов движений из коллекции Движения. Автоматическая. Естественно, в итоге движения у проведенного документ  отсутствуют.
#40 by Axel2009
понятно что у коллеги подводный камень. и каково же было решение данной проблемы? =)
#41 by Axel2009
+ я наверна отстал от жизни.. что такое "Автоматическая запись наборов движений"?
#42 by Lys
- Решение - не использовать Прочитать в подписке ПриПроведении. Задача коллеги в итоге решилась другим способом.
#43 by Axel2009
ну так и интересно как же этот "подводный камень" можно "обойти" =)
#44 by Axel2009
относится к
#45 by Lys
Ну, если тот факт, что заполненные наборы записей в коллекции "Движения" при окончании проведения документа фиксируются в БД автоматически, без вызова метода Записать - тогда да, отстал.
#46 by Lys
+ *если этот факт для тебя неизвестен*
#47 by Axel2009
факт в том, что они фиксируются, если у объекта (регистра накопления) взводится флаг "Модифицированность". для этого достаточно изменить набор записей, но не "прочитать". поэтому понятий как "автоматическая" или "не автоматическая" запись нет. набор модифицирован - записываем, не модифицирован - пропускаем.
#48 by Lys
И в чем тут противоречие моим словам? =)
#49 by Axel2009
+ ну и в добавок - "задача решилась ... другим способом" написана так, что ее решили способом ноухау. хотя достаточно было добавить КонецЕсли; я конечно не знаю что там нужно было, но пафос меня убил =)
#50 by Axel2009
в том, что убрать флажок "автоматический" нельзя. потому как его просто нет.
#51 by Lys
Я где-то говорил про флажок "автоматический"? Не надо придумывать за меня то, чего я не говорил.
#52 by Axel2009
ну нету в 1с понятия как автоматическая запись. есть документ. по нему есть движения Товар - Количество 4. код проведения: после проведения документа, строка с "Количество = 4" осталась.
#53 by Lys
А что стало с добавленной строкой с Количество=2? И когда появилась строка с Количество=4 - в этой же транзакции проведения, или это "старое" движение ранее проведенного документа? И каков режим удаления движений при перепроведении? А то сдается мне, что мы пытаемся разными словами говорить об одном и том же.
#54 by Axel2009
я говорю лишь то что автоматической записи нету. движения были до проведения. движения не удаляются автоматически. но после "прочитать" движения не удаляются "автоматически". потому как после прочитать "Модифицированность" ставится в ложь. если к коду добавить Движения.Товары.Очистить; то все, старые движения удалятся. потому как была модифицированность Движения.
#55 by Lys
А теперь измени режим удаления движений при перепроведении на "автоматически" и посмотри, что будет...
#56 by Axel2009
"автоматически" движения записываться от этого не начнут. данные удалились до процедуры "обработка проведения". после прочитать Модифицированность сбрасывается в ложь. и никакой записи не произойдет.
#57 by Ayvengo
Эх, хорошо, что мне не приходится записывать движения документа, который я читаю :D Так что проблем никаких не будет :Р
#58 by Lys
Ну не будем спорить о понятиях... если ты считаешь, что то, что после кода в обработке проведения: в итоге у проведенного документа будет движение с Количество=2, без вызова метода Движения.Товары.Записать - это не "автоматическая запись заполненных в модуле проведения наборов движений", то это твое право=) Давай теперь обсудим мой случай на примере твоего документа. Допустим, имеется проведенный документ. Удаление движений при перепроведении - автоматическое. Допустим, в его обработке проведения написан код, как в этом посте выше. Запускаем документ на перепроведение. Что с ним происходит? 1) До вызова "ОбработкаПроведения" все существовавшие ранее движения очищаются, в БД ничего нет. 2) Отрабатывает ОбработкаПроведения, в итоге в Движения.Товары содержится строка с Количество=2 3) Отрабатывает подписка ПриПроведении, внутри нее бездумно вызывается Движения.Товары.Прочитать (упрощаю, без промежуточных переменных). Теперь в Движения.Товары у нас пусто. 4) В итоге, после записи имеем отсутствие движений документа по регистру Товары. Неважно даже, по какой причине - хоть из-за пустоты Движения.Товары, хоть из-за отсутствия модифицированности. Согласен, в этом и есть подводный камень?
#59 by Axel2009
по пункту "а", если у документа стоит "не очищать движения автоматически". документ проведен и по нему уже существует движение с "количество" = 2, тогда записи в базу данных как таковой не будет. 1ска сверится, что данные совпадают, и перезаписывать их не будет. по пункту "б", при данном допущении (который уже не пример моего документа), в данной расшифровке все правильно. автоматическое бывает "удаление" движений, а не "запись". только один момент, на который опять же ставишь акцент "бездумно". если "бездумно" создать набор записей по регистру сведений без регистратора и записать, то удалятся все движения. поэтому все надо делать "думно", а если чтото не так, то значит скорее не знал "нюансов".
#60 by Lys
Вот и я про то же, насчет пункта "б". Нюансы в данном случае - как раз в и отчасти в . Без их знания твой совет в как раз и может привести автора к подводным камням. Так что нечего на амбразуру кидаться почем зря;)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С