Имя: Пароль:
1C
1С v8
Итоги в СКД (итоги по календарю)
0 Trance_1C
 
19.08.13
08:29
Всем привет!
стоит задача получить таблицу итогов по дням календаря, независимо от того были в эти дни обороты по регистру или нет. У меня не выходит получить остаток на каждый день:
в УПП к таблице календаря присоединяю (или объединяю - результат тот-же) вложенную таблицу остатков в результате мне выводит остатки только по границам периода и в рамках периода в те дни когда по измерениям отбора были движения, а надо получить остаток на каждый календарный день.
что я делаю не так :)

ВЫБРАТЬ
    Календарь.ДатаКалендаря,
    Календарь.Год,
    Календарь.КалендарныеДни,
    Календарь.ВидДня
ПОМЕСТИТЬ Календ
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
    Календарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеглКалендарь.ДатаКалендаря КАК ДатаДень,
    ОстатокПартииБУ.Склад КАК Склад,
    ОстатокПартииБУ.Номенклатура КАК Номенклатура,
    ОстатокПартииБУ.КоличествоНачальныйОстаток КАК КоличествоОстатокНаНачало,
    ОстатокПартииБУ.СтоимостьНачальныйОстаток КАК СуммаОстатокНаНачало
ИЗ
    Календ КАК РеглКалендарь
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период КАК Период,
            ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура КАК Номенклатура,
            ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад КАК Склад,
            ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
            ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток
        ИЗ
            РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, День, ДвиженияИГраницыПериода, ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты) КАК ОстатокПартииБУ
        ПО РеглКалендарь.ДатаКалендаря = ОстатокПартииБУ.Период
1 Лодырь
 
19.08.13
08:36
Мож тебе использовать связаные наборы данных? И попроще выглядеть все будет.
2 Defender aka LINN
 
19.08.13
08:38

ПО РеглКалендарь.ДатаКалендаря = ОстатокПартииБУ.Период

И что мы хотим после этого?
3 Trance_1C
 
19.08.13
08:48
(2) да я понимаю, а как в таблицу регистра период еще указать?
4 Trance_1C
 
19.08.13
08:50
(1) это вариант, но мне непонятно как в связанном наборе передать период из одного набора в другой, если в одном наборе это результат выборки (день календаря) а в другом параметр (&НачалоПериода И &КонецПериода)
5 Defender aka LINN
 
19.08.13
08:51
(3) Попытаться подумать. Ну или "меня почитай" © Волшебник
http://kb.mista.ru/article.php?id=92
6 Лодырь
 
19.08.13
08:53
(5) Злодей. Раскрыл тайну золотого ключика.. Теперь он будет знать.
7 KUBIK
 
19.08.13
09:02
Создай ВТ ТаблицаДат и сделай ее ЛС с данными ВиртТабл регистра, далее группируй в итогах  
..............................
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    ТаблицаДат.Период
                 |ИТОГИ
                 |    СУММА(Количество)
                 |ПО
                 |    Период ПЕРИОДАМИ(ДЕНЬ, &НачПериода, &КонПериода)";
8 Trance_1C
 
19.08.13
09:36
(7) в СКД не выйдет "ИТОГИ"
сейчас курю пример: http://kb.mista.ru/article.php?id=579
там второй запрос, очень похож на мой случай.
9 Trance_1C
 
19.08.13
11:37
Вот так получилось то что нужно:
10 Trance_1C
 
19.08.13
11:37
ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря,
    нОстатки.Склад,
    нОстатки.Номенклатура,
    нОстатки.КоличествоНачальныйОстаток,
    нОстатки.СтоимостьНачальныйОстаток
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            Остаток1.Период КАК ДатаС,
            МИНИМУМ(ВЫБОР
                    КОГДА Остаток2.Период ЕСТЬ NULL
                        ТОГДА КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
                    ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Остаток2.Период, ДЕНЬ, -1), ДЕНЬ)
                КОНЕЦ) КАК ДатаПо,
            Остаток1.Склад КАК Склад,
            Остаток1.Номенклатура КАК Номенклатура,
            Остаток1.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
            Остаток1.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток
        ИЗ
            (ВЫБРАТЬ
                ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период КАК Период,
                ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад КАК Склад,
                ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
                ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток
            ИЗ
                РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты) КАК Остаток1
                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период КАК Период,
                    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура КАК Номенклатура,
                    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад КАК Склад
                ИЗ
                    РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты) КАК Остаток2
                ПО Остаток1.Номенклатура = Остаток2.Номенклатура
                    И Остаток1.Склад = Остаток2.Склад
                    И Остаток1.Период < Остаток2.Период
        
        СГРУППИРОВАТЬ ПО
            Остаток1.Период,
            Остаток1.Склад,
            Остаток1.Номенклатура,
            Остаток1.КоличествоНачальныйОстаток,
            Остаток1.СтоимостьНачальныйОстаток) КАК нОстатки
        ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ нОстатки.ДатаС И нОстатки.ДатаПо)
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
11 Trance_1C
 
22.08.13
08:08
Опубликованный выше пример работал с ошибками, я разработал другой вариант запроса для СКД, он отлично отрабатывает:

ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря,
    РегламентированныйПроизводственныйКалендарь.Пятидневка,
    РегламентированныйПроизводственныйКалендарь.Шестидневка,
    РегламентированныйПроизводственныйКалендарь.КалендарныеДни,
    РегламентированныйПроизводственныйКалендарь.ВидДня
ПОМЕСТИТЬ врКалендарь
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врОстатки.Период,
    врОстатки.Склад,
    врОстатки.Номенклатура,
    СУММА(1) КАК Поле1
ПОМЕСТИТЬ ПериодыИзмерений
ИЗ
    врОстатки КАК врОстатки

СГРУППИРОВАТЬ ПО
    врОстатки.Период,
    врОстатки.Склад,
    врОстатки.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПериодыИзмерений.Период КАК ПериодИтога,
    МИНИМУМ(СледующиеБлижайшиеПериодыИзмерений.Период) КАК СледующийБлижайшийПериодИтога,
    ПериодыИзмерений.Склад КАК Склад,
    ПериодыИзмерений.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ГраницыИтоговПоИзмерениям
ИЗ
    ПериодыИзмерений КАК ПериодыИзмерений
        ЛЕВОЕ СОЕДИНЕНИЕ ПериодыИзмерений КАК СледующиеБлижайшиеПериодыИзмерений
        ПО ПериодыИзмерений.Период < СледующиеБлижайшиеПериодыИзмерений.Период
            И ПериодыИзмерений.Номенклатура = СледующиеБлижайшиеПериодыИзмерений.Номенклатура
            И ПериодыИзмерений.Склад = СледующиеБлижайшиеПериодыИзмерений.Склад

СГРУППИРОВАТЬ ПО
    ПериодыИзмерений.Период,
    ПериодыИзмерений.Склад,
    ПериодыИзмерений.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врКалендарь.ДатаКалендаря,
    МАКСИМУМ(ВЫБОР
            КОГДА врКалендарь.ДатаКалендаря = ГраницыИтоговПоИзмерениям.СледующийБлижайшийПериодИтога
                ТОГДА ГраницыИтоговПоИзмерениям.СледующийБлижайшийПериодИтога
            ИНАЧЕ ГраницыИтоговПоИзмерениям.ПериодИтога
        КОНЕЦ) КАК ПериодИтога,
    МАКСИМУМ(ГраницыИтоговПоИзмерениям.СледующийБлижайшийПериодИтога) КАК СледующийБлижайшийПериодИтога,
    ГраницыИтоговПоИзмерениям.Склад,
    ГраницыИтоговПоИзмерениям.Номенклатура
ПОМЕСТИТЬ ГраницыИтоговПоИзмерениямВКалендаре
ИЗ
    врКалендарь КАК врКалендарь
        ЛЕВОЕ СОЕДИНЕНИЕ ГраницыИтоговПоИзмерениям КАК ГраницыИтоговПоИзмерениям
        ПО (ВЫБОР
                КОГДА врКалендарь.ДатаКалендаря >= ГраницыИтоговПоИзмерениям.ПериодИтога
                        И врКалендарь.ДатаКалендаря <= ГраницыИтоговПоИзмерениям.СледующийБлижайшийПериодИтога
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)

СГРУППИРОВАТЬ ПО
    врКалендарь.ДатаКалендаря,
    ГраницыИтоговПоИзмерениям.Склад,
    ГраницыИтоговПоИзмерениям.Номенклатура
;

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