Имя: Пароль:
1C
1С v8
Ошибка выполнения запроса на уровне СУБД
0 ammorf
 
28.06.16
09:04
День добрый. Возникла такая проблема. Раньше этот запрос выполнялся без проблем. Но я тут добавил 2 новых поля рассчитываемых. И он перестал работать. Выдает вот такую ошибку:
"Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 10.0: Внутренняя ошибка: был достигнут предел служб выражений. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить.
HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=2, Severity=11, native=8632, line=1"
Вот запрос:
ВЫБРАТЬ
    ДанныеБухни.Счет КАК Счет,
    ВложенныйЗапрос.Наименование КАК Компания,
    ВложенныйЗапрос.Отсрочка КАК ОтсрочкаПлатежа,
    ВложенныйЗапрос.Ссылка КАК СсылкаКонтрагента,
    СУММА(ВЫБОР
            КОГДА ВложенныйЗапрос.Отсрочка <> 0
                ТОГДА ВЫБОР
                        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < ВЫБОР
                                КОГДА ВложенныйЗапрос.Отсрочка <> 0
                                    ТОГДА ВложенныйЗапрос.Отсрочка
                                ИНАЧЕ 30
                            КОНЕЦ
                            ТОГДА ДанныеБухни.СуммаОстатокДт
                        ИНАЧЕ 0
                    КОНЕЦ
            ИНАЧЕ 0
        КОНЕЦ) КАК НормальныйДолг,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА ВложенныйЗапрос.Отсрочка <> 0
                    ТОГДА ВЫБОР
                            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < ВЫБОР
                                    КОГДА ВложенныйЗапрос.Отсрочка <> 0
                                        ТОГДА ВложенныйЗапрос.Отсрочка
                                    ИНАЧЕ 30
                                КОНЕЦ
                                ТОГДА ДанныеБухни.СуммаОстатокДт
                            ИНАЧЕ 0
                        КОНЕЦ
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК НормальныйДолгВал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) < 30
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) > 0
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг30,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) < 30
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) > 0
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг30Вал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 30 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 60 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг3060,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 30 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 60 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг3060Вал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 60 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 90 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг6090,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 60 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 90 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг6090Вал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 90 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 120 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг90120,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 90 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 120 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг90120Вал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 120 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг120,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 120 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг120Вал,
    СУММА(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 150 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК Долг150,
    СУММА(ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 150 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) КАК Долг150Вал,
    СУММА(ВЫБОР
            КОГДА ВложенныйЗапрос.Отсрочка <> 0
                ТОГДА ВЫБОР
                        КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < ВЫБОР
                                КОГДА ВложенныйЗапрос.Отсрочка <> 0
                                    ТОГДА ВложенныйЗапрос.Отсрочка
                                ИНАЧЕ 30
                            КОНЕЦ
                            ТОГДА ДанныеБухни.СуммаОстатокДт
                        ИНАЧЕ 0
                    КОНЕЦ
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) < 30
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) > 0
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 30 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 60 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 60 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 90 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 90 + ВложенныйЗапрос.Отсрочка
                    И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 120 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 120 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ + ВЫБОР
            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 150 + ВложенныйЗапрос.Отсрочка
                ТОГДА ДанныеБухни.СуммаОстатокДт
            ИНАЧЕ 0
        КОНЕЦ) КАК ТоталРубВсего,
    СУММА((ВЫРАЗИТЬ(ВЫБОР
                КОГДА ВложенныйЗапрос.Отсрочка <> 0
                    ТОГДА ВЫБОР
                            КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < ВЫБОР
                                    КОГДА ВложенныйЗапрос.Отсрочка <> 0
                                        ТОГДА ВложенныйЗапрос.Отсрочка
                                    ИНАЧЕ 30
                                КОНЕЦ
                                ТОГДА ДанныеБухни.СуммаОстатокДт
                            ИНАЧЕ 0
                        КОНЕЦ
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) < 30
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДанныеБухни.Период, ДЕНЬ, ВложенныйЗапрос.Отсрочка), ДЕНЬ), &ДатаКон, ДЕНЬ) > 0
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 30 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 60 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 60 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 90 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 90 + ВложенныйЗапрос.Отсрочка
                        И РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) < 120 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 120 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2))) + (ВЫРАЗИТЬ(ВЫБОР
                КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДанныеБухни.Период, ДЕНЬ), &ДатаКон, ДЕНЬ) >= 150 + ВложенныйЗапрос.Отсрочка
                    ТОГДА ДанныеБухни.СуммаОстатокДт
                ИНАЧЕ 0
            КОНЕЦ / &Курс КАК ЧИСЛО(14, 2)))) КАК ТоталВалВсего
ИЗ
    (ВЫБРАТЬ
        ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
        ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
        ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
        ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаОстатокДт,
        ХозрасчетныйОстатки.Субконто3.Дата КАК Период,
        ХозрасчетныйОстатки.Счет КАК Счет
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Остатки(
                &ДатаКон,
                Счет = &Счет6201
                    ИЛИ Счет = &Счет6221,
                ,
                ) КАК ХозрасчетныйОстатки) КАК ДанныеБухни
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            спрКонтр.Ссылка КАК Ссылка,
            СУММА(ЕСТЬNULL(спрКонтр.Отсрочка, 0)) КАК Отсрочка,
            спрКонтр.Наименование КАК Наименование
        ИЗ
            (ВЫБРАТЬ
                Контрагенты.Ссылка КАК Ссылка,
                СУММА(ВложенныйЗапрос.Отсрочка) КАК Отсрочка,
                Контрагенты.Наименование КАК Наименование
            ИЗ
                Справочник.Контрагенты КАК Контрагенты
                    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                        ДополнительныеСведения.Объект КАК Объект,
                        СУММА(ВЫРАЗИТЬ(ДополнительныеСведения.Значение КАК ЧИСЛО(10, 0))) КАК Отсрочка
                    ИЗ
                        РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
                    ГДЕ
                        ДополнительныеСведения.Свойство = &СвойствоОтсрочка
                    
                    СГРУППИРОВАТЬ ПО
                        ДополнительныеСведения.Объект) КАК ВложенныйЗапрос
                    ПО Контрагенты.Ссылка = ВложенныйЗапрос.Объект
            
            СГРУППИРОВАТЬ ПО
                Контрагенты.Ссылка,
                Контрагенты.Наименование) КАК спрКонтр
        
        СГРУППИРОВАТЬ ПО
            спрКонтр.Ссылка,
            спрКонтр.Наименование) КАК ВложенныйЗапрос
        ПО ДанныеБухни.Субконто1 = ВложенныйЗапрос.Ссылка

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Отсрочка,
    ВложенныйЗапрос.Ссылка,
    ДанныеБухни.Счет,
    ВложенныйЗапрос.Наименование
ИТОГИ
    СУММА(ОтсрочкаПлатежа),
    СУММА(НормальныйДолг),
    СУММА(НормальныйДолгВал),
    СУММА(Долг30),
    СУММА(Долг30Вал),
    СУММА(Долг3060),
    СУММА(Долг3060Вал),
    СУММА(Долг6090),
    СУММА(Долг6090Вал),
    СУММА(Долг90120),
    СУММА(Долг90120Вал),
    СУММА(Долг120),
    СУММА(Долг120Вал),
    СУММА(Долг150),
    СУММА(Долг150Вал),
    СУММА(ТоталРубВсего),
    СУММА(ТоталВалВсего)
ПО
    ОБЩИЕ,
    Счет
АВТОУПОРЯДОЧИВАНИЕ

Платформа 1С:Предприятие 8.3 (8.3.7.1776)
Конфигурация Бухгалтерия предприятия, редакция 3.0 (3.0.42.89)
Клиент-сервер СУБД SQL Server 2008 R2
Помогите разобраться как можно упростить запрос?!
1 assasu
 
28.06.16
09:16
когда учился и читал книжки всегда считал что один запрос это хорошо, быстро и методологически правильно.
Но практика вещь суровая, все это нужно поддерживать, помнить, менять время от времени, дорабатывать.
Никогда не пишу такие запросы на практике, лучше два , три запроса проще с кодом между ними. Надежно и проще в отладке.
2 ammorf
 
28.06.16
09:18
(1) То есть предлагаешь разделить на 2 запроса?
3 assasu
 
28.06.16
09:20
(2) предлагаю больше запросов. и код между ними. так ты поймешь где у тебя ошибка в данных быстрее.
4 patria0muerte
 
28.06.16
09:38
+ за больше запросов. Делай предварительные расчеты в ВТ и избавляйся от таких вырвиглазных ВЫБОР КОГДА...
И вложенные запросы тоже убери лучше...
5 ammorf
 
28.06.16
12:29
Если кому интересно я этот запрос + новые поля разбил на 2 запроса и объединил)) теперь он работает нормально))