Как выбрать правильно номенклатуру по различным способам соединений

1. Nadushka74 5 30.01.17 09:27 Сейчас в теме
Есть Табличная часть, 4 колонки, последняя количество. Первые Три:
Номенклатура
Номенклатурная Группа
Плановая Группа

Последние две это группировки Номенклатуры

И так пользователь заполняет табличную часть
Он может заполнить Номенклатуру и тогда нам надо вытащить Эту номенклатуру и указанное ей количество
Он может Заполнить Номенклатурную группу и нам тогда надо вытащить все номенклатуры этой номенлактурной группы (если не было ранее более узких группировок) и количество указать каждой из них
ОН может задать Плановую Группу и тогда необходимо сделать тоже самое что и для номенклатурной группы
А может Задать и Номенклатурную группу и Плановую и тогда нам надо выбрать только номенклатуру для которой верен данный отбор.

Для примера
Товар 1,2 Входит в НГ1 и ПГ1
Товар 3 Входит В НГ1, ПГ2
Товар 4 Входить ПГ2

Пользователь ввел
Товар 1 Цена 1
НГ1. ПГ1 Цена 2
ПГ 2 Цена 3

Мы должны получить
Товар 1 Цена 1
Товар 2 Цена 2
Товар 3 Цена 3
Товар 4 Цена 3

Можно ли это сделать запросом? и помогите как
По теме из базы знаний
Найденные решения
3. Nadushka74 5 30.01.17 13:00 Сейчас в теме
И так кажись я нашла решение этого вопроса, будем расставлять приоритеты, если Номенклатура Заполнена, то приоритет = 1 если заполнено ЦГ и ПГ тогда приоритет = 2, Если Заполнена только ПГ тогда приоритет 3, если заполнено только НГ то приоритет 4.
А уж потом раскрою по номенклатурно и соединю в одну ТЗ по приоритетам для исключения задвоений номенклатуры. Вроде все красиво.


(2)
Справочник.Номенклатура КАК Номенклатура
ПО (ТабЧасть.Номенклатура.Ссылка Есть NULL ИЛИ Номенклатура.Ссылка = ТабЧасть.Номенклатура)

Это вы хотите выбрать всю номенклатуру. Но это не совсем решение.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. igel9780 171 30.01.17 12:57 Сейчас в теме
ВЫБРАТЬ *
ИЗ ТабЧасть КАК ТабЧасть
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура 
ПО (ТабЧасть.Номенклатура.Ссылка Есть NULL ИЛИ Номенклатура.Ссылка = ТабЧасть.Номенклатура)
И (ТабЧасть.НоменклатурнаяГруппа.Ссылка Есть NULL ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ (ТабЧасть.НоменклатурнаяГруппа))
И (ТабЧасть.ПлановаяГруппа.Ссылка Есть NULL ИЛИ Номенклатура.Ссылка В ИЕРАРХИИ (ТабЧасть.ПлановаяГруппа))
3. Nadushka74 5 30.01.17 13:00 Сейчас в теме
И так кажись я нашла решение этого вопроса, будем расставлять приоритеты, если Номенклатура Заполнена, то приоритет = 1 если заполнено ЦГ и ПГ тогда приоритет = 2, Если Заполнена только ПГ тогда приоритет 3, если заполнено только НГ то приоритет 4.
А уж потом раскрою по номенклатурно и соединю в одну ТЗ по приоритетам для исключения задвоений номенклатуры. Вроде все красиво.


(2)
Справочник.Номенклатура КАК Номенклатура
ПО (ТабЧасть.Номенклатура.Ссылка Есть NULL ИЛИ Номенклатура.Ссылка = ТабЧасть.Номенклатура)

Это вы хотите выбрать всю номенклатуру. Но это не совсем решение.
4. igel9780 171 30.01.17 13:04 Сейчас в теме
(3) В смысле, всю номенклатуру?

1. Если заполнена номенклатура, выберется только эта номенклатура;
2. Если заполнено НГ, выберется только то, что в НГ;
3. Если заполнено ПГ, выберется только то, что в ПГ;
4. Если заполнено и НГ и ПГ, выберется только то, что попадает в ПГ и НГ одновременно.


Вроде так вам надо было.
6. Nadushka74 5 30.01.17 13:51 Сейчас в теме
(4) прогоните ваш запрос по моему примеру и у вас не получиться получить то что мне нужно.
Так как возможны различные виды пересечений и ПГ и НГ и у них будет разная цена.
5. herfis 499 30.01.17 13:14 Сейчас в теме
(2) Лучше проверять на пустые значения явно, а не провоцировать лишние соединения (три лишних соединения) и проверять на NULL.
Это и читабельнее и эффективнее
7. Nadushka74 5 30.01.17 13:52 Сейчас в теме
(5) на пустые ссылки я проверяю еще при записи, но пустые значения в ТЗ предусмотрены заданием на разработку.
8. herfis 499 30.01.17 14:08 Сейчас в теме
(7) я не это имел в виду. Доработанный вариант из (2), при условии что плановая и номенклатурные группы - элементы справочника номенклатура:
ВЫБРАТЬ *
ИЗ ТабЧасть КАК ТабЧасть
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Спр
ПО ТабЧасть.Номенклатура = Спр.Ссылка
ИЛИ (ТабЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И ТабЧасть.ПлановаяГруппа = Спр.ПлановаяГруппа И ТабЧасть.НоменклатурнаяГруппа = Спр.НоменклатурнаяГруппа)
ИЛИ (ТабЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И ТабЧасть.ПлановаяГруппа = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И ТабЧасть.НоменклатурнаяГруппа = Спр.НоменклатурнаяГруппа)
ИЛИ (ТабЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И ТабЧасть.ПлановаяГруппа = Спр.ПлановаяГруппа И ТабЧасть.НоменклатурнаяГруппа = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
10. Nadushka74 5 30.01.17 14:20 Сейчас в теме
(8)
(4)

Да все понятно, но ваш запрос не прокатывает если у нас Соединение ПГ1/НГ1 и ПГ2/НГ1, но отдельно НГ1 не указана.
Тогда нужно отобрать только номенклатуру в соединении, а все что находится в НГ1 но не попадает В ПГ1 или ПГ2 вообще не выбирать.
Т.е из сообщения 4 У вас есть только п.1 и п.4.

11. herfis 499 30.01.17 17:02 Сейчас в теме
(10) Моя не понимать. Могут быть накладки, если ПГ и НГ не у всей номенклатуры заполнены в справочнике. Тогда нужно еще доп-условия добавлять.
А больше я проблем не вижу. Как объяснили, так и ответили :)
12. igel9780 171 31.01.17 08:53 Сейчас в теме
(11) У неё приоритеты по срабатыванию правил соединения. В (1) есть пример, когда соединение по номенклатуре является более приоритетным, чем соединение по группе.
Можно тогда условие сделать через "ВЫБОР КОГДА"... А можно юнионы с весами приоритетов. Тоже решение.
9. igel9780 171 30.01.17 14:10 Сейчас в теме
(7) Нее... Сан Саныч меня поправил. Вот это место: ТабЧасть.Номенклатура.Ссылка Есть NULL из-за неявного соединения со справочником номенклатуры будет работать медленнее, чем ТабЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот