![]() |
![]() |
![]() |
|
Вопрос по СКД: как получить количество дней за период? | ☑ | ||
---|---|---|---|---|
0
DSSS
03.12.09
✎
12:52
|
Всем доброго дня!
Подскажите, как в СКД получить за период количество дней, когда конечный остаток товара на складе был больше нуля. Т.е нужна таблица с колонками нач. остаток, приход, расход, конечный остаток и колич. дней. Количество дней сейчас пытаюсь получить через вычисляемое поле по формуле: Выбор когда КоличествоКонечныйОстаток>0 тогда 1 иначе 0 конец В настройках отчета для колонки "ПериодДень" задан тип дополнения "День", чтобы получить запись для всех дней, если движений по регистру не было. В таком виде отчет работает неправильно. Запрос: ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Регистратор, ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда, ТоварыНаСкладахОстаткиИОбороты.ПериодМинута, ТоварыНаСкладахОстаткиИОбороты.ПериодЧас, ТоварыНаСкладахОстаткиИОбороты.ПериодДень, ТоварыНаСкладахОстаткиИОбороты.ПериодНеделя, ТоварыНаСкладахОстаткиИОбороты.ПериодДекада, ТоварыНаСкладахОстаткиИОбороты.ПериодМесяц, ТоварыНаСкладахОстаткиИОбороты.ПериодКвартал, ТоварыНаСкладахОстаткиИОбороты.ПериодПолугодие, ТоварыНаСкладахОстаткиИОбороты.ПериодГод, ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстаткиИОбороты.Склад, ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты Подскажите, куда копать? Спасибо. |
|||
1
DSSS
03.12.09
✎
12:59
|
ап...
|
|||
2
Икогнито
03.12.09
✎
13:02
|
в наборе данных роль "период" прописана?
|
|||
3
DSSS
03.12.09
✎
13:04
|
(2) Для какого поля?
|
|||
4
DSSS
03.12.09
✎
13:16
|
апну еще разок
|
|||
5
IronDemon
03.12.09
✎
13:21
|
||||
6
DSSS
03.12.09
✎
13:29
|
(5) Сделал такие же настройки. Результат тот же.
как заставить вычисляемое поле считать Выбор когда КоличествоКонечныйОстаток>0 тогда 1 иначе 0 конец ? |
|||
7
bvn13
03.12.09
✎
13:30
|
РАЗНОСТЬДАТ() юзай
|
|||
8
RomaH
naïve
03.12.09
✎
13:31
|
я правильно понимаю - т.е. в таблице запроса мы прото не имеем в наличии записей для определенного условия?
т.е. надо дополнять запрос этими записями внутри его ... тут недавно тема пробегала да и в БЗ есть - как заполнить запрос всеми датами внутри промежутка времени |
|||
9
DSSS
03.12.09
✎
13:32
|
(7) причем тут разность дат? мне нужно получить количество дней, когда количество конечный остаток > 0
|
|||
10
RomaH
naïve
03.12.09
✎
13:33
|
||||
11
Мигрень
03.12.09
✎
13:36
|
||||
12
DSSS
03.12.09
✎
13:39
|
(10) Спасибо, возможно подойдет вот это. Только мне думается можно как-то проще обрулить эту задачу - т.е у меня есть колонка конечныйОстаток, и нужно чтобы рядом была колонка "Колич. дней", в которую всегда подставляется 1 если конечный остаток >0
Допустим перед нами стоит задача, сгенерировать последовательность дат месяца. В качестве параметра в запрос мы будем передавать первую дату месяца. ВЫБРАТЬ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&МЕСЯЦ, МЕСЯЦ), ДЕНЬ, n) КАК Дата ИЗ (ВЫБРАТЬ 5*(a-1)+b-1 КАК n ИЗ (ВЫБРАТЬ 1 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6) КАК t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 1 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6) КАК t2 ПО (ИСТИНА)) КАК T ГДЕ n < ДЕНЬ(КОНЕЦПЕРИОДА(&МЕСЯЦ, МЕСЯЦ)) Во вложенном запросе мы формируем числовую последовательность от 0 до 35, далее в запросе верхнего уровня мы генерируем последовательность дат, ограничивая её последним числом месяца. (11) как в разность дат добавить условие КонечныйОстаток>0? |
|||
13
RomaH
naïve
03.12.09
✎
13:40
|
||||
14
Мигрень
03.12.09
✎
13:43
|
(12)->(11)Запрос вычисляет интервалы. Вышестоящий запрос вычисляет количество дней в интервале и суммирует результат.
|
|||
15
DSSS
03.12.09
✎
13:46
|
(13) Видимо то что нужно. Благодарю.
|
|||
16
DSSS
04.12.09
✎
10:38
|
Пытаюсь использовать запрос, указанный в (13), но работает не совсем правильно.
Может все-таки кто-нить знает другой способ получения количества дней, когда товар был на складе используя возможности СКД? |
|||
17
DSSS
04.12.09
✎
10:59
|
ап
|
|||
18
DSSS
04.12.09
✎
11:15
|
Апну еще раз
|
|||
19
TormozIT
гуру
04.12.09
✎
11:17
|
(16) Что значит "не совсем правильно"?
|
|||
20
DSSS
04.12.09
✎
11:24
|
(19)
Вот текст запроса: ВЫБРАТЬ РАЗЛИЧНЫЕ ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.Период = НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ) ТОГДА ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0 ТОГДА ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, &КонецПериода, ДЕНЬ) + 1 КОНЕЦ ИНАЧЕ ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.Период, &КонецПериода, ДЕНЬ) + 1 ИНАЧЕ 0 КОНЕЦ КОНЕЦ ИНАЧЕ ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК КоличествоДнейНаСкладе, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, ТоварыНаСкладахОстаткиИОбороты.Период ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ ТаблицаПредыдущиеПериоды.Номенклатура КАК Номенклатура, ТаблицаПредыдущиеПериоды.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ТаблицаПредыдущиеПериоды.Склад КАК Склад, ТаблицаПредыдущиеПериоды.Период КАК Период, ТаблицаПредыдущиеПериоды.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, ТаблицаПредыдущиеПериоды.ПредыдущийПериод КАК ПредыдущийПериод, ТоварыНаСкладахОстаткиИОборотыПредыдущие.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстатокПредыдущий ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ ТоварыНаСкладахОстаткиИОбороты1.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты1.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ТоварыНаСкладахОстаткиИОбороты1.Склад КАК Склад, ТоварыНаСкладахОстаткиИОбороты1.Период КАК Период, ТоварыНаСкладахОстаткиИОбороты1.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, МАКСИМУМ(ТоварыНаСкладахОстаткиИОбороты2.Период) КАК ПредыдущийПериод ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты2 ПО (ИСТИНА) И ТоварыНаСкладахОстаткиИОбороты1.Номенклатура = ТоварыНаСкладахОстаткиИОбороты2.Номенклатура И ТоварыНаСкладахОстаткиИОбороты1.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты2.ХарактеристикаНоменклатуры И ТоварыНаСкладахОстаткиИОбороты1.Склад = ТоварыНаСкладахОстаткиИОбороты2.Склад И ТоварыНаСкладахОстаткиИОбороты1.Период > ТоварыНаСкладахОстаткиИОбороты2.Период СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстаткиИОбороты1.Номенклатура, ТоварыНаСкладахОстаткиИОбороты1.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстаткиИОбороты1.Склад, ТоварыНаСкладахОстаткиИОбороты1.КоличествоКонечныйОстаток, ТоварыНаСкладахОстаткиИОбороты1.Период) КАК ТаблицаПредыдущиеПериоды ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОборотыПредыдущие ПО (ИСТИНА) И ТаблицаПредыдущиеПериоды.Номенклатура = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Номенклатура И ТаблицаПредыдущиеПериоды.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОборотыПредыдущие.ХарактеристикаНоменклатуры И ТаблицаПредыдущиеПериоды.Склад = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Склад И ТаблицаПредыдущиеПериоды.ПредыдущийПериод = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Период) КАК ТоварыНаСкладахОстаткиИОбороты СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, ТоварыНаСкладахОстаткиИОбороты.Период, ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.Период = НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ) ТОГДА ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0 ТОГДА ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, &КонецПериода, ДЕНЬ) + 1 КОНЕЦ ИНАЧЕ ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.Период, &КонецПериода, ДЕНЬ) + 1 ИНАЧЕ 0 КОНЕЦ КОНЕЦ ИНАЧЕ ВЫБОР КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0 ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) ИНАЧЕ 0 КОНЕЦ КОНЕЦ Результат: Номенклатура КоличествоДнейНаСкладе КоличествоКонечныйОстаток Период Товар А 1 03.03.2009 0:00:00 Товар А 1 06.03.2009 0:00:00 Товар А 3 06.03.2009 0:00:00 Товар А 6 12.03.2009 0:00:00 Товар А 10 23.03.2009 0:00:00 Товар А 1 25.03.2009 0:00:00 Товар А 2 9 25.03.2009 0:00:00 Товар А 1 2 26.03.2009 0:00:00 Товар А 1 8 26.03.2009 0:00:00 Товар А 1 1 27.03.2009 0:00:00 Товар А 1 7 27.03.2009 0:00:00 Товар А 5 1 31.03.2009 0:00:00 Товар А 5 7 31.03.2009 0:00:00 Дублируются некоторые строки: 27.03.2009 31.03.2009, |
|||
21
DSSS
04.12.09
✎
11:42
|
(19) TormozIT, Подскажи, плиз, что нужно изменить в запросе?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |