|
Как подставить 0 в пустые значения левого соединения? | ☑ | ||
---|---|---|---|---|
0
Alexion124
22.01.14
✎
14:39
|
Подскажите как в запросе из РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, Неделя, ) подставить 0 в недели которые без продаж, а то получается из 13 недель берутся только 3, в которых есть продажи, а мне нужно чтобы там 0 был. ЕСТЬNULL не помогает...
Сам запрос: <code> ВЫБРАТЬ | ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот / (РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, ДЕНЬ) / 7) КАК СреднНедПотребл, | ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура, | СУММА((ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты1.КоличествоОборот, 0) - ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот / (РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, ДЕНЬ) / 7)) * (ЕСТЬNULL(ВыручкаИСебестоимостьПродажОбороты1.КоличествоОборот, 0) - ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот / (РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, ДЕНЬ) / 7)) / (РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, ДЕНЬ) / 7)) КАК КоличествоОборот1 | ИЗ | РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, , ) КАК ВыручкаИСебестоимостьПродажОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, Неделя, ) КАК ВыручкаИСебестоимостьПродажОбороты1 | ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = ВыручкаИСебестоимостьПродажОбороты1.АналитикаУчетаНоменклатуры | | СГРУППИРОВАТЬ ПО | ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура, | ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот / (РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&КПериода, МЕСЯЦ, -3), &КПериода, ДЕНЬ) / 7) </code> Как в |
|||
1
Avganec
22.01.14
✎
14:52
|
(0) первоначально сформировать список из этих недель, а потом к нему делать соединение
|
|||
2
Alexion124
22.01.14
✎
14:54
|
(1) если вы имеете ввиду вложенный запрос в левом соединении то тогда невозможно будет данные полученные за неделю разделить на общие продажи, или как?
|
|||
3
Alexion124
22.01.14
✎
15:16
|
может так почитабельней будет
<CODE> ВЫБРАТЬ ВсяВыручкаЗаПериод.КоличествоОборот / КоличествоНедель КАК СреднНедПотребл, ВсяВыручкаЗаПериод.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, СУММА((ЕСТЬNULL(ВыручкаПоНеделям.КоличествоОборот, 0) - ВсяВыручкаЗаПериод.КоличествоОборот / КоличествоНедель) * (ЕСТЬNULL(ВыручкаПоНеделям.КоличествоОборот, 0) - ВсяВыручкаЗаПериод.КоличествоОборот / КоличествоНедель) / КоличествоНедель) КАК КоличествоОборот1 ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НПериода, &КПериода, , ) КАК ВсяВыручкаЗаПериод ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НПериода, &КПериода, Неделя, ) КАК ВыручкаПоНеделям ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = ВыручкаИСебестоимостьПродажОбороты1.АналитикаУчетаНоменклатуры СГРУППИРОВАТЬ ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура, ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот / КоличествоНедель |
|||
4
France
22.01.14
✎
15:19
|
Когда null тогда 0
|
|||
5
Alexion124
22.01.14
✎
15:21
|
(4) это не тоже самое (ЕСТЬNULL(ВыручкаПоНеделям.КоличествоОборот, 0)
|
|||
6
Alexion124
22.01.14
✎
15:21
|
?
|
|||
7
WildSery
22.01.14
✎
15:23
|
(0) Календарь ЛЕВОЕ СОЕДИНЕНИЕ ()
|
|||
8
Alexion124
22.01.14
✎
15:31
|
(7) Оо... зачем?
|
|||
9
Alexion124
22.01.14
✎
15:35
|
(4) попробовал, не помогло.
|
|||
10
Avganec
22.01.14
✎
15:39
|
(9) в любом случае, у тебя есть 13 недель, а регистр выдает данные за 3, он не знает об оставшихся 10, так как в данной таблице нет данных. поэтому надо либо отдельно сформировать этот список из 13 недель, либо надо в данной таблице отразить движения по этим недостающим неделям. можно попробовать использовать периодичность до регистратора, но в этом случае надо будет менять виртуальную таблицу на остатки и обороты.
|
|||
11
WildSery
22.01.14
✎
15:40
|
(8) Чтобы получить недели, которых нет в регистре.
|
|||
12
McMurphy
22.01.14
✎
15:44
|
Я так понимаю у вас проблема в следующем:
1 неделя - 100 2 неделя - нет продаж 3 неделя - 50 Вторая неделя не выводиться. Так? Если это отчет на СКД но можно воспользоваться дополнением периода. Можно почитать на ИТС http://its.1c.ru/db/metod81#content:1587:1 Если нет, то и правда сначала придется сформировать таблицу с неделями и в запросе левым соединением присоединять к ней данные по продажам. |
|||
13
Alexion124
22.01.14
✎
15:54
|
(11) (10) теперь понял в чем причина, спасибо.
(12) к сожалению не на скд. Можете набросать пример как календарь сюда прикрутить? или ссылку с примером. яндекс бред какой то выдает. |
|||
14
пыхтачокк
22.01.14
✎
16:04
|
ВЫБРАТЬ
МЕСЯЦ(НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ)) КАК МесяцыСтрока, НАЧАЛОПЕРИОДА РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Месяцы ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ (тут условия периода) СГРУППИРОВАТЬ ПО МЕСЯЦ(НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ)), НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) можно без группировки, через РАЗЛИЧНЫЕ, короче и красивше. это разбивка (заданного) периода помесячно. консоль в помощь, производственный календарь на получаемый период ессно, должен быть заполнен. адаптируй под свои нужды. |
|||
15
McMurphy
22.01.14
✎
16:19
|
(14) Хм. Если честно не понял. Ну да ладно.
(12) Кода не дождетесь.:) Но примерный алгоритм на словах такой. Есть ваш период. Формируете массив с датами начал недели например (06.01.2014, 13.01.2014, 20.01.2014, 27.01.2014). Выполняете ваш запрос. Теперь перебираете не выборку из запроса как сейчас, а массив недель. Ищите есть ли выборке данные за эту неделю (метод НайтиСледующий). Если есть отлично выводим, если нет то добавляем пустую строку. Как то так. |
|||
16
Alexion124
22.01.14
✎
16:28
|
(15) приведенный мной запрос это часть запроса из 250 строк))) следующий() не пойдет и данных слишком много обрабатывается... около 10k позиций. Мы умрем пока все посчитается..
(14) дело в том что с МЕСЯЦЕМ понятно, а вот как мне НЕДЕЛИ получить? |
|||
17
Alexion124
22.01.14
✎
16:30
|
(14) да и регистра у меня такого нет
|
|||
18
WildSery
22.01.14
✎
16:33
|
(17) Плохо. Календарь часто нужен бывает.
|
|||
19
WildSery
22.01.14
✎
16:35
|
ВЫБРАТЬ РАЗЛИЧНЫЕ
Календарь.Год, НЕДЕЛЯ(Календарь.ДатаКалендаря) КАК Неделя ПОМЕСТИТЬ ВТ_Календарь ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь ГДЕ Календарь.ДатаКалендаря МЕЖДУ &НПериода И &КПериода ; ВЫБРАТЬ * ИЗ ВТ_Календарь КАК Календарь ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НПериода, &КПериода, Неделя, ) КАК ВыручкаПоНеделям ПО Календарь.Год = ГОД(ВыручкаПоНеделям.Период) И Календарь.Неделя = НЕДЕЛЯ(ВыручкаПоНеделям.Период) |
|||
20
WildSery
22.01.14
✎
16:42
|
Не, некрасиво.
Так лучше: ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(Календарь.ДатаКалендаря, НЕДЕЛЯ) КАК Неделя ПОМЕСТИТЬ ВТ_Календарь ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь ГДЕ Календарь.ДатаКалендаря МЕЖДУ &НПериода И &КПериода ВЫБРАТЬ Календарь.Неделя КАК Период, ЕСТЬNULL(ВыручкаПоНеделям.КоличествоОборот, 0) КоличествоОборот ИЗ ВТ_Календарь КАК Календарь ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НПериода, &КПериода, Неделя, ) КАК ВыручкаПоНеделям ПО Календарь.Неделя = ВыручкаПоНеделям.Период |
|||
21
Alexion124
23.01.14
✎
00:46
|
(20) cделал но все равно выдает только за эти 3 недели...
|
|||
22
sapphire
23.01.14
✎
00:52
|
(21) да.. ну ты и тормоз, однако...
|
|||
23
Alexion124
23.01.14
✎
01:18
|
(22) поясни
|
|||
24
WildSery
23.01.14
✎
12:37
|
(21) Проверьте, что соединение левое.
А скорее всего, в условие ГДЕ напихали условий по левым таблицам, из-за чего соединение стало внутренним. Условия нужно либо в ПО запихивать, либо вообще делать всё во вложенном запросе, а снаружи уже его соединять. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |