|
Обороты за разные периоды в одном запросе. | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
vicof
06.11.13
✎
12:13
|
Всем привет.
Грубо говоря, есть отгрузки торгового оборудования (один регистр) и продажи (второй регистр). Пользователи хотят отчет за период, в котором хотят видеть номенклатуру, дату прихода ТО, дату расхода ТО (если она была) и оборот по этой номенклатуре из второго регистра. Причем обороты должны считаться за даты с начала периода до даты окончания (или возврата, если был возврат). Собственно вопрос, можно ли в одном запросе соединить отгрузки и обороты за разные периоды по каждой номенклатуре? Что-то типа среза последних на каждую дату, только с оборотами. Или лепить 25 тыщ соединений за разные периоды? Или вообще вежливо пользователю с такой хотелкой? |
||||||||||
1
vicof
06.11.13
✎
12:14
|
* Вежливо отказать...
|
||||||||||
2
shuhard
06.11.13
✎
12:20
|
(0) не делай это на СКД
Отказать |
||||||||||
3
vicof
06.11.13
✎
12:21
|
(2) Ну а вообще реально это сделать в запросе, не лепя кучу соединений, пусть даже не на скд?
|
||||||||||
4
1dvd
06.11.13
✎
12:24
|
(3) Воспользуйся ВТ, если у тебя джоинофобия
|
||||||||||
5
Skom
06.11.13
✎
12:26
|
Типа так
ВЫБРАТЬ РАЗЛИЧНЫЕ Д.Номенклатура ,Продажи.Регистратор КАК Чек ,Продажи.Регистратор.СуммаДокумента КАК Сумма //,Продажи.Номенклатура КАК Номенклатура ,СУММА(isnull(Продажи.СтоимостьОборот,0)) КАК СуммаСтроки ,СУММА(isnull(ПродажиСебестоимость.СтоимостьОборот,0)) КАК Себестоимость ИЗ Документ.РеализацияТоваровУслуг.Товары КАК Д ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(,,Регистратор,) КАК Продажи ПО Продажи.Регистратор = Д.Ссылка И Продажи.Номенклатура = Д.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(,,Регистратор,) КАК ПродажиСебестоимость ПО ПродажиСебестоимость.Регистратор = Д.Ссылка И ПродажиСебестоимость.Номенклатура = Д.Номенклатура ГДЕ Д.Ссылка В (&Док) СГРУППИРОВАТЬ ПО Продажи.Регистратор, Д.Номенклатура, Продажи.Регистратор.СуммаДокумента АВТОУПОРЯДОЧИВАНИЕ |
||||||||||
6
1dvd
06.11.13
✎
12:28
|
(5) Извините. Вы с SQL работали до появления воьмёрки? Что-то уж больно стиль написания запроса напоминает...
|
||||||||||
7
Skom
06.11.13
✎
12:29
|
(6) ага))
меня коробит писать ЕСТЬNULL() |
||||||||||
8
Skom
06.11.13
✎
12:31
|
(0) у тебя в запросе будет всего 2 периода? или их может быть множество.
|
||||||||||
9
1dvd
06.11.13
✎
12:36
|
(7) больше запятая перед параметром выдаёт :)
|
||||||||||
10
Skom
06.11.13
✎
12:37
|
Для отладки так удобнее.
|
||||||||||
11
vicof
06.11.13
✎
12:38
|
(8) множество
http://gyazo.com/1b7d65bbaaa1e01223ff224a0aad6878 |
||||||||||
12
Skom
06.11.13
✎
12:41
|
тогда в запросе сложнее
|
||||||||||
13
vicof
06.11.13
✎
12:42
|
я в запросе вижу пока только одно решение - количество соединений по количеству разных периодов.
|
||||||||||
14
Skom
06.11.13
✎
12:43
|
как ты их в запросе то увидишь?
|
||||||||||
15
Ofizer
06.11.13
✎
12:45
|
(13) видимо только так, тоже других вариантов не вижу
|
||||||||||
16
vicof
06.11.13
✎
12:58
|
(14) Да, тоже вопрос. Добавляется еще программная обработка
|
||||||||||
17
Skom
06.11.13
✎
13:03
|
что-то не соображу как у тебя это получится
|
||||||||||
18
sirsp
06.11.13
✎
13:08
|
(0) Так что ли?
ВЫБРАТЬ "Н1" Номенклатура, ДАТАВРЕМЯ(2013, 1, 1) ДатаРеализации, ДАТАВРЕМЯ(2013, 9, 12) ДатаВозврата ПОМЕСТИТЬ Рег1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н2", ДАТАВРЕМЯ(2013, 5, 16), ДАТАВРЕМЯ(1, 1, 1) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н3", ДАТАВРЕМЯ(2013, 1, 5), ДАТАВРЕМЯ(2013, 8, 7) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н4", ДАТАВРЕМЯ(2013, 1, 9), ДАТАВРЕМЯ(2013, 12, 16) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н5", ДАТАВРЕМЯ(2013, 2, 17), ДАТАВРЕМЯ(1, 1, 1) ; ВЫБРАТЬ "Н1" Номенклатура, ДАТАВРЕМЯ(2013, 1, 2) Период, 100 СуммаОборот ПОМЕСТИТЬ Рег2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н1", ДАТАВРЕМЯ(2013, 7, 12), -200 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н1", ДАТАВРЕМЯ(2013, 9, 20), 100 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н2" Номенклатура, ДАТАВРЕМЯ(2013, 1, 3) Период, 500 СуммаОборот ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н2", ДАТАВРЕМЯ(2013, 6, 1), -300 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Н2", ДАТАВРЕМЯ(2013, 9, 1), 200 //etc ; //Основной запрос ВЫБРАТЬ Рег1.Номенклатура ,Рег1.ДатаРеализации ,Рег1.ДатаВозврата ,СУММА(Рег2.СуммаОборот) ОборотыЗапериод ИЗ Рег1 ЛЕВОЕ СОЕДИНЕНИЕ Рег2 ПО Рег2.Период МЕЖДУ Рег1.ДатаРеализации И ВЫБОР КОГДА Рег1.ДатаВозврата = ДАТАВРЕМЯ(1, 1, 1) ТОГДА &КонецПериода ИНАЧЕ Рег1.ДатаВозврата КОНЕЦ СГРУППИРОВАТЬ ПО Рег1.Номенклатура ,Рег1.ДатаРеализации ,Рег1.ДатаВозврата |
||||||||||
19
DexterMorgan
06.11.13
✎
13:16
|
Скд, два набора данных, при соединении передавай параметры ДатаНач и ДатаКон во второй набор
СКД поможет |
||||||||||
20
vicof
06.11.13
✎
13:26
|
(18) Похоже на то, но, блин, это громоздко и медленно шокапец.
(19) Вот, собственно, что я и хотел услышать. Щас посмотрю, что Хрусталева предлагает по этому поводу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |