8.х Построенный запрос к СУБД использует слишком много таблиц, (ГОРИТ)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Rafael1972, 5 сен 2006.

  1. TopicStarter Overlay
    Rafael1972
    Offline

    Rafael1972

    Регистрация:
    5 сен 2006
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.
    Огромная проблема:
    При формировании кониги покупок или продаж возникает сообщение:
    "Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256."

    Уважаемые, может кто встречался с такой проблемой?
    Интересуют пути её решения.
    Бухгалтерия предприятия, редакция 1.5 (1.5.2.3)
    Платформа: 8.0.16.2
    не рабоет ни в файловом варианте не в серверном.


    RLS нет, используется в запросе один регистр, и один документ
  2. Neco
    Offline

    Neco

    Регистрация:
    3 июл 2006
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Такое иногда встречается когда реквизит регистра или документа имеет тип "Любая ссылка"
  3. 1010011010
    Offline

    1010011010 [1cworld]

    Регистрация:
    1 авг 2006
    Сообщения:
    582
    Симпатии:
    0
    Баллы:
    26
    ну если в таком духе, то нужно избавиться от неограниченной длины... везде фикс ставить
  4. Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    И как же всё-таки обойти эту ошибку? Тоже мучаюсь :unsure:
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    в MS SQL никак. Только меня сам запрос.

    Вы бы лучше пказали, где она у Вас проявляется
  6. Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос=Новый запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	КатегорииОбъектов.Категория,
    |	КатегорииОбъектов.Объект.Ссылка КАК Ссылка,
    |	КатегорииОбъектов.Объект.Дата КАК ОбъектДата
    |ИЗ
    |	РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    |ГДЕ
    |	КатегорииОбъектов.Категория = &НеПроверен
    |	И КатегорииОбъектов.Объект ССЫЛКА Документ.РеализацияТоваровУслуг
    |	И КатегорииОбъектов.Объект.Дата МЕЖДУ &Дата1 И &Дата2
    |
    |УПОРЯДОЧИТЬ ПО
    |	ОбъектДата";
    
    НеПроверен=Справочники.КатегорииОбъектов.НайтиПоНаименованию("Не проверен");  
    Запрос.УстановитьПараметр("НеПроверен",НеПроверен);
    Запрос.УстановитьПараметр("Дата1",НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("Дата2",КонецДня(ДатаКон));
    Выборка1=Запрос.Выполнить().Выбрать();
    ТабПоле=Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.ТабПоле.СоздатьКолонки();
    
    Пока Выборка1.Следующий() Цикл
    Документ = Выборка1.Ссылка.ПолучитьОбъект();
    Документ.ОтражатьВБухгалтерскомУчете = Ложь;
    Документ.Записать();
    КонецЦикла;   
    
    ВыбНеПроверен=Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    
    ЗапросДок = Новый Запрос("ВЫБРАТЬ
    |	ВозвратТоваровПоставщику.Ссылка,
    |	ВозвратТоваровПоставщику.Дата КАК Дата
    |ИЗ
    |	Документ.ВозвратТоваровПоставщику КАК ВозвратТоваровПоставщику
    |ГДЕ
    |	ВозвратТоваровПоставщику.Дата МЕЖДУ &Дата1 И &Дата2
    |	И ВозвратТоваровПоставщику.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	ВозвратТоваровОтПокупателя.Ссылка,
    |	ВозвратТоваровОтПокупателя.Дата
    |ИЗ
    |	Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
    |ГДЕ
    |	ВозвратТоваровОтПокупателя.Дата МЕЖДУ &Дата1 И &Дата2
    |	И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	ПоступлениеТоваровУслуг.Ссылка,
    |	ПоступлениеТоваровУслуг.Дата
    |ИЗ
    |	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |ГДЕ
    |	ПоступлениеТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
    |	И ПоступлениеТоваровУслуг.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Ссылка,
    |	РеализацияТоваровУслуг.Дата
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
    |	И РеализацияТоваровУслуг.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	ТребованиеНакладная.Ссылка,
    |	ТребованиеНакладная.Дата
    |ИЗ
    |	Документ.ТребованиеНакладная КАК ТребованиеНакладная
    |ГДЕ
    |	ТребованиеНакладная.Дата МЕЖДУ &Дата1 И &Дата2
    |	И ТребованиеНакладная.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	РасходныйОрдерНаТовары.Ссылка,
    |	РасходныйОрдерНаТовары.Дата
    |ИЗ
    |	Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
    |ГДЕ
    |	РасходныйОрдерНаТовары.Дата МЕЖДУ &Дата1 И &Дата2
    |	И РасходныйОрдерНаТовары.Проведен = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |	ПриходныйОрдерНаТовары.Ссылка,
    |	ПриходныйОрдерНаТовары.Дата
    |ИЗ
    |	Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
    |ГДЕ
    |	ПриходныйОрдерНаТовары.Дата МЕЖДУ &Дата1 И &Дата2
    |	И ПриходныйОрдерНаТовары.Проведен = ИСТИНА
    |
    |УПОРЯДОЧИТЬ ПО
    |	Дата");
    ЗапросДок.УстановитьПараметр("Дата1",НачалоДня(ДатаНач));
    ЗапросДок.УстановитьПараметр("Дата2",КонецДня(ДатаКон));
    Выборка = ЗапросДок.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Документ = Выборка.Ссылка.ПолучитьОбъект();
    МетаданныеДокумента = Документ.Метаданные();
    Если ОбщегоНазначения.ЕстьРеквизитДокумента("ОтражатьВБухгалтерскомУчете",МетаданныеДокумента)
    И ВыбНеПроверен.Найти(Выборка.Ссылка) = Неопределено <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>
    Документ.ОтражатьВБухгалтерскомУчете = Истина;
    КонецЕсли;
    
    
    Вот такой фрагмент кода, дальше идет проводка по бух.учету. Я добавила первый запрос и условие
    Код:
    И ВыбНеПроверен.Найти(Выборка.Ссылка) = Неопределено
    
    (Кстати, Вы мне помогли). Всё работало на тестовой базе (мало данных). А вот в большой базе уже не работает.
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Попробуйте переписать первый запрос так:
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |	КатегорииОбъектов.Категория,
    |	ВЫРАЗИТЬ(КатегорииОбъектов.Объект.Ссылка КАК Документ.РеализацияТоваровУслуг) КАК Ссылка,
    |	КатегорииОбъектов.Объект.Дата КАК ОбъектДата
    |ИЗ
    |	РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    |ГДЕ
    |	КатегорииОбъектов.Категория = &НеПроверен
    |	И КатегорииОбъектов.Объект ССЫЛКА Документ.РеализацияТоваровУслуг
    |	И КатегорииОбъектов.Объект.Дата МЕЖДУ &Дата1 И &Дата2
    |
    |УПОРЯДОЧИТЬ ПО
    |	ОбъектДата";
    
    Ибо у вас получается слишком много типов там может участвовать и может RLS вмешаться.
    А еще можно и саму ссылку не выдергивать.
  8. Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Попробовала. Та же самая ошибка...
  9. Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Вопрос решен. Поменяла запрос.
    Код:
    Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
    |КатегорииОбъектов.Объект КАК Ссылка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
    |ПО РеализацияТоваровУслуг.Ссылка = КатегорииОбъектов.Объект
    |ГДЕ
    |	КатегорииОбъектов.Категория = &НеПроверен
    |	И РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2";
    
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вы сделали то, что я написал ранее:
    А также я ошибся и не дописал приведение типа к третьей строке.

Поделиться этой страницей