Пропадают движения в подписке проведения #753792


#0 by Пчелкин
УПП 1.3.68.1 8.2.19.90 Отчет производства за смену. Задача: сделать так, чтобы при проведении документа продукция не отображалась на складе сразу. Реализация: делаю реквизит документа ПоказатьДвижения (булево), выношу на форму. Создаю подписку на обработку проведения. В процедуре проверка: Провожу документ. Движения в товарных регистрах есть, и они неактивны. Всё замечательно. Ставлю галочку ПоказатьДвижения, провожу документ: движений в товарных регистрах нет совсем (по другим регистрам проводится нормально). Провожу повторно - движения появляются. Провожу с ПоказатьДвижения = Ложь, закрываю форму документа, открываю снова и провожу с ПоказатьДвижения = Истина - все хорошо, движения есть. ЧЯДНТ?
#1 by Пчелкин
Добавил в начало процедуры следующий код: Провожу с ПоказатьДвижения = Истина. Смотрю в отладчике: записи в НЗ есть, активны. В движениях документа записи в ТоварыНаСкладах есть, а в других товарных регистрах - пусто. Т.е. вызов метода Прочитать как-то влияет на движения?
#2 by RomanYS
Если в процессе проведения идет явная запись (Движения.ИмяРегистра.Записать), то набор очищается (и тебе надо его снова читать). Иначе запись происходит по завершении проведения (включая подписки) при условии Движения.ИмяРегистра.Записывать = Истина (и ты видишь эти движения в своей подписке)
#3 by KSN
В обработке проведения сделай принудительную запись.
#4 by RomanYS
+ если во втором случае сделать "прочитать", то набор очистится (прочитаются движения из базы, которых нет).
#5 by Пчелкин
Движения...Записать нигде в подписке не используется. Как это движений нет? Разбираю ситуацию: провожу документ, штатный механизм делает движения. Я после этого делаю (в подписке) часть их (по некоторым регистрам) неактивными. Снова провожу документ (документ проведен ранее и часть его движений неактивна), тот же механизм формирует те же движения. Подписка запускается и тут же завершается (по условию ПоказатьДвижения). Только движений (тех самых, которые формирует родной УПП-шный код) почему-то нет.
#6 by Пчелкин
Т.е. 1. Пропадают только те движения, которые при прошлом проведении делались неактивными. 2. Пропадают они в том случае, если я никак не пытаюсь к ним обратиться. 3. Пропадают только если после установки движений неактивными (проведение с ПоказатьДвижения=Ложь) и перед проведением с ПоказатьДвижения=Истина форма документа не закрывалась.
#7 by RomanYS
"Записать нигде в подписке не используется" речь не о твоей подписке, а обо всем алгоритме проведения, включая все подписки. Если Записать там не используется (рекомендуется делать явную запись только явной при необходимости), то наборы уже содержат движения (сформированные алгоритмом проведения), а  твое Прочитать замещает их пустым набором. Вывод: либо делай Прочитать только если набор пуст, либо [правильней] делай подписку не на проведение, а на запись наборов регистров
#8 by RomanYS
* ПередЗаписью наборов регистров
#9 by Пчелкин
В том-то и дело, что при втором проведении (ПоказатьДвижения=Истина) я ни Прочитать, ни Записать -вообще ничего не использую. Первый раз (ПоказатьДвижения=Ложь) подписка обрабатывает движения. Второй раз (ПоказатьДвижения=Ложь) - подписка не делает вообще ничего.
#10 by Пчелкин
Второй раз ПоказатьДвижения=Истина
#11 by RomanYS
ХЗ что там в конкретном случае, по описанию действительно странно, тут только отладчик поможет Что в принципе "не так" - безусловное Прочитать
#12 by Пчелкин
Чем Прочитать неугодно? Без этого в НаборЗаписей пусто.
#13 by Пчелкин
По этой причине и отлаживать проблематично: после Прочитать движения появляются.
#14 by RomanYS
"пусто" если было Записать, иначе пусто станет после Прочитать
#15 by Пчелкин
Собственно задачу так и решил, поставив проверку Если Источник.ПоказатьДвижения Тогда Продолжить; после НаборЗаписей.Прочитать Но вопросы остались и такое решение считаю временным. Благо, строк в документе немного. А вообще лишнее чтение ни к чему. Почему так происходит - непонятно. Почему при закрытии-открытии формы всё проводится нормально? Попробую завтра еще поэкспериментировать.
#16 by Пчелкин
В подписке Движения[ИмяРегистра] - пустой набор записей, поэтому приходится вызывать Прочитать. И после завершения подписки в Движения[ИмяРегистра] записи остаются. При последующем проведении из модуля документа вызывается очистка коллекции движений, после чего Движения[ИмяРегистра].Модифицированность начинает возвращать Истина. Из-за этого, видимо, движения далее не записываются. Вопрос: как сделать так, чтобы после подписки в Движения[ИмяРегистра] записей не оставалось?
#17 by Пчелкин
Всем спасибо, поборол:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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