Непроведенный документ не видит своих движений #203101


#0 by йцукен
В обработке проведения цикл по строкам документа, а в цикле запрос по регистру и выполение движений по этому регистру в зависимости от результатов запроса. Так вот если документ проводится Непроведенный документ, то он в запросе на видит только что сделанные им движения. А если перепроводится уже проведенный документ, то все ок. Где копать?
#1 by Дурочка 1С ®
В консерватории ...
#2 by VZ
Пойду-ка я спать, а то наяву чорт-те что мерещиться... Будто плаваю в море супа...
#3 by Чучундер
Начал писать и... ну е-мое...
#4 by Э Эх
Проведенный тоже не видит _только что_ сделанные им движения... это вроде намёка.
#5 by SleepyHead
Если бы ты с проводками работал, то тебе бы помог метод ЗаписатьПроводки... А вот с регистрами я не работал практически, помочь не могу.
#6 by pit
.P.S. Диагноз - болесть не лечится... Просто пандемия....
#8 by efimov
Непроведенный документ не может иметь никаких движений
#9 by Anton R
Копать бесполезно. Проведение выполняется в транзакции, поэтому пока оно (проведение) не закончится, запрос никаких изменений не увидит. Нужно использовать "РассчитатьРегистры..." + "Актуальность".
#10 by saper
>Копать бесполезно. Проведение выполняется в транзакцииСкорее это косяк 1С. Первый раз напоролся на 21 релизеПотому что если документ перепроводится, он свои движения видит.А если проводится непроведенный документ не видит.Т.е. система ведет себя по разному а так быть не должно...
#11 by lalex23
косяк в кривых руках и галке "Автоматически удалять движения"
#12 by Sasha
мдя...(с) pit
#13 by lalex23
кстати относится и к тоже
#14 by USSR
Как в анекдоте "а че думать, трясти надо". У тебя скорее всего не проводятс и ранее проведенный и непроведенный. Движения ранее проведенного не удаляются. А у непроведенного только в психушке могут быть движения
#15 by saper
11,12галка Автоматически удалять движения не стоитВ начале проведения движения чистятся// Удаление движений по регистрам.  КонецЦикла;Речь идет о считывании в конце модуля проведения вновь созданных движенийЕсли документ изначально не был проведен движения не читаютсяЕсли документ перепроводится движения читаются.Причем тут автоматическое удаление движений ? Повторяю ВНОВЬ СОЗДАННЫХ ДВИЖЕНИЙ
#16 by lalex23
читаются старые или новые движения?
#17 by USSR
а зачем тебе движения читать, которые только что сам и создал?:)
#18 by saper
новые естественно старые то потерли смотри выше Алгоритм бывает зависит от вновь созданных движений.Например нужно в конце проведения узнать какие партии списались.И сделать еще движения на свой регистр. Сопровождать движение записыванием в таблицу значений довольно много кода.
#19 by Джинн
Коран запрещает складывать с переменной (СЗ,ТЗ и т.п.) данные. Разрешается только чтение из регистра.
#20 by йцукен
галка "Автоматическое удаление движений" естественно стоитА вообще чтобы всем было понятно приведу пример:Документ делает приход по регистру, измерениями которого являются НачНомер и КонНомер. Задача в том чтобы не было персекающихся диапазонов. Т.е. если в однйо строчке документа стоит 1000-2000, а в другой 1500-2500, то документ не должен проводиться. Это отслеживается запросом по данному регистру в каждой итерации по строкам документа. После запроса делается приход по данному интервалу. Соответственно когда проводится непроведенный документ, то запрос во второй итерации не видит движения сделанного первой итерацией. А когда документ перепроводится , то вторая итерация видит движения сделанные первой итерацией. Вопрос почему так? Если бы и проведенный документ при перепроведении не видел движений, то вопроса не было бы.
#21 by saper
а релиз какой ?Может в 25 уже поправили ?
#22 by йцукен
25
#23 by Джинн
Хм... Как бы оценить решение, чтобы ты не обиделся... Короче читай диагноз выше.Какая на фиг религия запрещает при запаси проверить документ на корректность? На фиг при каждом перепроведении заново "перепроверять" документ?И что за бред в измерениях хранится?
#24 by Джинн
Руки релизами не правятся. RTFM.
#25 by йцукен
в записанном непроведенном документе может хранится все что угодно. Тем более как быть при перепроведени базы?З.Ы. а конфа действительно замороченная, только не в этом вопрос, вопрос в том, почему разница при проведении и перепроведении?
#26 by saper
Диагносты блин. Т.е. это нормально что проведенный и непроведенный документ при проведении ведет себя по разному. Всегда можно списать на кривые руки
#27 by Anton R
Не тормози. Говорят же тебе, что запрос видит только движения ДО проведения документа. Поэтому при перепроведении ты видишь движения ранее проведенного документа, а при новом проведении не видишь ничего.А получить свои движения очень просто:
#28 by WWWolfy
2 года четыре назад описывал эту проблему. существует. обходил только ТаблицейЗначений - т.е. "складывал" в неё уже сделанные движения по регистрам.
#29 by Rovan
можно создать ТЗ в модуле проведения для временного хранения ранее записанных этим документом записей в регистр.да, И что за бред в измерениях хранится?
#30 by saper
Может стоит внимательно читать ?Нет никаких старых движений. Они никому не нужны
#31 by saper
можно но трудоемко. Если бы работало правильно проблем бы не было
#32 by WWWolfy
28+ хотя я больше с проблемой неработоспособности "ОчиститьДвижения" столкнулся.А по движениям чёто не помню.2 А пример кода можешь привести? В смысле - как именно запрос делаешь?
#33 by Джинн
Млин, читай доку в конце концов! Про метод Актуальность регистра в частности. Она применима исключительно для регистра, участвующего во ВРЕМЕННОМ РАСЧЕТЕ.
#34 by lalex23
практически во всех типовых конфигурациях и документах есть первые строки в обработке проведения:  КонецЕсли;какая религия запрещает сделать аналогично???
#35 by saper
при чем тут актуальность ? я не остатки читаю а движения
#36 by Джинн
Теперь пишу открытым текстом (раз намеки не понимаешь) - задача решается кривыми руками. Нет необходимости устраивать проверки в модуле проведения. Делать это нужно при записи. Проверка в модуле проведения выполняется КАЖДЫЙ РАЗ. При групповом или программном перепроведении тоже. Хотя в этом случае есть ГАРАНТИЯ, что документ не менялся. Проверка происходит в рамках транзакции и все курять, пока она идет.
#37 by Anton R
Внимательнее читать нужно тебе. Объясняю еще раз: когда ты делаешь запрос из модуля проведения, то этому запросу недоступны изменения уже сделанные при проведении. В том числе удаление движений (по галочке, или методом ОчиститьДвижения - неважно). Транзакция то еще не завершена!!!Поэтому:1. Если документ не был проведен, то запрос никаких движений не увидит.2. Если документ перепроводится, то запрос увидит движения документа ДО ПЕРЕПРОВЕДЕНИЯ.Отсюда вывод: запрос использовать нельзя. Можно использовать "Рег.ВыратьДвиженияДокумента" и "Рег.ПолучитьДвижение".
#38 by saper
я не запросом читал а именно "Рег.ВыратьДвиженияДокумента" и "Рег.ПолучитьДвижение"Еще на раз.1. Проводим не проведенный документ2. делаем движения3. читаем движения в конце проведения - пусто нет движенийТеперь проводим документ с пустой таб. частьют.е. документ проведен а движений нет1. делаем движения2. читаем движения. Все ОК
#39 by coloboc
2а что там трудоемкого?КонецЦикла;а работать-то будет насколько быстрее нежели чтение из прегистра. В сотни раз наверное :)
#40 by Parcan
так документ же проводится в транзакции и пока она не завершилась изменения в базе данных отсутствуют, а выборка движений регистров по документам обращается как раз к данным хранящимся сейчас в базе, допустим при тойже поддержке актальности итогов мы берем итоги не прямо из базы а из рассчитанных-расчитываемых в памяти итогов, в бухгалтерии когда мы хотим обращатся к созданным проводкам мы же пишем сначала записатьпроводки так что поведение вполне нормальное.
#41 by Rovan
лично я не вижу особой трудоемкости, у меня и потрудоемкке алгоритмв работали (типа установки период. реквизитов с точностью до секунды из любого документа)
#42 by Anton R
Взял типовую торговлю. В документе "ПоступлениеТМЦ" в модуле проведения добавил 5 строк. Выводит правильный результат и при новом проведении и при перепроведении. Релиз 25.
#43 by saper
Однако в проведенном документе все ОК. Хорошо более трудоемко, чем читать напрямую. Пойдет ?
#44 by Parcan
так в проведенном ты выбираешь старые движения, которые удалятся только по завершении транзакции.
#45 by Anton R
Пост 42 никто не осилил? :)))))))
#46 by saper
Значит поправилиРаньше этот алгоритм работал в зависимости от проведенности документа.
#47 by Anton R
(42+) 23 релиз тоже работеает. Других нет. Проверить не могу. :(
#48 by saper
я года три назад напоролся. Не помню какой релиз стоял :(
#49 by Джинн
Чушь! Логика не менялась никогда. Транзакция и актуальность временного набора была с начала жизни v7. Точнее Актуальность, вероятно, чуть позже появилась. Вроде в первых релизах не было такого метода. Но могу ошибаться.
#50 by saper
сейчас проверил на 21 тоже работает. А старее у меня нетЛогика не менялась а вот списка исправлений ошибок по релизам тоже нигде не было
#51 by Anton R
Я актуальность не использовал.
#52 by saper
Так что ошибка в одном из 17,19 или 20 релизе. То что она была - гарантированно слишком много проблем это вызвало. Я тестил на проведенных документах. При втором проведении уже все ОК было. И мне долго не могли ошибку показать
#53 by saper
Актуальность и автоматическое удаление движений тут действительно не при чем
#54 by йцукен
так у меня тоже работает, а через запрос нет!!!!(((((((((((((
#55 by 0xFFFFFF
Результат запроса - это результат записей в базе данных, которые появляются ПОСЛЕ завершения транзакции.А в ВыбратьДвиженияДокумента передается значение типа Документ, который хранится в оперативной памяти.Разницу чуешь?
#56 by 0xFFFFFF
Попробуй для проведенного уже дока в обработке проведения ОчиститьДвижения и выполнить запрос к регистру. По твоей логике в результате искомый документ фигурировать не должен. Но имхается мне, что он там останется.
#57 by 0xFFFFFF
... и правильно сделает :)
#58 by saper
Это тоже косяк. Но не поправленный. Иначе этот запрос не захватывал бы новые движения у проведенного документа. Хотя конечно не знаю почему бы не пользоваться выбрать движения получить движения.
#59 by 0xFFFFFF
Открою страшшную тайну. На заре одноэсничества я сделал по простому, по топорному. На кнопки Провести и ОК навесил свои процедуры, которые для уже проведенного дока делают все как обычно, а вот для непроведенного выполняют "Провести" дважды (ну там со всякими транзакциями, исключениями естессна). Сейчас вспоминаю - что не сделал бы тогда для того, чтобы не разбираться 12 часов :)
#60 by saper
такой же изврат сделал.КонецЕсли;Такой вот изврат до сих пор болтается.
#61 by Z11
(saper) 17, 19 релиз выбрось. Используй или 25 или 15.(51 ) Твой текст должен выглядеть так  КонецЦикла;Надо исходить из постулата :Во время проведения документа его движения, проводки НЕОПРЕДЕЛЕНЫ.В нет постановки задачи. Какой тип измерения ( и структура регистра)непонятен.Вероятность того что регистр не будет закрываться очень большая. Телепаты в отпуске.
#62 by Rovan
ну что Данила-мастер ? - получился ли каменный цветок ?
#63 by saper
17,19 давно выбросил. Такая проблема была на тот момент.КонецЕсли;....
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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