v7: Как получить данные по оборотному регистру за неполный период в модуле проведени #738391


#0 by Birmingem
В модуле проведения документа нужно получить данные из оборотного регистра за неполный период, например с 07.01.2015 по ТекущийДокумент (при этом на момент до проведения документа). Как это сделать? Как я понял ИспользоватьПериод и Итог дают данные только за полный период? А если черным запросом, возникает проблема, как правильно указать конец периода, с учетом сравнения с ТА? Чтобы запрос правильно давал данные и при интерактивном вводе документа, и при перепроведении документов за период.
#1 by Ёпрст
лучше прямым запросом..
#2 by Ёпрст
можно и чорным - указывай позицию документа, можешь сформировать предыдущую позицию дока
#3 by Birmingem
прямыми запросами не владею так и сделал: Кон=СформироватьПозициюДокумента(ТекущийДокумент,-1) Но тут засада. Эта полученная позиция, может оказаться позже позиции ТА, т.е. дата документа = дате ТА, а вот позиция позже, и соответственно запрос не работает.
#4 by Birmingem
Опытным путем определил, что черный запрос криво дает итоги по позицию документа. Дает на конец дня. Придется определять предыдущий документ, и его подсовывать в запрос в качестве конечной даты периода. Есть ли быстрый метод получить предыдущий документ, кроме как выборкой? ПолучитьДокумент
#5 by Ёпрст
сравнитьТа
#6 by Ёпрст
и им подобные методы.. делов то
#7 by Ёпрст
>>> Эта полученная позиция, может оказаться позже позиции ТА Не может
#8 by Ёпрст
У вас чего, монопольно ТА назад ручонками двигают ?
#9 by Birmingem
Не поверишь. Может. Например, ТА на утреннем документе Списание. Я в модуле проведения вечернего документа Списание, сравниваю его позицию с позицией ТА. Так как ТА раньше, беру позицию -1. А это вполне может оказаться документ не относящийся к оперативному учету, например кассовый приходник, позиция которого тоже позже ТА.
#10 by Остап Сулейманович
Кон = МИН(СформироватьПозициюДокумента(ТекущийДокумент,-1), ПолучитьДатуТА);
#11 by Birmingem
Теперь задача получить быстро предыдущий (от текущего) документ. Попытался так: ПредПоз=СформироватьПозициюДокумента(ТекущийДокумент,-1); Но ПредДок оказывается пустым значением. Или не так делаю?
#12 by Birmingem
РазобратьПозициюДокумента(ПредПоз,,,,,ПредДок);
#13 by Birmingem
Не пойдет. Нужны данные до момента проведения текущего документа. ПолучитьДатуТА даст на конец дня.
#14 by Остап Сулейманович
Ни в коем случае. Получить либо позицию твоего документа, либо (если он еще не проведен по регистрам) позициюТА. То есть по любому до твоего документа.
#15 by Ёпрст
Херь какая то.. Если позиция дока > ТА то просто не указывай дату, или ставь дату ТА.. Всё.
#16 by Ёпрст
И ? в твоём случае это и надо
#17 by Birmingem
Еще раз уточняю. Нужно в модуле проведения документа, черным запросом получить данные до проведения этого документа.
#18 by Остап Сулейманович
Если Документ после ТА то и так все движения будут до документа. Других не будет. Если Документ до ТА - код из вполне годен.
#19 by Birmingem
С получением позиции проблем нет. Проблема в том, что черный запрос в этом случае не дает данные до проведения документа, а вместе с движениями документа. именно херь. Дата ТА и дата документа совпадают. Поставив в запрос просто дату ТА, получаю данные на конец дня.
#20 by Birmingem
так в запросе тогда, конечную дату какую указывать?
#21 by Ёпрст
И ? если документ впереди позиции ТА, то это означает только, что он не проведен (или проведен, но без движений) И брать итоги нужно на ТА.. всё
#22 by Ёпрст
дату ТА или ничего (он сам возьмет её на ТА)
#23 by Birmingem
Сделал. Запрос дает цифры вместе с движениями текущего документа. Это происходит при штатном групповом перепроведении документов.
#24 by Остап Сулейманович
Кон=СформироватьПозициюДокумента(ТекущийДокумент, -1); Зачем поменял на Кон=СформироватьПозициюДокумента(ТекущийДокумент); ?
#25 by Birmingem
При этом в отладчике вот что показывает: Что это значит? ТА не спозиционирована на документе?
#26 by Ёпрст
#27 by Ёпрст
и.. в групповом перепроведении, та летит в потоке, там тоже были свои заморочки, а чорные запросы - зло :)
#28 by Birmingem
Да, изначально так было. И так, и так пробовал. Результат тот же. Я подумал, может между ТА и предыдущим документом еще документы есть. Но даже если и так, запрос должен был дать цифры без учета текущего документа. А он зараза, все равно с этим документом дает. Выходит запрос с позицией документа криво работает.
#29 by Ёпрст
свой запрос в какой момент вызываешь хоть ? ДО записи движений в регистр ?
#30 by Ёпрст
или после ?
#31 by Birmingem
Попробовал. Результат тот же Понимаю что запросом в модуле проведения не есть хорошо. А как по другому то с оборотным регистром быть? ИспользоватьПериод и Итог не дают данных за произвольный период
#32 by Ёпрст
можешь и принудительно, очистить все движения по доку по этому регистру.
#33 by Ёпрст
ну и..примитив, |Условие Док<> ВыбДок воткнуть в текст запроса
#34 by Ёпрст
в ВыбДок - текущийДокумент
#35 by Ёпрст
Док = регистр.Вася.ТекущийДокумент
#36 by Ёпрст
и передавай хоть конец дня
#37 by Birmingem
ДРУГ, ты ГЕНИЙ!!!!!!!! Запрос то у меня был после движений регистра. Воткнул его до движений, и получил что надо
#38 by Ёпрст
есть такое, могла ТА на документ встать ужо
#39 by Birmingem
Но все равно не понятно, если в запрос передавать позицию, раньше текущего документа, то по идее этот документ в запрос не должен был попадать. Вот это меня и смутило и направило по ложному пути.
#40 by Birmingem
Да и хрен с ним. Заработало главное. Огромное тебе спасибо!!! Пол дня с этим сегодня провозился. Уже крыша поехала. Вроде простейшая вещь, а никак ...
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

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