![]() |
|
v7: Как получить данные по оборотному регистру за неполный период в модуле проведени | ☑ | ||
---|---|---|---|---|
0
Birmingem
30.03.15
✎
15:19
|
В модуле проведения документа нужно получить данные из оборотного регистра за неполный период, например с 07.01.2015 по ТекущийДокумент() (при этом на момент до проведения документа).
Как это сделать? Как я понял ИспользоватьПериод() и Итог() дают данные только за полный период? А если черным запросом, возникает проблема, как правильно указать конец периода, с учетом сравнения с ТА? Чтобы запрос правильно давал данные и при интерактивном вводе документа, и при перепроведении документов за период. |
|||
1
Ёпрст
гуру
30.03.15
✎
15:39
|
лучше прямым запросом..
|
|||
2
Ёпрст
гуру
30.03.15
✎
15:40
|
можно и чорным - указывай позицию документа, можешь сформировать предыдущую позицию дока
|
|||
3
Birmingem
30.03.15
✎
16:22
|
(1)прямыми запросами не владею
(2)так и сделал: Кон=СформироватьПозициюДокумента(ТекущийДокумент(),-1) Но тут засада. Эта полученная позиция, может оказаться позже позиции ТА, т.е. дата документа = дате ТА, а вот позиция позже, и соответственно запрос не работает. |
|||
4
Birmingem
30.03.15
✎
17:36
|
Опытным путем определил, что черный запрос криво дает итоги по позицию документа. Дает на конец дня.
Придется определять предыдущий документ, и его подсовывать в запрос в качестве конечной даты периода. Есть ли быстрый метод получить предыдущий документ, кроме как выборкой? ОбратныйПорядок(<?>); ВыбратьДокументы(<Дата1>,<Дата2>) ПолучитьДокумент() |
|||
5
Ёпрст
гуру
30.03.15
✎
17:39
|
сравнитьТа
|
|||
6
Ёпрст
гуру
30.03.15
✎
17:39
|
и им подобные методы.. делов то
|
|||
7
Ёпрст
гуру
30.03.15
✎
17:40
|
>>> Эта полученная позиция, может оказаться позже позиции ТА
Не может |
|||
8
Ёпрст
гуру
30.03.15
✎
17:40
|
У вас чего, монопольно ТА назад ручонками двигают ?
|
|||
9
Birmingem
30.03.15
✎
17:46
|
(7)Не поверишь. Может.
Например, ТА на утреннем документе Списание. Я в модуле проведения вечернего документа Списание, сравниваю его позицию с позицией ТА. Так как ТА раньше, беру позицию -1. А это вполне может оказаться документ не относящийся к оперативному учету, например кассовый приходник, позиция которого тоже позже ТА. |
|||
10
Остап Сулейманович
30.03.15
✎
17:50
|
(3) Кон = МИН(СформироватьПозициюДокумента(ТекущийДокумент(),-1), ПолучитьДатуТА());
|
|||
11
Birmingem
30.03.15
✎
17:50
|
Теперь задача получить быстро предыдущий (от текущего) документ.
Попытался так: ПредПоз=СформироватьПозициюДокумента(ТекущийДокумент(),-1); ПредДок=""; РазобратьПозициюДокумента(,,,,,ПредДок); Но ПредДок оказывается пустым значением. Или не так делаю? |
|||
12
Birmingem
30.03.15
✎
17:51
|
(11)РазобратьПозициюДокумента(ПредПоз,,,,,ПредДок);
|
|||
13
Birmingem
30.03.15
✎
17:53
|
(10) Не пойдет. Нужны данные до момента проведения текущего документа. ПолучитьДатуТА() даст на конец дня.
|
|||
14
Остап Сулейманович
30.03.15
✎
17:54
|
(13) Ни в коем случае. Получить либо позицию твоего документа, либо (если он еще не проведен по регистрам) позициюТА. То есть по любому до твоего документа.
|
|||
15
Ёпрст
гуру
30.03.15
✎
17:57
|
Херь какая то..
Если позиция дока > ТА то просто не указывай дату, или ставь дату ТА.. Всё. |
|||
16
Ёпрст
гуру
30.03.15
✎
17:58
|
(13) И ? в твоём случае это и надо
|
|||
17
Birmingem
30.03.15
✎
17:59
|
Еще раз уточняю. Нужно в модуле проведения документа, черным запросом получить данные до проведения этого документа.
|
|||
18
Остап Сулейманович
30.03.15
✎
18:01
|
(17) Если Документ после ТА то и так все движения будут до документа. Других не будет.
Если Документ до ТА - код из (3) вполне годен. |
|||
19
Birmingem
30.03.15
✎
18:03
|
(14) С получением позиции проблем нет. Проблема в том, что черный запрос в этом случае не дает данные до проведения документа, а вместе с движениями документа.
(15)именно херь. Дата ТА и дата документа совпадают. Поставив в запрос просто дату ТА, получаю данные на конец дня. |
|||
20
Birmingem
30.03.15
✎
18:04
|
(18) так в запросе тогда, конечную дату какую указывать?
|
|||
21
Ёпрст
гуру
30.03.15
✎
18:05
|
(19) И ? если документ впереди позиции ТА, то это означает только, что он не проведен (или проведен, но без движений)
И брать итоги нужно на ТА.. всё |
|||
22
Ёпрст
гуру
30.03.15
✎
18:05
|
(20) дату ТА или ничего (он сам возьмет её на ТА)
|
|||
23
Birmingem
30.03.15
✎
18:14
|
Кон=СформироватьПозициюДокумента(ТекущийДокумент());
Если Кон>ПолучитьПозициюТА() Тогда Кон=ПолучитьДатуТА(); КонецЕсли; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с Нач по Кон; |Контр = Регистр.Реализация.Контрагент; |СуммаБезСкидки = Регистр.Реализация.СуммаБезСкидки; |Функция Сум = Сумма(СуммаБезСкидки); |Условие(Контр = Контрагент); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Сум=Запрос.Сум; Сделал. Запрос дает цифры вместе с движениями текущего документа. Это происходит при штатном групповом перепроведении документов. |
|||
24
Остап Сулейманович
30.03.15
✎
18:20
|
(23) Изначально было
Кон=СформироватьПозициюДокумента(ТекущийДокумент(), -1); Зачем поменял на Кон=СформироватьПозициюДокумента(ТекущийДокумент()); ? |
|||
25
Birmingem
30.03.15
✎
18:21
|
При этом в отладчике вот что показывает:
ПолучитьПозициюТА() = "#20150305 0 0 " Что это значит? ТА не спозиционирована на документе? |
|||
26
Ёпрст
гуру
30.03.15
✎
18:22
|
а так ?
Если Кон>ПолучитьПозициюТА() Тогда Кон=ПолучитьПозициюТА(); КонецЕсли; |
|||
27
Ёпрст
гуру
30.03.15
✎
18:24
|
и.. в групповом перепроведении, та летит в потоке, там тоже были свои заморочки, а чорные запросы - зло :)
|
|||
28
Birmingem
30.03.15
✎
18:25
|
(24) Да, изначально так было. И так, и так пробовал. Результат тот же. Я подумал, может между ТА и предыдущим документом еще документы есть. Но даже если и так, запрос должен был дать цифры без учета текущего документа. А он зараза, все равно с этим документом дает. Выходит запрос с позицией документа криво работает.
|
|||
29
Ёпрст
гуру
30.03.15
✎
18:30
|
(28) свой запрос в какой момент вызываешь хоть ?
ДО записи движений в регистр ? |
|||
30
Ёпрст
гуру
30.03.15
✎
18:30
|
или после ?
|
|||
31
Birmingem
30.03.15
✎
18:30
|
(26) Попробовал. Результат тот же
(27) Понимаю что запросом в модуле проведения не есть хорошо. А как по другому то с оборотным регистром быть? ИспользоватьПериод() и Итог() не дают данных за произвольный период |
|||
32
Ёпрст
гуру
30.03.15
✎
18:30
|
можешь и принудительно, очистить все движения по доку по этому регистру.
|
|||
33
Ёпрст
гуру
30.03.15
✎
18:32
|
ну и..примитив, |Условие Док<> ВыбДок воткнуть в текст запроса
|
|||
34
Ёпрст
гуру
30.03.15
✎
18:32
|
в ВыбДок - текущийДокумент()
|
|||
35
Ёпрст
гуру
30.03.15
✎
18:32
|
Док = регистр.Вася.ТекущийДокумент
|
|||
36
Ёпрст
гуру
30.03.15
✎
18:32
|
и передавай хоть конец дня
|
|||
37
Birmingem
30.03.15
✎
18:35
|
(29) ДРУГ, ты ГЕНИЙ!!!!!!!!
Запрос то у меня был после движений регистра. Воткнул его до движений, и получил что надо |
|||
38
Ёпрст
гуру
30.03.15
✎
18:37
|
(37) есть такое, могла ТА на документ встать ужо
|
|||
39
Birmingem
30.03.15
✎
18:39
|
Но все равно не понятно, если в запрос передавать позицию, раньше текущего документа, то по идее этот документ в запрос не должен был попадать. Вот это меня и смутило и направило по ложному пути.
|
|||
40
Birmingem
30.03.15
✎
18:42
|
Да и хрен с ним. Заработало главное.
(38) Огромное тебе спасибо!!! Пол дня с этим сегодня провозился. Уже крыша поехала. Вроде простейшая вещь, а никак ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |