Имя: Пароль:
1C
1С v8
Заморочка с отчётом по рознице, остатки
,
0 servicenn
 
20.02.14
10:02
День добрый сделал отчёт в СКД (данные в рознице), все цифры верные кроме остатков, сумма и количество, причём остатки начинают резко расти если дату начальную отодвигать в прошлое, увеличивая интервал. Непонятно откуда эти цифры, ведь остатки рассматриваются на конечную дату.

Группировка в настройках СКД по номенклатуре с учётом иерархии


ВЫБРАТЬ
    НоменклатураСправочник.Ссылка КАК Номенклатура,
    ТоварыВРозницеОстатки.КоличествоОстаток,
    ТоварыВРозницеОстатки.СуммаПродажнаяОстаток,
    ПродажиОбороты.КоличествоОборот КАК ОбщееКоличествоПродажа,
    ПродажиОбороты.СтоимостьОборот КАК ОбщаяСтоимостьПродажа,
    ВЫБОР
        КОГДА ПродажиОбороты.ДокументПродажи ССЫЛКА Документ.ОтчетОРозничныхПродажах
            ТОГДА ПродажиОбороты.КоличествоОборот
    КОНЕЦ КАК КоличествоПродажаДокументомРозницы,
    ВЫБОР
        КОГДА ПродажиОбороты.ДокументПродажи ССЫЛКА Документ.ОтчетОРозничныхПродажах
            ТОГДА ПродажиОбороты.СтоимостьОборот
    КОНЕЦ КАК СтоимостьПродажаДокументомРозницы,
    ВЫБОР
        КОГДА ПродажиОбороты.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
            ТОГДА ПродажиОбороты.КоличествоОборот
    КОНЕЦ КАК КоличествоПродажаДокументомРеализации,
    ВЫБОР
        КОГДА ПродажиОбороты.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
            ТОГДА ПродажиОбороты.СтоимостьОборот
    КОНЕЦ КАК СтоимостьПродажаДокументомРеализации,
    ЗакупкиОбороты.КоличествоОборот КАК ЗакупкиТранзитКоличество,
    ЗакупкиОбороты.СтоимостьОборот КАК ЗакупкиТранзитСтоимость,
    ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакупочнаяНаКонецПериода,
    НоменклатураСправочник.НоменклатурнаяГруппа,
    НоменклатураСправочник.НоменклатурнаяГруппа.Родитель
ИЗ
    Справочник.Номенклатура КАК НоменклатураСправочник
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРознице.Остатки(&КонецПериода, Склад = &РозничныйСклад) КАК ТоварыВРозницеОстатки
        ПО НоменклатураСправочник.Ссылка = ТоварыВРозницеОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ДокументПродажи.Склад = &РозничныйСклад) КАК ПродажиОбороты
        ПО НоменклатураСправочник.Ссылка = ПродажиОбороты.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, , ДокументЗакупки.СкладОрдер = &складПрихода) КАК ЗакупкиОбороты
        ПО НоменклатураСправочник.Ссылка = ЗакупкиОбороты.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦенЗакупочный) КАК ЦеныНоменклатурыСрезПоследних
        ПО НоменклатураСправочник.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
1 servicenn
 
20.02.14
10:43
*
2 Avganec
 
20.02.14
10:48
(0) единственное предложение - разбей запрос по пакетам с логической точки зрения, он и читаться будет легче и работать будет быстрее.
3 servicenn
 
20.02.14
10:53
(2) если ошибку не найду , тогда придётся попробовать и этот вариант
4 Avganec
 
20.02.14
10:57
(3) в пакетах проще ошибку находить. плюс БД не сможет здесь выбрать оптимальный план запроса и соединения будут строиться просто адски долго.
5 servicenn
 
20.02.14
11:00
(4) если можно короткий пример, можно на моём запросе
6 Avganec
 
20.02.14
11:04
(5) у тебя что именно должен выводить отчет? всю номенклатуру, которая в остатках, плюс которая продавалась?
7 servicenn
 
20.02.14
11:08
(6) Нужно всю, весь справочник и та которая есть на остатках и которой нет, которая продавалась и нет , так удобно пользователю.
8 Avganec
 
20.02.14
11:13
(7) странно, что у тебя даже группировок нет...  похоже в этом весь трабл. делай первый пакет соединения с остатками и смотри его результаты. если все хорошо, в другом пакете клей закупки. цены можешь в отдельный пакет, или в предыдущий запихнуть.
9 servicenn
 
20.02.14
11:17
(8) группировки есть ,писал с самого начала, этот же отчёт в СКД, группировки в настройках отдельно
10 servicenn
 
20.02.14
11:17
(8) По номенклатуре группировка
11 servicenn
 
20.02.14
11:18
(8)ок
12 Avganec
 
20.02.14
11:18
(9) там группировка для вывода. а для запроса группировки нужны тоже, открывай консоль запросов и в ней мучай запрос отдельно от СКД.
13 servicenn
 
20.02.14
11:24
(12) разве при выводе результат группировок не будет такой же как если бы мы их в запросе сделали
14 Avganec
 
20.02.14
11:29
(13) абсолютно нет. у тебя запрос уже соберет неправильные данные.
15 servicenn
 
20.02.14
11:31
(14) не уверен но возможно так и есть, в основном те отчёты которые встречал на скд без группировок в запросах
16 servicenn
 
20.02.14
11:31
(14) группировки обычно в настройках
17 servicenn
 
20.02.14
11:32
(14) Может как вариант попробовать в этом запросе сделать группировку по номенклатуре
18 Avganec
 
20.02.14
11:34
(17) вот тут тебя ждет куча веселья.
19 servicenn
 
20.02.14
11:38
(18) да уж)) уже не скучно
20 servicenn
 
20.02.14
13:41
Сделал такой запрос, количество на остатках начинает слетать когда добавляю последний пакет запроса по закупкам

ВЫБРАТЬ
    НоменклатураСправочник.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ТоварыВРозницеОстатки.СуммаПродажнаяОстаток КАК СуммаПродажнаяОстаток,
    НоменклатураСправочник.НоменклатурнаяГруппа,
    НоменклатураСправочник.НоменклатурнаяГруппа.Родитель
ПОМЕСТИТЬ Остатки
ИЗ
    Справочник.Номенклатура КАК НоменклатураСправочник
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРознице.Остатки(&КонецПериода, Склад = &РозничныйСклад) КАК ТоварыВРозницеОстатки
        ПО НоменклатураСправочник.Ссылка = ТоварыВРозницеОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.НоменклатурнаяГруппа,
    Остатки.НоменклатурнаяГруппаРодитель,
    Остатки.КоличествоОстаток,
    Остатки.СуммаПродажнаяОстаток,
    ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ ОстаткиИцены
ИЗ
    Остатки КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦенЗакупочный) КАК ЦеныНоменклатурыСрезПоследних
        ПО Остатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОстаткиИцены.Номенклатура,
    ОстаткиИцены.НоменклатурнаяГруппа,
    ОстаткиИцены.НоменклатурнаяГруппаРодитель,
    ОстаткиИцены.КоличествоОстаток,
    ОстаткиИцены.СуммаПродажнаяОстаток,
    ОстаткиИцены.Цена,
    ЗакупкиОбороты.КоличествоОборот КАК ЗакупкиТранзитКоличество,
    ЗакупкиОбороты.СтоимостьОборот КАК ЗакупкиТранзитСтоимость
ИЗ
    ОстаткиИцены КАК ОстаткиИцены
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, , ДокументЗакупки.СкладОрдер = &складПрихода) КАК ЗакупкиОбороты
        ПО ОстаткиИцены.Номенклатура = ЗакупкиОбороты.Номенклатура
21 servicenn
 
20.02.14
13:41
Отч. скд , для вывода группирую по номенклатуре, слетает когда начинаю двигать Начало периода в прошлое
22 Avganec
 
20.02.14
13:43
(20) группировки. Не знаю есть необходимость в первом пакете или нет, но в последнем необходимо точно.
23 servicenn
 
20.02.14
13:44
Может как то связано со складами, остатки по розничному складу а закупки по складу прихода("транзит")
24 servicenn
 
20.02.14
13:58
(22) буду пробовать с группировками
25 servicenn
 
20.02.14
14:01
(22) Группировки не помогают
26 Avganec
 
21.02.14
10:05
(25) почему ты пришел к этому выводу? запрос в студию новый
Закон Брукера: Даже маленькая практика стоит большой теории.