|
СКД. Аналог ЕстьNull(А, Б) для связей наборов данных | ☑ | ||
---|---|---|---|---|
0
dimaldinho
28.04.16
✎
17:03
|
В СКД связываются два набора данных "левым соединением" (источник связи - приемник связи). В таблице-приемнике есть поле, пусть Номенклатура, которое на некоторых записях остается пустое (Null, если было бы левое соединение в запросе). Этот Null нехорошо себя ведет в настройках отчета:
1. невозможно сделать отбор по Номенклатура = Null 2. невозможно сделать группировки Номенклатура - Детальные записи (просто исчезают строки с ненайденной Номенклатурой) Если бы у СКД была бы функция, аналогичная ЕстьNull, можно было бы преобразовать Null к пустой ссылке, например. Как решать проблемы 1., 2. для связей наборов в СКД? |
|||
1
КМ155
28.04.16
✎
17:05
|
(0)[сли бы у СКД была бы функция, аналогичная ЕстьNull]
а вынести во временную табличку и обработать языком запросов не позволяют условия задачи ? |
|||
2
dimaldinho
28.04.16
✎
17:14
|
(1) в СКД формируются наборы данных, потом связываются, потом выводятся в коллекцию значений, потом запросом null заменяется на пустую ссылку, потом коллекция подсовывается внешним набором в СКД? как-то перебор)
|
|||
3
КМ155
28.04.16
✎
17:17
|
(2) свою функция + общий модуль + расчетные поля СКД ?
|
|||
4
Карупян
28.04.16
✎
17:23
|
выбирай через естьnull()
|
|||
5
Карупян
28.04.16
✎
17:23
|
в запросе
|
|||
6
aleks_default
28.04.16
✎
17:23
|
(2) а если не через ж*опу гланды вырезать, а непосредственно в запросе заменить isNull(Номенклатура,Значение(Справочник.Номенклатура.пустаяСсылка))
|
|||
7
romix
28.04.16
✎
17:24
|
Я тоже столкнулся - интересно, как правильно.
|
|||
8
КМ155
28.04.16
✎
17:26
|
(2) а если через
ЗначениеЗаполнено() - Возвращает Истина, если значение отлично от значения данного типа по умолчанию, отлично от значения NULL, отлично от пустой ссылки, отлично от значения Неопределено. Для логических значений осуществляется проверка на значение NULL. Для строк осуществляется проверка на отсутствие не пробельных символов |
|||
9
ShoGUN
28.04.16
✎
17:26
|
(6) +1, должно работать...
|
|||
10
MiamiVice
28.04.16
✎
17:30
|
Может сработает если сделать вычисляемое поле. Что-то вроде
ВЫБОР КОГДА Номенклатура ЕСТЬ NULL и НЕ ПолеИсточника ЕСТЬ NULL ТОГДА Значение(Справочник.Номенклатура.ПустаяСсылка) ИНАЧЕ Номенклатура КОНЕЦ Где Номенклатура поле из таблицы приемника, а "ПолеИсточника" какое-то поле из таблицы источника. И уже по этому вычисляемому полю строить отборы и группировки. |
|||
11
dimaldinho
28.04.16
✎
17:35
|
Господа, которые пишут про запросы, не читают условия из (0): нет никаких запросов, есть НаборыДанных в СКД. И связь этих наборов данных. Запросов нет.
(8), (10) - пробую, пока не выходит |
|||
12
aleks_default
28.04.16
✎
17:48
|
господа, которые пишут такие посты,
1. невозможно сделать отбор по Номенклатура = Null В СКД есть отбор по "Заполнено" и "не заполнено" 2. невозможно сделать группировки Номенклатура - Детальные записи (просто исчезают строки с ненайденной Номенклатурой) Вот как здесь можно что-то понять? У меня обычно ничего не исчезает просто выводится пустое значение в группировке |
|||
13
dimaldinho
28.04.16
✎
17:51
|
(12) >> В СКД есть отбор по "Заполнено" и "не заполнено"
http://s16.radikal.ru/i191/1604/d0/32cd98139b5b.jpg Вот что видно пользователю. Никаких отборов по "Заполнено" и "не заполнено" нет. |
|||
14
aleks_default
28.04.16
✎
17:53
|
платформу обновите
|
|||
15
dimaldinho
28.04.16
✎
17:55
|
(12) >> невозможно сделать группировки Номенклатура - Детальные записи
Делаем в настройках СКД одну группировку детальные записи, получаем результат: Склад1 Карандаш Склад3 <Пусто> Делаем 2 группировки ДетальныеЗаписи - Номенклатура, ожидаем увидеть: Карандаш Склад 1 <Пусто> Склад 3 Видим в реальности: Карандаш Склад 1 |
|||
16
aleks_default
28.04.16
✎
18:00
|
(15) хрень какая-то
все я домой ушел |
|||
17
singlych
28.04.16
✎
18:26
|
(13) Заполнено-Не заполнено ищи в виде сравнения, а не в значении отбора.
|
|||
18
Карупян
28.04.16
✎
18:52
|
А если тип поля указать?
|
|||
19
AneJIbcuH
29.04.16
✎
08:15
|
ГДЕ-то В типовом отчете видел такую штуку, при связи наборов, где, например, отсутствует у второго какое-то поле, просто Создать вычисляемое поле, в "Путь к данным" написать точно также наименование (Как поле набора данных), Например, Номенклатура. А В выражении использовать ЕСТЬNULL(Номенклатура,..)
|
|||
20
dimaldinho
29.04.16
✎
08:58
|
(17) >> Заполнено-Не заполнено ищи в виде сравнения, а не в значении отбора
Нашел, но не помогает. Незаполненные значения в отчете без отбора выводятся, с отбором "= не заполнено" отчет полностью пустой. (19) >> просто Создать вычисляемое поле В СКД не работает отбор по значению вычисляемого поля, если его применять ко всему отчету. |
|||
21
dimaldinho
29.04.16
✎
09:03
|
Итого на данный момент. В плоском отчете без отбора
Склад1 Карандаш Склад3 <Пусто> В отчете с группировкой по номенклатуре исчезает строка "Склад3 <Пусто>" В отчете с отбором по Номенклатура не заполнено вообще пусто. Отбор по вычисляемому полю не применяется ко всему отчету. |
|||
22
FIXXXL
29.04.16
✎
09:05
|
(21) наборы данных что из себя представляют?
не проще логику отчета подшаманить? |
|||
23
dimaldinho
29.04.16
✎
09:10
|
(22) это совсем крайняя мера, но как суперзапасной вариант - остается
|
|||
24
FIXXXL
29.04.16
✎
09:13
|
(23) а возможно твои два набора навесить слева на справочник номенклатуры?
по аналогии "что б в отчет попадала номенклатура без движений вообще" |
|||
25
aleks_default
29.04.16
✎
09:16
|
Какие поля в наборах? Как настроены связи, по каким полям?
Лучше переделать, сделать все одним запросом. |
|||
26
dimaldinho
29.04.16
✎
09:26
|
(24) задача в другом. задача "отобразить строки, у которых одно поле из "правого" набора данных пусто. можно отобразить с отбором, можно отобразить в группировке"
(25) я сильно упрощенно опишу суть, все имена изменены, чтобы не замутить суть: есть набор данных Основной, есть набор данных Вспомогательный, они соединяются по полю одному полю Склад. Во втором наборе есть поле Номенклатура. В отчете важно видеть группировку по Номенклатуре и очень важно видеть когда эта Номенклатура не подсоединилась соединением (т.е. null) Прикладная часть задачи решается плоским отчетом с сортировкой по Номенклатуре (наверху будет незаполненная) или переписыванием отчета с заменой соединения наборов на один запрос с соединением таблиц. Остается техническая загадка: возможно ли делать работающие группировки и работающие отборы по полю из правого набора данных СКД, в значениях которого может попадаться null. |
|||
27
aleks_default
29.04.16
✎
09:28
|
галка "Обязательная" в связях наборов стоит?
|
|||
28
dimaldinho
29.04.16
✎
09:30
|
да
|
|||
29
aleks_default
29.04.16
✎
09:38
|
"правого набора данных СКД, в значениях которого может попадаться null". null не может быть в одном из наборов(если это так то тебе уже написали как от этого избавится).
В данном случае, я считаю, изначально неверно выбран тип набора данных. Тут должно быть объединение. |
|||
30
dimaldinho
29.04.16
✎
09:41
|
(29) ты не так прочитал. в наборе данных не может быть нулл, конечно, имелось ввиду, что в правом наборе может быть не найдено подходящей условию строки
|
|||
31
dimaldinho
29.04.16
✎
09:43
|
https://yadi.sk/d/HYhOvQu2rNtQn
сделал модельный отчет, можно поэкспериментировать, кому интересно http://s020.radikal.ru/i723/1604/8a/8288a257a6ba.jpg |
|||
32
dimaldinho
29.04.16
✎
09:43
|
Основной набор
ВЫБРАТЬ "Склад1" КАК Склад ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Склад2" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Склад3" |
|||
33
dimaldinho
29.04.16
✎
09:44
|
Вспомогательный набор
ВЫБРАТЬ "Склад 1" КАК Склад, "Карандаш" КАК Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Склад2", "Ручка" |
|||
34
FIXXXL
29.04.16
✎
09:56
|
(33) вот сюда если справочникНоменклатура прикрутить и прописать обработку НУЛЛ для количественных полей, то по идее не должны пустые строки лезть
|
|||
35
dimaldinho
29.04.16
✎
09:58
|
(34) ну ёлки. я как раз хочу видеть пустые строки. см. скрин. проблема как раз в том, что пустые строки исчезают
|
|||
36
FIXXXL
29.04.16
✎
10:02
|
(35) с пустой номенклатурой боюсь не увидишь
а вот с количеством 0 вполне себе |
|||
37
Defender aka LINN
29.04.16
✎
10:08
|
Не взлетит. Делай иначе
|
|||
38
Лефмихалыч
29.04.16
✎
10:12
|
(0) > В таблице-приемнике есть поле, пусть Номенклатура, которое на некоторых записях остается пустое
Сделай так, чтобы этого не было. Ты приемник явно запросом формируешь, вот в этом запросе ECТЬNULL() и используй |
|||
39
dimaldinho
29.04.16
✎
10:14
|
(38) ты не так прочитал. в наборе данных не может быть нулл, конечно, имелось ввиду, что в правом наборе может быть не найдено подходящей условию строки. вот приемник:
ВЫБРАТЬ "Склад 1" КАК Склад, "Карандаш" КАК Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Склад2", "Ручка" |
|||
40
Лефмихалыч
29.04.16
✎
10:16
|
(39) короче, в СКД соединения только левые и внутренние. Прими это, живи с этим, действуй, исходя из этого.
|
|||
41
FIXXXL
29.04.16
✎
10:19
|
(39) ну так сделай, чтобы в приемнике были все строки
не хочешь 0, напиши "ПустаяНоменклатура" или через ЗНАЧЕНИЕ есть у тебя полный список того, что пропадает? вот с ним соединяй и обрабатывай НУЛЛвариант как тебе надо |
|||
42
catena
29.04.16
✎
10:26
|
(39)А если в приемнике действительно соединить со справочником номенклатуры и обработать замену NULL, связь по справочнику.
|
|||
43
dimaldinho
29.04.16
✎
10:40
|
(41), (42) БИНГО! только надо было в приемнике выбрать таблицу всех возможных СКЛАДОВ, к ней левым соединением присоединить сам приемник и там заменить ЕстьNull(Номенклатура, ПустаяСсылка). После этого группировка заработала
|
|||
44
dimaldinho
29.04.16
✎
10:43
|
все-таки это немножко частный случай решения, но гуд. почти всегда можно такой трюк провернуть
|
|||
45
catena
29.04.16
✎
10:46
|
(44)Чем больше объектов связи, тем сложнее. Например, если связь не по складу, а склад+номенклатура - брать кросс-соединение?
|
|||
46
dimaldinho
29.04.16
✎
10:51
|
(45) согласен, усложняется
|
|||
47
aleks_default
29.04.16
✎
11:28
|
Вот интересно какую информацию показывает данная конструкция? Что на "Склад3" есть пустая номенклатура? Наверное очень важная информация?
|
|||
48
dimaldinho
29.04.16
✎
11:36
|
я ж не могу весь отчет выложить. там еще миллион колонок, служащих миллиону целей. миллион первая цель увидеть, что у склада3 пустая номенклатура
|
|||
49
dimaldinho
29.04.16
✎
11:46
|
Представь, что в зависимости от многих параметров складу должна быть назначена "любимая номенклатура". И нам нужно проверять, правильно ли она назначена, и особенно зорко следить за неназначенными.
Основной набор данных невозможно создать запросом, можно только подсунуть в СКД набор данных Объект. Более того, уже существует процедура, которую менять нельзя, и которая возвращает ровно нужный набор инфы о параметрах: Склад Параметр1 Параметр2... Параметр100 Во вспомогательном наборе легко запросом сформировать таблицу Склад - ЛюбимаяНоменклатура, далее нужна таблица для проверки Склад Параметр1 Параметр2... Параметр100 ЛюбимаяНоменклатура с возможностью сгруппировать по Номенклатуре или отобрать по незаполненной |
|||
50
dimaldinho
29.04.16
✎
11:51
|
P.S. Оговорился, не процедура, а функция возвращает нужную таблицу значений
Склад Параметр1 Параметр2... Параметр100 |
|||
51
kittystark
29.04.16
✎
11:53
|
в одном запросе к декартову произведению справочников склады, номенклатура сделай левое соединение регистра остатков (и/или продаж)
это самое первое, что можно сделать, хотя есть еще другие варианты |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |