Имя: Пароль:
1C
1С v8
Построенный запрос использует слишком много таблиц... Что в запросе можно изменить?
0 slafor
 
30.12.19
10:29
УПП. Есть запрос:

"ВЫБРАТЬ
    ОборотыБюджетов.Период,
    ОборотыБюджетов.Регистратор,
    ОборотыБюджетов.СтатьяОборотов,
    ОборотыБюджетов.Контрагент,
    ОборотыБюджетов.Валюта,
    ОборотыБюджетов.ДокументОснование,
    ВЫБОР
        КОГДА ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
                ИЛИ ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеВходящее
            ТОГДА ВЫРАЗИТЬ(ОборотыБюджетов.ДокументОснование.Комментарий КАК СТРОКА(100))
        ИНАЧЕ NULL
    КОНЕЦ КАК Комментарий,
    СУММА(ВЫБОР
            КОГДА ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеВходящее
                ТОГДА ОборотыБюджетов.СуммаУпр
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаБанкПриход,
    СУММА(ВЫБОР
            КОГДА ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
                ТОГДА ОборотыБюджетов.СуммаУпр
            ИНАЧЕ 0
        КОНЕЦ) КАК СуммаБанкРасход,
    СУММА(ОборотыБюджетов.СуммаУпр) КАК СуммаУпр,
    СУММА(ОборотыБюджетов.ВалютнаяСумма) КАК ВалютнаяСумма
ИЗ
    РегистрНакопления.ОборотыБюджетов КАК ОборотыБюджетов
ГДЕ
    ОборотыБюджетов.Период МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)

СГРУППИРОВАТЬ ПО
    ОборотыБюджетов.Период,
    ОборотыБюджетов.Регистратор,
    ОборотыБюджетов.СтатьяОборотов,
    ОборотыБюджетов.Контрагент,
    ОборотыБюджетов.Валюта,
    ОборотыБюджетов.ДокументОснование,
    ВЫБОР
        КОГДА ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
                ИЛИ ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеВходящее
            ТОГДА ВЫРАЗИТЬ(ОборотыБюджетов.ДокументОснование.Комментарий КАК СТРОКА(100))
        ИНАЧЕ NULL
    КОНЕЦ".

При выводе его через консоль отчетов выдает ошибку:

"{Обработка.КонсольОтчетов.Форма.Форма.Форма(801)}: Ошибка при вызове метода контекста (Вывести)
        ПостроительОтчетов.Вывести(ЭлементыФормы.РезультатТабДокСвод);
по причине:
Ошибка выполнения запроса
по причине:
Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.
Microsoft SQL Native Client: Too many table names in the query. The maximum allowable is 256.
HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=1, Severity=F, native=319, line=771
SQLSrvr: SQLSTATE=42000, state=1, Severity=F, native=319, line=769
SQLSrvr: SQLSTATE=42000, state=1, Severity=F, native=319, line=767
SQLSrvr: SQLSTATE=42000, state=1, Severity=F, native=31".

При попытке вывести через обычный отчет система просто "падает" и требует перезагрузки.

Из-за чего это и что в запросе можно изменить?

Как я понимаю, это из-за попытки сгруппировать по полю неограниченной длины (Комментарий), но там же явно указано ВЫРАЗИТЬ КАК Строка(100), т.е. в принципе, должно работать...
1 Автосервис
 
30.12.19
10:33
Уверены что вам вообще этот комментарий в запросе нужен? Без него нормально отрабатывает?
2 acht
 
30.12.19
10:37
(0)
ВЫРАЗИТЬ(
ВЫБОР
КОГДА
    ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
ТОГДА
    ВЫРАЗИТЬ(ОборотыБюджетов.ДокументОснование КАК Документ.ПлатежноеПоручениеИсходящее).Комментарий
КОГДА
    ОборотыБюджетов.ДокументОснование ССЫЛКА Документ.ПлатежноеПоручениеВходящее
ТОГДА
    ВЫРАЗИТЬ(ОборотыБюджетов.ДокументОснование КАК Документ.ПлатежноеПоручениеВходящее).Комментарий
КОНЕЦ
КАК СТРОКА(100)
)
3 mistеr
 
30.12.19
10:37
(0) У регистра ОборотыБюджетов слишком много регистраторов. Идет неявное соединение со всеми ними.

Если тебе нужны только обороты по платежкам, пропиши это в ГДЕ.
4 Cyberhawk
 
30.12.19
10:38
ДокументОснование.Комментарий вот из-за этого
5 Cyberhawk
 
30.12.19
10:39
Добавляй в ГДЕ условия на типы регистраторов
6 polosov
 
30.12.19
10:39
(0) Возможно ОборотыБюджетов.ДокументОснование содержит много типов документов.
И ОборотыБюджетов.ДокументОснование.Комментарий вызывает слишком много соединений. Поэтому надо:
1. избавиться от ИЛИ в ВЫБОР КОГДА
2. Переделать на ВЫРАЗИТЬ(ВЫРАЗИТЬ(ОборотыБюджетов.ДокументОснование КАК Документ.ПлатежноеПоручениеИсходящее).Комментарий КАК СТРОКА(100))
7 slafor
 
30.12.19
10:49
(2) Спасибо, работает!

(3)(5) Нужны обороты по всем регистраторам, а комментарии только по платежкам.
8 Simod
 
30.12.19
10:54
(7) Сделай левое соединение с документами ПлатежноеПоручениеИсходящее и ПлатежноеПоручениеВходящее и получай комментарий из них через ЕСТЬNULL.