|   |   | 
| 
 | Помогите с запросом | ☑ | ||
|---|---|---|---|---|
| 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) Соединения не оптимально. Можно множеством выборками + неявное соединение через точку + объединением результатов с фильтрацией     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |