|   |   | 
| 
 | В ИЕРАРХИИ в виртуальных таблицах | ☑ | ||
|---|---|---|---|---|
| 0
    
        Бешеная Нога 03.12.13✎ 11:46 | 
        при подготовке к эксперту нашел "материал", что "В ИЕРАРХИИ" в виртуальных таблицах - зло. ибо тот запрос который формируется для выполнения условия "В ИЕРАРХИИ" ни разу не оптимальный.
 и вроде как правильно сначала получить таблицу элементов из иерархии, а уже потом ее использовать в качестве отбора. есть запросы ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&ТекущийПериод, Счет В ИЕРАРХИИ (&Счета), , Организация = &Организация) и |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &ТекущийПериод, | Счет В | (ВЫБРАТЬ | ТаблицаСчетов.Счет | ИЗ | ТаблицаСчетов КАК ТаблицаСчетов), | , | Организация = &Организация) КАК БУ_Текущий где таблица счетов получается предварительно: "ВЫБРАТЬ | Хозрасчетный.Ссылка КАК Счет |ПОМЕСТИТЬ ТаблицаСчетов |ИЗ | ПланСчетов.Хозрасчетный КАК Хозрасчетный |ГДЕ | Хозрасчетный.Ссылка В ИЕРАРХИИ(&Счета) | |ИНДЕКСИРОВАТЬ ПО | Счет |; замер производительности показывает однинаковые 30 секунд выполнения (второй на 0,15 сек быстрее). значит фигня про "в иерархии"? | |||
| 1
    
        unregistered 03.12.13✎ 11:51 | 
        (0) Относительно регистра бухгалтерии - фигня.
 Таблица плана счетов в 99,99% случаев достаточно маленькая. Если бы речь шла об иерархическом справочнике с приличным количеством элементов, то возможно(!) разница была бы более значительной. | |||
| 2
    
        unregistered 03.12.13✎ 11:52 | 
        + к (1) поэксперементируй с условиями на значения субконто, например, Номенклатура или Контрагенты (смотря какой справочник поболе).     | |||
| 3
    
        Sabbath 03.12.13✎ 11:53 | 
        (0) а ты попробуй на большем объеме данных (в смысле больше элементов внутри группы) и большей вложенности     | |||
| 4
    
        Бешеная Нога 03.12.13✎ 11:57 | 
        (2) (3) возможно вы и правы. т.е. во втором случае получается "правильный запрос" но выхлопа особо не дает, так как данных относительно мало...     | |||
| 5
    
        unregistered 03.12.13✎ 12:01 | 
        (4) Запрос правильный и там и там.
 Вопрос только в выигрыше (будет ли он?). На выполнение запроса для отдельного получения таблицы счетов тоже уходит время и накладные расходы на получение результата этого запроса с последующей передачей этого результата обратно на сервер СУБД в качестве параметра основного запроса. Если уж идти по такому (второму) пути, то может целесообразнее пакет запросов делать, чтобы не гонять данные туда-сюда между серверами СУБД и 1С. | |||
| 6
    
        hhhh 03.12.13✎ 12:09 | 
        (4) это же элементарно, Ватсон. Во втором запросе используется кеш от первого запроса.
 Попробуйте перезагрузить комп для верности, и потом запустить второй запрос, а за ним первый. И секунды нам выложите. | |||
| 7
    
        WildSery 03.12.13✎ 14:14 | 
        (5) Просветите, пожалуйста, пакетный запрос выполняется не на сервере СУБД, а гоняется туда-сюда по частям?     | |||
| 8
    
        Rovan гуру 03.12.13✎ 14:16 | 
        (7) нет...на сервере     | |||
| 9
    
        Fragster модератор 03.12.13✎ 14:22 | 
        &Счета - это группа счетов-то хоть?     | |||
| 10
    
        Fragster модератор 03.12.13✎ 14:23 | 
        а еще лучше - список групп счетов     | |||
| 11
    
        Fragster модератор 03.12.13✎ 14:24 | 
        еще есть чит, который иногда срабатывает (не всегда, надо проводить замер на реальных данных):
 (Счет, Истина) В | (ВЫБРАТЬ | ТаблицаСчетов.Счет, Истина | ИЗ | ТаблицаСчетов КАК ТаблицаСчетов) | |||
| 12
    
        H A D G E H O G s 03.12.13✎ 14:24 | 
        (0) Ты - эксперт? Бугага.     | |||
| 13
    
        Бешеная Нога 03.12.13✎ 15:06 | 
        (10) список групп счетов и счетов )
 (11) да точно, ты уже как то про него говорил, тогда реально сработало ))) попробую применить ) | |||
| 14
    
        Бешеная Нога 03.12.13✎ 15:06 | 
        (12) давай. разбей меня в пух и прах своими знаниями.     | |||
| 15
    
        Бешеная Нога 03.12.13✎ 15:08 | 
        (12) в какое соединение выльеться в итоге (в иерархии) в виртуальной таблице?     | |||
| 16
    
        Бешеная Нога 03.12.13✎ 15:10 | 
        выльется     | |||
| 17
    
        John83 04.12.13✎ 10:52 | 
        (11) а в чем прикол?     | |||
| 18
    
        Бешеная Нога 05.12.13✎ 13:46 | 
        (11) в данному случае дало прирост 1с секунду ) все равно запросы почти одинакого выполняются...     | |||
| 19
    
        Sammo 05.12.13✎ 13:49 | 
        В некоторых случаях у меня (несмотря на рекомендации 1с) Где и join отрабатывали быстрее, чем условие на виртуальную таблицу. Но это в РН. По Бухии не готов сказать     | |||
| 20
    
        Sammo 05.12.13✎ 13:50 | 
        (17) В скуле получается не in(), а exists(), а он работает шустрее     | |||
| 21
    
        Бешеная Нога 05.12.13✎ 13:52 | 
        сейчас тесты.     | |||
| 22
    
        Бешеная Нога 05.12.13✎ 13:53 | 
        запрос в иерархии по регистру бухгалтерии - 47сек
 запрос в (таблица, с доп полем истина) по регистру бухгалтерии - 46 секунд запрос без условия по регистру бухгалтерии - 36 секунд | |||
| 23
    
        Fragster модератор 05.12.13✎ 14:01 | 
        (22) еще сделай тест - 1 запрос - выгрузка счетов в массив, 2 - отбор по параметру-массиву     | |||
| 24
    
        Бешеная Нога 05.12.13✎ 14:02 | 
        (23) т.е. в параметр виртуальной таблицы сунуть В (&Массив)?     | |||
| 25
    
        mikecool 05.12.13✎ 14:03 | 
        (20) фигассе... вот это писатели движка )))     | |||
| 26
    
        Бешеная Нога 05.12.13✎ 14:22 | 
        хотя при любом раскладе выигрыш будет максимум 10 секунд из 47... так что...     | |||
| 27
    
        samozvanec 05.12.13✎ 15:14 | 
        (26) так то четверть...     | |||
| 28
    
        WildSery 05.12.13✎ 15:39 | 
        (19) left join никак не может быстрее отрабатывать, чем exists.     | |||
| 29
    
        WildSery 05.12.13✎ 15:40 | 
        Тьфу, наоборот.     | |||
| 30
    
        H A D G E H O G s 05.12.13✎ 15:46 | 
        1) Выбрать 1 запросом все счета из иерархии, если так нетерпиться.
 2) Обойти кодом счета, получить всевозможные типы субконто. 3) Захерачить в 1 массив счета, в 2 массив - субконто. 4) Запросить остатки. Другой вопрос, если счетов 100500, тут так делать не надо. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |