Имя: Пароль:
1C
1С v8
Упрощение запроса в 1С
,
0 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
НДФЛСведенияОДоходах.ПодразделениеОрганизации.Родитель.Родитель.Родитель.Родитель.КПП


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