Имя: Пароль:
1C
 
Кто сталкивался? The query processor ran out of stack space during query optimization
0 Ivanich
 
27.04.10
09:49
Текст запроса простой
ВЫБРАТЬ
   ЕСТЬNULL(ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Субконто1.Код, &ПустСсылка) КАК Номенклатура,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт,
   ПроводкиПоУпрПлануСчетовОстаткиИОбороты.ПериодДень КАК Период
ИЗ
   РегистрБухгалтерии.ПроводкиПоУпрПлануСчетов.ОстаткиИОбороты(
           &Дата1,
           &Дата2,
           Авто,
           ,
           Счет = &Счет,
           ,
           Субконто1.Код В (&ВыбНоменклатура)
               И Субконто2.Код В (&ВыбСклад)) КАК ПроводкиПоУпрПлануСчетовОстаткиИОбороты
ГДЕ
   (НЕ ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
   И ИСТИНА

УПОРЯДОЧИТЬ ПО
   Номенклатура,
   Период
ИТОГИ
   СУММА(СуммаНачальныйОстатокДт),
   СУММА(СуммаОборотДт),
   СУММА(СуммаОборотКт),
   СУММА(СуммаКонечныйОстатокДт),
   СУММА(КоличествоНачальныйОстатокДт),
   СУММА(КоличествоОборотДт),
   СУММА(КоличествоОборотКт),
   СУММА(КоличествоКонечныйОстатокДт)
ПО
   ОБЩИЕ,
   Номенклатура,
   Период ПЕРИОДАМИ(ДЕНЬ, &Дата1, &Дата2)
1 Ivanich
 
27.04.10
10:06
Выполнял следующее:
1. Если убрать "Субконто1.Код В (&ВыбНоменклатура)" ошибка исчезает.
2. Если задавать дата1 01.04.2010 00:00:00 или ранее, то ошибка исчезает
3. Если задать дата1 01.04.2010 00:00:01 или позже ошибка возникает.
4. Выполнил ТИИ и пересчет итгов в SQL варианте. Добился устранения всех ошибок. Ошибка сохраняется
5. Перевел базу в файловый вариант. проверил СHDBFL - ошибок нет.
6. ТИИ в файловом варианте - ошибок нет
7. Запрос в файловом варианте работает
8. Перевожу обратно в SQL - вылетает
9. Вывел на печать массив <ВыбНоменклатура> количество элементов 91. Начал увеличивать количество эл-тов с 1-го. На 57 элементе - возникла ошибка.
10. Проверил запрос на элементах с 50 по 60 - ошибок нет
11. Начал добавлять элементы 91,90,89... где-то на 57 снова возникает ошибка

Что еще можно сделать?
2 Maxus43
 
27.04.10
10:09
ГДЕ
   (НЕ ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
   И ИСТИНА

неосилил... зачем И ИСТИНА?
3 Mort
 
27.04.10
10:09
Субконто1.Код В (&ВыбНоменклатура) - а подумать?
4 Maxus43
 
27.04.10
10:11
на Скуле запросам помагает обновление статистики ещё...
5 Ivanich
 
27.04.10
10:18
(2) текст запроса формируется динамически. в исходном вариате
строка "И ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Субконто1.УпрВидРеализации.Код В(&ВыбУпрВид)"
она заменяется на "И ИСТИНА" если не задан массив ВыбУпрВид
Текст взят с отладчика
6 Ivanich
 
27.04.10
10:20
(3) не понял вопроса?
Субконто1.Код - это строка, а ВыбНоменклатура - это массив вида 0002057,008926 и т.д.
7 Ivanich
 
27.04.10
10:21
(4) что такое обновление статистики? Я не админ
8 Maxus43
 
27.04.10
10:24
(7) на основании скульной статистики строится план запроса к скулю от 1с. можно попробовать обновить её, но лучше разобраться с самим запросом, оптимизировать
9 Ivanich
 
27.04.10
10:33
Еще баз 11. В 10 проблем нет.
(8) Счас перенес условие из параметров виртуальной таблицы в секцию ГДЕ
т.е Субконто1.Код В (&ВыбНоменклатура)

ГДЕ
   (НЕ ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
   И ПроводкиПоУпрПлануСчетовОстаткиИОбороты.Субконто1.Код В (&ВыбНоменклатура)

ошибка исчезла. Но это же не оптимизация запроса.
10 Maxus43
 
27.04.10
10:36
(9) как сказать... условие чесно говоря не красивое, запрос на скуль кривой посылает и оптимизировать не может...
Субконто1 В (&ВыбНоменклатура) - чем не катит, если ссылки на номенклатуру а не коды подставлять?
11 Maxus43
 
27.04.10
10:38
и сколько там элементов в этих массивах номенклатуры и складов?
12 Ivanich
 
27.04.10
10:43
(11)Запрос выполняется по СОМ-соединению, поэтому параметры передаем в виде строк и чисел и получаем тоже строки/числа
склады до 15, номенклатура 3 тысячи.
13 toypaul
 
гуру
27.04.10
10:49
что-то подсказывает мне, что нужно указать виды субконто. иначе возможно что Субконто1.Код цепляет за собой кучу таблиц (можно посмотреть в СКЛ профайлере).
14 Ivanich
 
27.04.10
10:52
(13) спасибо, счас попробую
15 Ivanich
 
27.04.10
11:00
Субконто1 ССЫЛКА Справочник.Номенклатура
               И Субконто1.Код В (&ВыбНоменклатура)
               И Субконто2.Код В (&ВыбСклад)
НЕ помогло, вылетел
16 toypaul
 
гуру
27.04.10
11:03
виды субконто насколько я помню задаются в таблице регистра. правда ни разу такой возможностью не приходилось пользоваться. рекомендую все же посмотреть что там в профайлере творится.
17 Ivanich
 
28.04.10
12:17
Вообщем, админ где-то накопал, что это ошибка в SP4. Майкрософт вроде признает эту проблему.
Пришлось переделать запрос. Заменил "Субконто1.Код В (&ВыбНоменклатура)" на
Субконто1 В (ВЫБРАТЬ РАЗЛИЧНЫЕ
       Номенклатура.Ссылка
       ИЗ
       Справочник.Номенклатура КАК Номенклатура
       ГДЕ
       Номенклатура.Код В (&ВыбНоменклатура))
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший