|
v7: Прямой запрос остатки по дням | ☑ | ||
---|---|---|---|---|
0
JeyRico
06.06.15
✎
19:03
|
Нужна помощь вот с каким делом - есть запрос который получает остатки по дням, но пропускает дни в которые не было движений по этим товарам. Как бы сделать так, чтобы выводились еще и дни, в которые не было движений.
Текст Процедуры: ЗапросСкл = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " | SELECT | Reg.Товар AS [Товар $Справочник.Товары], | Reg.Склад AS [Склад $Справочник.СкладыСкладов], | LEFT(Reg.Период,11) AS ДатаДень1, | SUM(Reg.ОстатокТовараНачальныйОстаток) AS НачОстТов, | SUM(Reg.ОстатокТовараПриход) AS Приход, | SUM(Reg.ОстатокТовараРасход) AS Расход, | SUM(Reg.ОстатокТовараКонечныйОстаток) AS КонОстТов | FROM | $РегистрОстаткиОбороты.ОстаткиТоваровНаСкладах( | :Дата1, | :Дата2~, | День, | ДвиженияИГраницыПериода, | INNER JOIN $Справочник.Товары AS СпрТ ON СпрТ.ID = Товар, | Склад IN (SELECT val FROM #спСкладов) |) As Reg |Group BY | Reg.Товар, | Reg.Склад, | LEFT(Reg.Период,11) |ORDER BY | Reg.Товар, | LEFT(Reg.Период,11)" ; УсловиеСкладов = "SELECT val FROM #спСкладов"; ЗапросСкл.УложитьСписокОбъектов(списокСкладовФилиала,"#спСкладов"); ЗапросСкл.УстановитьТекстовыйПараметр("Дата1" ,НачДата); ЗапросСкл.УстановитьТекстовыйПараметр("Дата2" ,КонДата); ТЗ = ЗапросСкл.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку(); |
|||
1
МихаилМ
06.06.15
✎
20:16
|
соединить с таблицей дней.
но лучше на клиенте обработать. SQL сервер должен предоставлять данные , а не представлять. |
|||
2
МихаилМ
06.06.15
✎
20:19
|
зачем в параметрах JOIN с таблицей товаров ?
|
|||
3
xXeNoNx
06.06.15
✎
21:21
|
Есть несколько вариантов решения, можно подрубить календарь, можно иначе, все способы описаны, например
https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8 |
|||
4
leshikkam
06.06.15
✎
21:22
|
А почему бы не использовать класс ПрямойЗапрос?
Там есть дополнение в параметрах ВТ. |
|||
5
xXeNoNx
06.06.15
✎
21:24
|
можно использовать макет компоновки, можно использовать календарь, можно использовать запрос, который формирует календарь и подрубает остатки.
Собеседование на выхино? |
|||
6
leshikkam
06.06.15
✎
21:27
|
(5) Эгегей - это 7-ка!
|
|||
7
GANR
07.06.15
✎
07:16
|
(0) Опять прошлый век
|
|||
8
JeyRico
09.06.15
✎
10:02
|
(4) С прямым запросом умаялся - не хочет падла работать.
|
|||
9
JeyRico
09.06.15
✎
10:02
|
(3) можно по подробнее?
|
|||
10
Злопчинский
09.06.15
✎
10:47
|
При выводе результатов анализируй что если выводимый отличается от предыдущего более чем на 1 - то довыводить пустые
|
|||
11
xXeNoNx
09.06.15
✎
11:11
|
Ну ежели семерка, то была дока по компоненте 1cpp, в которой как раз этот куб строился. Если найду - скину
|
|||
12
xXeNoNx
09.06.15
✎
11:49
|
Короче вот, переделать под прямой запрос - не проблема:
ВЫБРАТЬ 0 КАК Цифра ПОМЕСТИТЬ ВсеЦифры ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, ВсеЦифры4.Цифра * 1000 + ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1) КАК ДатаДень ПОМЕСТИТЬ ВсеДни ИЗ ВсеЦифры КАК ВсеЦифры1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры2 ПО (ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ)) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры3 ПО (ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ)) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры4 ПО (ВсеЦифры4.Цифра * 1000 + ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ)) |
|||
13
Ёпрст
09.06.15
✎
12:13
|
(0)
лепишь табличку дат select dateadd(day,(a.number+b.number*256),:НачДата) as Dat from master..spt_values a, master..spt_values b where a.type='P' and b.type='P' and b.number<=datediff(day,:НачДата,:КонДата)/256 and a.number<=(datediff(day,:НачДата,:КонДата)-b.number*256) далее кросс джоин с $РегистрОстаткиОбороты, в селекте пишешь кейс ежели Reg.Период = начальной дате, то рег.конечныйостаток, иначе еще кейс ежели рег.период<=табличкаДней.Дата тогда рег.Оборот иначе 0 end end as КонечныйОстаток Далее группировка. Усё. Поимеешь табличку со всеми датами и останком. Можешь и извратом, через передачу каждого дня в ВТ останки. |
|||
14
JeyRico
09.06.15
✎
15:45
|
ДОБАВИТЬКДАТЕ - в 7.7 как вызвать?
|
|||
15
JeyRico
09.06.15
✎
15:46
|
в 8-ке я это умею :)
|
|||
16
JeyRico
09.06.15
✎
16:06
|
(13) понял, но через слово - есть статья об этом методе? Если да, то по каким словам найти?
|
|||
17
Ёпрст
09.06.15
✎
16:07
|
Чего не понятного ?
Если че, примеров тока на мисте вагон, не говоря ужо о форуме 1cpp |
|||
18
Ёпрст
09.06.15
✎
16:08
|
а так, в (13) всё вроде очевидно, не ?
|
|||
19
Ёпрст
09.06.15
✎
16:10
|
и... вот это вот там нахрена у тебя ?
INNER JOIN $Справочник.Товары AS СпрТ ON СпрТ.ID = Товар |
|||
20
JeyRico
09.06.15
✎
16:14
|
(18) a.number и b.number и 256 - это откуда и что это?
(19) это было, условия запроса уже были. Был запрос который уже работал, но нужно теперь, чтобы дополнительно были строки за дни в которые не было движений. |
|||
21
Ёпрст
09.06.15
✎
17:19
|
(20)
Это поля из системной таблички |
|||
22
Попытка1С
09.06.15
✎
17:22
|
(4) +1
|
|||
23
Злопчинский
09.06.15
✎
18:03
|
(15) на трехколесном велосипеде почти все могут ездить.. а ты вот попробуй на одном колесе побалансировать.. ;-)
|
|||
24
JeyRico
10.06.15
✎
09:55
|
(23) Что-то от этих проб уже весь в синяках :)
Насяльника ругаесся... |
|||
25
Ёпрст
10.06.15
✎
10:04
|
Что непонятно в (13), например ?
|
|||
26
JeyRico
10.06.15
✎
11:15
|
(25) После (21) стало яснее. Теперь можно сказать, все понятно. Спасибо за подсказки.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |