|
Продажи и остатки нарастающим итогом по периодам | ☑ | ||
---|---|---|---|---|
0
konst1231
22.08.13
✎
17:00
|
Господа помогите,
Нужно получить отчет на скд: Продажи и остатки на 15 число каждого месяца с нарастающим итогом. Если продаж не было в месяце, то необходимо вывести продажи за предыдущие месяца. 15.01. 13 15.02.13 15.03.13 Ост. прод. Ост. прод. Ост. прод. Холдильник 10 0 10 3 7 3 (в 03 месяце продаж не было) Читал на форуме про дополнение перидов, нарастающий итог - не получается. |
|||
1
konst1231
22.08.13
✎
17:03
|
Вот что есть у меня:
ВЫБРАТЬ ВложенныйЗапрос.Период, ВложенныйЗапрос.Номенклатура, СУММА(ВложенныйЗапрос.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток, СУММА(ВложенныйЗапрос.КоличествоПродаж) КАК КоличествоПродаж, СУММА(ВложенныйЗапрос.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток ИЗ (ВЫБРАТЬ ПериодыИзменения.Период КАК Период, Регистр.Номенклатура КАК Номенклатура, СУММА(Регистр.КоличествоПродаж) КАК КоличествоПродаж, 0 КАК КоличествоНачальныйОстаток, 0 КАК КоличествоКонечныйОстаток ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.ПериодМесяц КАК Период ИЗ РегистрНакопления.Продажи.Обороты(, , Авто, Номенклатура = &Ном) КАК Продажи ГДЕ Продажи.Номенклатура = &Ном) КАК ПериодыИзменения ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПродажиОбороты.КоличествоОборот КАК КоличествоПродаж, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.ПериодМесяц КАК Период ИЗ РегистрНакопления.Продажи.Обороты(, , Авто, Номенклатура = &Ном) КАК ПродажиОбороты) КАК Регистр ПО ПериодыИзменения.Период >= Регистр.Период СГРУППИРОВАТЬ ПО Регистр.Номенклатура, ПериодыИзменения.Период ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц, ТоварыНаСкладахОстаткиИОбороты.Номенклатура, 0, ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , Номенклатура = &Ном) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Период, ВложенныйЗапрос.Номенклатура В группировке скд указал тип дополнения. Но получается что в месяцах где не было продаж выводится 0. |
|||
2
konst1231
22.08.13
✎
17:29
|
Ну и у меня все данные выводятся на начало месяца а не на 15 число
|
|||
3
Конфигуратор1с
22.08.13
✎
17:48
|
(0) " Если продаж не было в месяце, то необходимо вывести продажи за предыдущие месяца."ЗАЧЕМ?
|
|||
4
konst1231
22.08.13
✎
17:49
|
(3) Условие задачи
|
|||
5
azernot
22.08.13
✎
18:22
|
(0) Тебе нужна отдельно таблица периодов, к которой ты будешь слева цеплять продажи с меньшим или равным периодом, а также остатки на период.
|
|||
6
azernot
22.08.13
✎
18:51
|
Ну например, как -то так..
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, РазностьДат.НомерДняИзДиапазона) КАК Дата ПОМЕСТИТЬ Даты ИЗ (ВЫБРАТЬ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d КАК НомерДняИзДиапазона ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК РазностьДат ГДЕ ДЕНЬ(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, РазностьДат.НомерДняИзДиапазона)) = 15 ИНДЕКСИРОВАТЬ ПО Дата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход, ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход ПОМЕСТИТЬ Аналитика ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК ТоварыНаСкладахОстаткиИОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Даты.Дата КАК Дата, Аналитика.Номенклатура КАК Номенклатура, СУММА(Аналитика.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток ПОМЕСТИТЬ АналитикаПоДатам ИЗ Даты КАК Даты ПОЛНОЕ СОЕДИНЕНИЕ Аналитика КАК Аналитика ПО (ИСТИНА) СГРУППИРОВАТЬ ПО Даты.Дата, Аналитика.Номенклатура ИНДЕКСИРОВАТЬ ПО Дата, Номенклатура ; //////////////////////////////////////////////////////////////////////////////// УНИЧТОЖИТЬ Аналитика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ДанныеОбОстатках.Дата, ДанныеОПродажах.Дата) КАК Дата, ЕСТЬNULL(ДанныеОбОстатках.Номенклатура, ДанныеОПродажах.Номенклатура) КАК Номенклатура, ЕСТЬNULL(ДанныеОбОстатках.Остаток, 0) КАК Остаток, ЕСТЬNULL(ДанныеОПродажах.КоличествоОборот, 0) КАК Продажи ИЗ (ВЫБРАТЬ АналитикаПоДатам.Дата КАК Дата, АналитикаПоДатам.Номенклатура КАК Номенклатура, МАКСИМУМ(АналитикаПоДатам.КоличествоНачальныйОстаток) + СУММА(ЕСТЬNULL(ТоварыНаСкладахОбороты.КоличествоПриход, 0) - ЕСТЬNULL(ТоварыНаСкладахОбороты.КоличествоРасход, 0)) КАК Остаток ИЗ АналитикаПоДатам КАК АналитикаПоДатам ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ТоварыНаСкладахОбороты ПО АналитикаПоДатам.Номенклатура = ТоварыНаСкладахОбороты.Номенклатура И АналитикаПоДатам.Дата >= ТоварыНаСкладахОбороты.Период СГРУППИРОВАТЬ ПО АналитикаПоДатам.Дата, АналитикаПоДатам.Номенклатура) КАК ДанныеОбОстатках ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот, Даты.Дата КАК Дата ИЗ Даты КАК Даты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты ПО Даты.Дата >= ПродажиОбороты.Период СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, Даты.Дата) КАК ДанныеОПродажах ПО ДанныеОбОстатках.Номенклатура = ДанныеОПродажах.Номенклатура И ДанныеОбОстатках.Дата = ДанныеОПродажах.Дата УПОРЯДОЧИТЬ ПО Номенклатура, Дата ИТОГИ ПО Номенклатура Хотя в СКД данные об остатках за каждый день проще получить соединением набора периодов и набора запроса к таблице остатков с передачей параметера. |
|||
7
konst1231
23.08.13
✎
11:00
|
(6) спасибо, пробую что то подобное
|
|||
8
konst1231
23.08.13
✎
13:35
|
(6) Еще раз спасибо за направление! Сделал в СКД.
Создал два набора (пример без остатков): 1. ВЫБРАТЬ КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) КАК ОтчетнаяДата ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ ДЕНЬ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = ДЕНЬ(&ВыбДата) И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода 2. ВЫБРАТЬ СУММА(ВложенныйЗапрос.КоличествоПродаж) КАК КоличествоПродаж, ВложенныйЗапрос.КонецПериода КАК КонецПериода, ВложенныйЗапрос.Номенклатура КАК Номенклатура {ВЫБРАТЬ Номенклатура.*, КоличествоПродаж, КонецПериода} ИЗ (ВЫБРАТЬ ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК КоличествоПродаж, &КонецПериодаПродаж КАК КонецПериода, ПродажиОбороты.Номенклатура КАК Номенклатура ИЗ РегистрНакопления.Продажи.Обороты(, &КонецПериодаПродаж, , {(Номенклатура)}) КАК ПродажиОбороты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 0, &КонецПериодаПродаж, Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура {ГДЕ Номенклатура.Ссылка.* КАК Номенклатура}) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.КонецПериода И соеденил их по параметру |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |