|
СКД, группировка с пустыми данными | ☑ | ||
---|---|---|---|---|
0
QuestNew
12.05.15
✎
07:58
|
Доброго дня, уважаемые.
Прошу помощи с простым концептуальным вопросом по СКД. В наборах данных один запрос, во временную таблицу отбираю элементы справочника номенклатуры, затем левым соединением добавляю остатки по складам. Все работает. НО! Когда пользователь накладывает фильтр по складу, в таблице остаются только номенклатурные позиции с остатками, а я хочу увидеть все номенклатурные позиции из временной таблицы своего запроса. Подскажите, как решить проблему, заранее спасибо. |
|||
1
ЧеловекДуши
12.05.15
✎
08:00
|
(0) Охарактеризуйте термин "пустыми данными"?
Как это понимать? |
|||
2
QuestNew
12.05.15
✎
08:00
|
(1) Подразумеваю нулевые остатки номенклатуры.
|
|||
3
QuestNew
12.05.15
✎
08:05
|
Дополню огписание проблемы.
Пусть есть позиции товар1 и товар2, склады склад1 и склад2. Остатки без фильтров выводятся так: склад1 склад2 товар1 1 товар2 5 Когда пользователь накладываеь фильтр по складу, картина получается: склад2 товар2 5 А я хочу получить: склад2 товар1 товар2 5 |
|||
4
MUXACb
12.05.15
✎
08:19
|
(1) К сначала ко всей номенклатуре присоедини все склады, а потом ко всему этому присоединяй остатки по номенклатуре и складам
|
|||
5
QuestNew
12.05.15
✎
08:24
|
(4) А толку? Я так понимаю, что СКД накладывает фильтр на итоговую таблицу.
О!, идеи-вопросы: 1) получится ли решить проблему добавлением "ресурса", равного 1 для всех строк номенклатуры? 2) если сделать два набора данных, можно ли указать СКД, что фильтр следует применить к одному из наборов, а не итоговой таблице после объединения наборов данных? |
|||
6
fierylions
12.05.15
✎
08:31
|
Нормально все отрабатывает:
ВЫБРАТЬ Товары.Ссылка ПОМЕСТИТЬ Товары ИЗ Справочник.Товары КАК Товары ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиОстатки.колОстаток, 0) КАК Остаток ИЗ Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки( , Товар В (ВЫБРАТЬ Товары.Ссылка ИЗ Товары КАК Товары) И Склад = &Склад) КАК ОстаткиОстатки ПО Товары.Ссылка = ОстаткиОстатки.Товар Результат: если отбор по Складу 1 Склад = Склад1 Товар = Товар1 Количество = 1 Склад = Null Товар = Товар2 Количество = 0 |
|||
7
QuestNew
12.05.15
✎
08:41
|
(6) т.е. решением проблемы в вашем примере служит прямое прописание фильтра в запросе СКД, мысль понял, спасибо!
Если не найду универсального решения, придется прописывать возможные фильтры... Спасибо! Остатки с фильтром по номенклатуре - вымышленный простейший пример, иллюстрирующий мою проблему. В реальности фильтры могут быть по множеству параметров, прописать все будет проблематично. |
|||
8
fierylions
12.05.15
✎
08:48
|
(7) Что бы у вас работало да же без явного указания параметров вам нужно отключить галку в конструкторе "Автоупорядочивание". Тогда СКД будет работать именно указано в запросе.
|
|||
9
MUXACb
12.05.15
✎
10:04
|
(7) У меня все работает. Объяснять принцип работы СКД долго.
Да, у меня "Автоупорядочивание" тоже выключено. С включенным не пробовал |
|||
10
QuestNew
12.05.15
✎
11:29
|
(8),(9) Уважаемые, прошу помочь, проскальзываю, где эта галка автоупорядочивания, которую нужно отключить?
|
|||
11
1976vas
12.05.15
✎
11:36
|
(10) Я так понимаю, про "Автозаполнение" речь.
|
|||
12
MUXACb
12.05.15
✎
11:52
|
(10) Пардон, "Автозаполнение"...
|
|||
13
ИС-2
naïve
12.05.15
✎
11:59
|
в запросе на закладке "Компоновка" можно выделить поле для фильтра.
Или просто переименовать его. Например, Клиент в КлиентИзВТ и отбторы делать по КлиентИзВТ |
|||
14
QuestNew
12.05.15
✎
16:33
|
(13) Пробую реализовать ваш вариант.
1. Сделал промежуточную временную таблицу, в которой определил поле для фильтра по "складу". 2. В итоговой таблице делаю полное объединение временной таблицы "номенклатуры" с "остатками". В итоге вижу, что добавленное поле для фильтра по "складу" работает (налагаемые фильтры влияют на группировку "складов"), но "номенклатура" остается усеченной - без позиций с нулевыми остатками. Что-то делаю неправильно, что не пойму |
|||
15
1976vas
12.05.15
✎
16:43
|
(14) А в консоли запросов работает? Пробуй сначала в консоли запросов запустить, потом с СКД сравнивай.
|
|||
16
QuestNew
12.05.15
✎
16:50
|
(15) В консоли я вижу нужный результат. Запрос висит долго, но в итоговой таблице выдает всю "номенклатуру".
СКД тоже висит долго, но в итоге выдает только позиции с остатками. |
|||
17
1976vas
12.05.15
✎
16:53
|
(16) Сравни тогда запрос в консоли СКД исходный и после компоновки макета.
|
|||
18
QuestNew
12.05.15
✎
17:07
|
(17) Эх, не знаю как, буду изучать ) Спасибо за наводку!
|
|||
19
1976vas
12.05.15
✎
19:13
|
(18) Это не наводка, я и сам не силен в СКД, но есть хорошие курсы по СКД у Гилева, там сразу можно увидеть своеобразный отладчик - консоль СКД, там видно, как твой запрос преобразуется после компоновки макета, т.е. твой запрос + настройки пользователя, т.е. запрос + все параметры, передаваемые в СКД. Посмотрев, можно выявить причины расхождения.
|
|||
20
1976vas
12.05.15
✎
19:20
|
(19) + СКД изменяет постановку запроса, по сравнению с обычным запросом, он умеет оптимизировать, но иногда не в нашу пользу, поэтому надо знать особенности или просто сравнивая запросы исходные и преобразованные СКД, делать выводы.
|
|||
21
QuestNew
13.05.15
✎
10:58
|
Уважаемые, прошу помощи.
Правлю запрос для СКД. Получаю финальную таблицу с Х измерениями, У показателями, на которую СКД накладывает пользовательские фильтры. Пусть в множестве измерений помимо прочих есть измерения "номенклатура" и "склад". Необходимо получить отчетную форму по всем возможным значениям измерения "номенклатура" (по всему списку). Рассмотрим случай, когда накладывается один фильтр на одно измерение - "склад" (при этом условием может быть не только равенство значению). Изначально в финальной таблице есть записи только по "номенклатуре" с остатками. Если я делаю новую таблицу - левое соединение остатков к справочнику "номенклатуры", получаю таблицу со всеми элементами "номенклатуры", но фильтр по "складу" обрезает "пустые" (без остатков) строки. Т.е. мне нужно получить новую таблицу, в которой бы к имеющейся результирующей таблице добавились бы строки с нулевыми значениями ресурсов из множества У, но при этом были бы учтены все имеющиеся комбинации остальных измерений из множества ресурсов Х. Не соображу, как это сделать. |
|||
22
MUXACb
13.05.15
✎
13:33
|
(21) я в (4) написал.
1. Сделай 2 набора данных 2. В первом Номенклатура Левое соединение Склады - вся номенклатура по всем складам 3. Во втором остатки 4. Соединяй наборы (первый <- второй) по номенклатуре и складу При необходимости отключи "Автозаполнение" |
|||
23
QuestNew
13.05.15
✎
16:26
|
(22) Спасибо! Буду пробовать
|
|||
24
QuestNew
15.05.15
✎
11:12
|
(22) Почти получилось!
Последняя проблема - при наложении фильтра на измерение с типом "Не заполнено", тогда "номенклатура" все равно не попадает в отчет. Дополнительное соединение со значением Справочник.ХХХ.ПустаяСсылка не помогает (( |
|||
25
QuestNew
15.05.15
✎
11:16
|
(24) Проверил вариант с присоединением Null, тоже счастья не получил.
|
|||
26
QuestNew
15.05.15
✎
11:24
|
(24) Неопределено тоже не помогает.
Уважаемые, прошу помощи. |
|||
27
echo77
15.05.15
✎
11:33
|
(25) Схему свою покажи.
При включенной галке Автозаполнение СКД добавляет поля Условий из измерений ВТ. Если у тебя запрос простой и ты вручную не прописываешь в СКД, что необходимо наложить отбор на поле Склад - все должно работать. |
|||
28
QuestNew
15.05.15
✎
11:43
|
(27) Как принято показывать схему? Выгрузить в xml, скрин, текст запроса?
|
|||
29
echo77
15.05.15
✎
11:43
|
(28) выложить на файловый ресурс XML-схему
|
|||
30
QuestNew
15.05.15
✎
11:45
|
(29) Если схема к отчету под доработку (отраслевое решение) - будет толк? Или без конфы схема окажется бесполезной?
|
|||
31
echo77
15.05.15
✎
11:47
|
(30) Схему покажи сначала, потом посмотрим
|
|||
32
QuestNew
15.05.15
✎
11:51
|
||||
33
echo77
15.05.15
✎
11:56
|
Вот это что такое?
ВЫБРАТЬ РАЗРЕШЕННЫЕ ВЫБОР КОГДА &Периодичность = 6 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 7 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, НЕДЕЛЯ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 8 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕКАДА, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 9 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 10 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, КВАРТАЛ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 11 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, ПОЛУГОДИЕ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КОГДА &Периодичность = 12 ТОГДА ДОБАВИТЬКДАТЕ(&НачалоПериода, ГОД, 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 ПО (ИСТИНА) ГДЕ ВЫБОР КОГДА &Периодичность = 6 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) КОГДА &Периодичность = 7 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) / 7 КОГДА &Периодичность = 8 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) / 10 КОГДА &Периодичность = 9 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) КОГДА &Периодичность = 10 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) / 3 КОГДА &Периодичность = 11 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ) / 6 КОГДА &Периодичность = 12 ТОГДА aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ГОД) ИНАЧЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) КОНЕЦ ; |
|||
34
QuestNew
15.05.15
✎
11:58
|
Я дорабатываю отчет франча, за все не расскажу.
Мои изменения в запрос - ВТ "МнВоАналитик" и запросы 3,4 в итоговом запросе 8. |
|||
35
QuestNew
15.05.15
✎
11:58
|
(33) Предполагаю, что так реализована группировка по периодам.
|
|||
36
QuestNew
21.05.15
✎
11:13
|
В итоге получилось, помогло выделение параметра для фильтра в закладке компоновки промежуточного отчета.
Всем спасибо за помощь. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |