|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
ksergey
14.07.16
✎
12:50
|
Добрый день.
Просьба помочь с составлением запроса. Приведу наглядный пример на основе спр.Номенклатура. В спр-к добавлен реквизит КвоКонтроля, у которого св-во использования "Для групп и элементов". В запросе необходимо реализовать следующий алгоритм: если для Товара КвоКонтроля= 0, то получаем это значение из ближайшей вышестоящей в иерархии группы, у которой данное значение больше 0 ГРУППА 1 КвоКонтроля= 10 ГРУППА2 КвоКонтроля= 20 Товар21 КвоКонтроля= 0 Товар22 КвоКонтроля= 22 ГРУППА3 КвоКонтроля= 0 Товар 31 КвоКонтроля= 0 Товар 32 КвоКонтроля= 33 Запрос должен вернуть следующие данные для товаров: Товар21 КвоКонтроля= 20 Товар22 КвоКонтроля= 22 Товар 31 КвоКонтроля= 10 Товар 32 КвоКонтроля= 33 Буду признателен за любые подсказки |
|||
1
Горогуля
14.07.16
✎
12:51
|
>у которой данное значение больше 0
закрой глаза и представь, что таких нет. что будешь делать? |
|||
2
Горогуля
14.07.16
✎
12:52
|
а так - выбор когда и вперёд
|
|||
3
Fragster
гуру
14.07.16
✎
12:52
|
подсказка - добавить второй реквизит у элементов "авто количество" и при записи группы обновлять данные в подчиненных. также обновлять при изменении группы.
|
|||
4
RomanYS
14.07.16
✎
12:53
|
выбор
когда Спр.Рекв > 0 тогда Спр.Рекв когда Спр.Родитель.Рекв > 0 тогда Спр.Родитель.Рекв когда Спр.Родитель.Родитель.Рекв > 0 тогда Спр.Родитель.Родитель.Рекв ... для небольшого количества уровней всё равно лучше ничего не придумаешь |
|||
5
ksergey
14.07.16
✎
13:01
|
(4) согласен, идея здравая
но на мой взгляд оно приемлемо, если в запросе выбирать по одному Товару (тогда можно генерить текст запроса с учетом уровня вложения родителей) хотелось бы в одном запросе получить данные по списку ном-ры (и они понятно будут разного уровня входимости) |
|||
6
Горогуля
14.07.16
✎
13:02
|
(5) а как ты собрался в запросе получить один товар?
|
|||
7
Dotoshin
14.07.16
✎
13:02
|
(0) При произвольном количестве уровней запросом не получится. Можно написать служебную обработку, которая заполнит твой реквизит, а при добавлении новой группы делать автоматическое заполнение этого реквизита.
|
|||
8
ksergey
14.07.16
✎
13:06
|
(6) уточнение к задаче: нужно получить не весь товар(с данным реквизитом), а из конкретного списка
соот-но возможно(теоретически) 2 вар-та реализации: 1) обход по списку и запрос в котором обычное равенство 2) запрос в которм будут присутствовать условия Номенклатура В (&СписокНомеклатуры) |
|||
9
ViSo76
14.07.16
✎
13:07
|
(4) Это простой но крайне тормознутый метод. Делать нужно через временные таблицы. И иерархия так же ограничена, если не делать цикл на клиенте.
|
|||
10
Ildarovich
14.07.16
✎
13:09
|
(7) При произвольном (реальном) количестве уровней запросом получится!
Посмотрите, как сделано здесь: http://catalog.mista.ru/public/158512/ или здесь: http://catalog.mista.ru/public/160707/ . |
|||
11
Dotoshin
14.07.16
✎
13:12
|
(10) Интересное решение...
|
|||
12
Dotoshin
14.07.16
✎
13:17
|
+ (11) Только там все равно цикл присутствует, в котором текст запроса конструируется, так что это не совсем "чистая победа" :)
|
|||
14
ViSo76
14.07.16
✎
14:01
|
(12) Если количество уровней ограничено к примеру 10 то можно и запросом через временные таблицы нарисовать руками.
|
|||
15
Ildarovich
14.07.16
✎
14:50
|
(12) Вот пример запроса для справочника Номенклатура. Запрос выбирает ближайшее сверху задание реквизита "ВидНоменклатуры", так как у меня в базе реквизита Кво нет. Расчет, что будет не больше 8-ми уровней.
ВЫБРАТЬ
Разница с подходом "родитель...через много точек" в том, что тут можно заранее сказать "в справочнике не больше 32 уровней", встроить в запрос 5 блоков замыкания и получить все еще компактный результат. Для 32-х уровней родитель...родитель...будет кучерявее. |
|||
16
ViSo76
14.07.16
✎
18:39
|
(15) Соединения не оптимально. Можно множеством выборками + неявное соединение через точку + объединением результатов с фильтрацией
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |