Имя: Пароль:
1C
1C 7.7
v7: Типизация в 1с++ (sql 2008R2)
0 Туц
 
20.11.13
13:04
Берем запрос "SELECT спр.ID [Номенклатура $Справочник.Номенклатура] FROM $Справочник.Номенклатура спр"
В профайлере наблюдаем exec _1sp_SC84_ByID по 1 на каждую строку.
На больших выборках тормозит нереально. Тоже самое без типизации выполняется на раз.

Вопрос. Есть ли способы чтоб типизация выполнялась одним запросом, а не по одному на каждую строку?
1 Ёпрст
 
20.11.13
13:05
че то ты не то наблюдаешь
2 Туц
 
20.11.13
13:07
(1) Да как не то.... когда то. 2 серванта на обоих сабж.
3 Туц
 
20.11.13
13:10
(1) На больших выборках, на больших!
4 КонецЦикла
 
20.11.13
13:10
А по справочнику никто не лазит в это время? Он не открыт у тебя?
5 Mikeware
 
20.11.13
13:10
(0)Дибо глаза, либо руки.
6 КонецЦикла
 
20.11.13
13:12
Это именно в в момент выполнения или дальнейших действий?
7 dk
 
20.11.13
13:13
(0) есть такая лажа
8 Туц
 
20.11.13
13:13
(4) Сижу один. Справочник закрыт.
(5) Ну я хз... что можно не так сделать?
(6) Когда запрос выполняется, сразу. В профайлере до и после спокойно. Только во время выполнения.
9 КонецЦикла
 
20.11.13
13:16
Переходите на 2005, какие фишки 2008 реально используются? :)

Наверное при БОЛЬШИХ 1С начинает что-то ворочать в кишках, вот и происходит перебор.

А если не делать выборку в ТЗ, а поместить во временную таблицу?
10 Туц
 
20.11.13
13:17
(9) Проверяю.
11 Mikeware
 
20.11.13
13:19
(9) а с какого ей чего-то ворочать?
как вариант только - переотрисовывать справочник, если открыт.
или если ТС результирующую ТЗ просматривает - получать представление.
12 dk
 
20.11.13
13:20
(9) а нахрена типизация во временной?
13 Туц
 
20.11.13
13:25
глВыполнитьЗапрос(глБДЗапрос,"IF OBJECT_ID(N'tempdb..#ВВВВВ', N'U') IS NOT NULL DROP TABLE #ВВВВВ");
    глВыполнитьЗапрос(глБДЗапрос,"SELECT top 10000
    |спр.ID [Номенклатура $Справочник.Номенклатура]
    |INTO #ВВВВВ
    |FROM $Справочник.Номенклатура спр
    |");
    
    Рез = глВыполнитьИнструкцию(глБДЗапрос,"SELECT * FROM #ВВВВВ");
    Рез.ВыбратьСтроку();    


Собственно всё тихо до Рез.ВыбратьСтроку();
14 dk
 
20.11.13
13:26
на 2000-м тоже самое происходит
15 Mikeware
 
20.11.13
13:26
(13) интересно, что ты хочешь иметь во временной таблице?
см (12)
16 ДенисЧ
 
20.11.13
13:27
Анафига типизировать при помещении во временную таблицу? О_о
17 Туц
 
20.11.13
13:29
(15,16) Абсолютно незачем, но ради спортивного интереса.
18 Туц
 
20.11.13
13:31
Я то в принципе выкрутился, обошелся поиском по коду, вместо номенклатуры, но в следующий раз так может и не получиться.
19 dk
 
20.11.13
13:34
а нафига поиск по коду, если ты по ID через MetaDataWork можешь ссылку вытащить?
20 dk
 
20.11.13
13:35
просто не понятна логика
сначала делаем красивую быструю выборку 1с++, а потом делаем тупой медленный найтипокоду?
21 Туц
 
20.11.13
13:42
Логика такая. Вот пришло время подбор запилить. А в нём остатки и прочая лабудень расчитывается при скролле. В скуле это жутко медленно. При открытии кидаю в тз и при скролле тупо ТЗ.НайтиЗначение.... я ж как думал... всё, тз на клиенте, к серверу по каждой строке обращаться - моветон. Но как оказалось по объектным типам данных к серверу всё одно есть обращения.  Зацепился на код. Поиск по коду идет быстро и на сервере тишь. Можно конечно для объектных переложить на sqlite и подготовить запросик табличка то в памяти сидеть будет, не жалко. Но то что получилось быстрее DBF, да и ладно.
22 МихаилМ
 
20.11.13
13:46
(0)
путаете.
лавина  _1sp_SC84_ByID будет наблюдаться при отображении тз.
23 dk
 
20.11.13
13:47
имхо такая задача решается через кидание в темповую остатков с индексом по товару
а для скроллинга запрос с параметрами к темповой таблице
24 КонецЦикла
 
20.11.13
13:53
(22) Вот для этого и предложил во временную таблицу писать
(21) Нормально там все если не очень сложные расчет
У меня считались остатки, резервы, временные резервы, резервы под раскладку (все через юнион алл), средний сервер, 100 юзверей
25 ADirks
 
20.11.13
13:53
> Собственно всё тихо до Рез.ВыбратьСтроку();
не, ну а ты чего ждал, собственно?

А хочешь хорощих, годных подборов - кури ТабличноеПоле
26 КонецЦикла
 
20.11.13
13:56
(25) Не ну тут можно его успокоить... в реальной работе 1С же будет искать по строке, а не показывать ТЗ полностью
К тому же можно в индексированную ТЗ выгружать и сделать индекс
27 ADirks
 
20.11.13
13:57
(26) я не хочу успокаивать, а хочу чтоб дошло :)
28 Туц
 
20.11.13
14:07
(25) Ну как бы да.
29 КонецЦикла
 
20.11.13
14:14
Попробуй что получается по итогу, ее же не будешь показывать пользователям и тормозить не будет :)
30 Туц
 
20.11.13
14:30
(29) Эх... Ваша правда. Всему виной, вино и опиум ))... При отладке табличку подглядывал ))