Имя: Пароль:
1C
1C 7.7
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) стало яснее. Теперь можно сказать, все понятно. Спасибо за подсказки.