Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Упрощение запроса в 1С

Упрощение запроса в 1С
Я
   trialex3
 
27.09.21 - 17:14
Добрый день. Дали мне тут старую чужую обработку что бы вытащить из нее запрос но она выбивает ошибку SQL вроде как ругается на большую вложенность условий. В запросе нашел такого монстра - это можно как то уменьшить?

(&ЧитатьСводныеДанные
                ИЛИ ВЫБОР
                    КОГДА НДФЛСведенияОДоходах.КодПоОКТМО <> &ПустойКодПоОКТМО
                        ТОГДА НДФЛСведенияОДоходах.КодПоОКТМО
                    КОГДА ЕСТЬNULL(НДФЛСведенияОДоходах.ПодразделениеОрганизации.КодПоОКТМО, &ПустойКодПоОКТМО) <> &ПустойКодПоОКТМО
                        ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.КодПоОКТМО
                    ИНАЧЕ ВЫБОР
                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель ЕСТЬ NULL
                                ТОГДА ВЫБОР
                                        КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.КодПоОКТМО = &ПустойКодПоОКТМО
                                            ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.КодПоОКТМО
                                        ИНАЧЕ ВЫБОР
                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель ЕСТЬ NULL
                                                    ТОГДА ВЫБОР
                                                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.КодПоОКТМО = &ПустойКодПоОКТМО
                                                                ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.КодПоОКТМО
                                                            ИНАЧЕ ВЫБОР
                                                                    КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                        ТОГДА ВЫБОР
                                                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.КодПоОКТМО = &ПустойКодПоОКТМО
                                                                                    ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.КодПоОКТМО
                                                                                ИНАЧЕ ВЫБОР
                                                                                        КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                                            ТОГДА ВЫБОР
                                                                                                    КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КодПоОКТМО = &ПустойКодПоОКТМО
                                                                                                        ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КодПоОКТМО
                                                                                                КОНЕЦ
                                                                                        ИНАЧЕ ВЫБОР
                                                                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                                                    ТОГДА ВЫБОР
                                                                                                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель.КодПоОКТМО = &ПустойКодПоОКТМО
                                                                                                                ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель.КодПоОКТМО
                                                                                                            ИНАЧЕ ЕСТЬNULL(НДФЛСведенияОДоходах.ОбособленноеПодразделение.КодПоОКТМО, &ПустойКодПоОКТМО)
                                                                                                        КОНЕЦ
                                                                                            КОНЕЦ
                                                                                    КОНЕЦ
                                                                            КОНЕЦ
                                                                КОНЕЦ
                                                        КОНЕЦ
                                            КОНЕЦ
                                    КОНЕЦ
                        КОНЕЦ
                КОНЕЦ = &КодПоОКТМО)
            И (&ЧитатьСводныеДанные
                ИЛИ ВЫБОР
                    КОГДА НДФЛСведенияОДоходах.КПП <> &ПустойКПП
                        ТОГДА НДФЛСведенияОДоходах.КПП
                    КОГДА ЕСТЬNULL(НДФЛСведенияОДоходах.ПодразделениеОрганизации.КПП, &ПустойКПП) <> &ПустойКПП
                        ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.КПП
                    ИНАЧЕ ВЫБОР
                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель ЕСТЬ NULL
                                ТОГДА ВЫБОР
                                        КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.КПП = &ПустойКПП
                                            ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.КПП
                                        ИНАЧЕ ВЫБОР
                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель ЕСТЬ NULL
                                                    ТОГДА ВЫБОР
                                                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.КПП = &ПустойКПП
                                                                ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.КПП
                                                            ИНАЧЕ ВЫБОР
                                                                    КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                        ТОГДА ВЫБОР
                                                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.КПП = &ПустойКПП
                                                                                    ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.КПП
                                                                                ИНАЧЕ ВЫБОР
                                                                                        КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                                            ТОГДА ВЫБОР
                                                                                                    КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КПП = &ПустойКПП
                                                                                                        ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КПП
                                                                                                КОНЕЦ
                                                                                        ИНАЧЕ ВЫБОР
                                                                                                КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
                                                                                                    ТОГДА ВЫБОР
                                                                                                            КОГДА НЕ НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель.КПП = &ПустойКПП
                                                                                                                ТОГДА НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.Родитель.КПП
                                                                                                            ИНАЧЕ ЕСТЬNULL(НДФЛСведенияОДоходах.ОбособленноеПодразделение.КПП, &ПустойКПП)
                                                                                                        КОНЕЦ
                                                                                            КОНЕЦ
                                                                                    КОНЕЦ
                                                                            КОНЕЦ
                                                                КОНЕЦ
                                                        КОНЕЦ
                                            КОНЕЦ
                                    КОНЕЦ
                        КОНЕЦ
                КОНЕЦ = &КПП) КАК ДанныеДляОтчета
   ДенисЧ
 
1 - 27.09.21 - 17:16
НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КПП


Йоооо....
   Mikeware
 
2 - 27.09.21 - 17:17
(1) надо "до седьмого колена"? :-)
   ДенисЧ
 
3 - 27.09.21 - 17:19
(2) До 12го. И "выше чеки".
   trialex3
 
4 - 27.09.21 - 17:19
(1) У меня 1С после такого запроса вообще не работает и предлагает либо выключиться либо перезагрузиться)
   ДенисЧ
 
5 - 27.09.21 - 17:20
(4) Это она ещё по-доброму. А могла бы вылезти и в лицо дать...
   Mikeware
 
6 - 27.09.21 - 17:21
(5) "лицо, ударившее данное лицо по лицу, данному лицу не известно!"©
   RomanYS
 
7 - 27.09.21 - 17:22
(0) собрать предварительно табличку соответствий Подкразделение-КПП-ОКТМО и переда её параметром в запрос. Текст в (0) заменить на левое соединение с переданной ТЗ
   fisher
 
8 - 27.09.21 - 17:26
По красоте, это надо бы в условия соединения.
   RomanYS
 
9 - 27.09.21 - 17:30
(8) кстати вариант. Только условие всё равно многоэтажным останется, т.к. есть риск что на промежуточном этаже будет тоже заполнен КПП
   lodger
 
10 - 27.09.21 - 17:33
суть дерева сводится к чтению ОКТМО+КПП из подразделения с поправкой на иерархию.
если уж прямо западло сделать один плоский запрос с постобработкой, то можно покурить шаманство https://infostart.ru/1c/articles/158512/
   Mikeware
 
11 - 27.09.21 - 17:35
(10) ildarovich® рулит!
пару раз пытался повторить, без "подглядывания в первоисточник" не получалось...
   hhhh
 
12 - 27.09.21 - 17:41
(9) подразделений не так много, просто сделать временную таблицу по вычислению кпп, а в основной таблице уже вставлять готовый кпп из вт.
   RomanYS
 
13 - 27.09.21 - 17:42
(12) это же в (7) предлагал
   fisher
 
14 - 27.09.21 - 17:51
(11) Оно эффективно для глубоких иерархий с одной стороны и при этом работает только для всей иерархии справочника. То есть не всегда эффективно этот прием использовать.
   novichok79
 
15 - 27.09.21 - 17:58
**бать! вот это case when царский
   novichok79
 
16 - 27.09.21 - 17:59
по идее надо вытащить логику определения нужного родителя ПодразделениеОрганизации из запроса, перетащить ее куда-нибудь в код, а в запрос кидать нужное ПодразделениеОрганизации
   ejikbeznojek
 
17 - 27.09.21 - 18:10
(0) А нельзя обработкой заполнить КПП и ОКТМО на определённых уровнях, запретить записывать незаполненные и запросом брать из этих уровней?
   Ненавижу 1С
 
18 - 27.09.21 - 18:11
Выбор когда тогда можно написать без вложений
   Mikeware
 
19 - 27.09.21 - 18:35
(14) "более эффективно для глубоких", ибо логарифм. ну и для следующих уровней тоже можно сделать.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.