|
1C 8 + Ole 7.7 | ☑ | ||
---|---|---|---|---|
0
plnz
16.11.18
✎
10:25
|
Из восьмерки (обычные формы) по ОЛЕ подключаюсь к 7.7 и выполняю там запрос. Запрос выполняется очень долго (минут 10). Тот же самый запрос напрямую в 7.7 выполняется за доли секунды. В чем может быть причина?
|
|||
1
plnz
16.11.18
✎
10:26
|
ВыбНачПериода = "01.01.2000";
ВыбКонПериода = База77.EvalExpr("ПолучитьДатуТА()"); Результат = База77.EvalExpr("СкорректироватьСписок(1,1)"); Результат = База77.EvalExpr("СкорректироватьСписок(1,2, ""Справочник"", ""Изделия"", """ + Штрихкод + """)"); Запрос77 = База77.CreateObject("Запрос"); ТекстЗапроса =" |Период с '"+ВыбНачПериода+ "' по '"+ВыбКонПериода+"'; |Фирма = Регистр.ОстаткиИзделий.Фирма; |Номенклатура = Регистр.ОстаткиИзделий.Изделие; |ТекущийДокумент = Регистр.ОстаткиИзделий.ТекущийДокумент; |Количество = Регистр.ОстаткиИзделий.Количество; |Вес = Регистр.ОстаткиИзделий.Вес; |Сумма = Регистр.ОстаткиИзделий.Сумма; |Функция КоличествоНачОст = НачОст(Количество); |Функция КоличествоПриход = Приход(Количество); |Функция КоличествоРасход = Расход(Количество); |Функция КоличествоКонОст = КонОст(Количество); |Функция ВесНачОст = НачОст(Вес); |Функция ВесПриход = Приход(Вес); |Функция ВесРасход = Расход(Вес); |Функция ВесКонОст = КонОст(Вес); |Функция СуммаНачОст = НачОст(Сумма); |Функция СуммаПриход = Приход(Сумма); |Функция СуммаРасход = Расход(Сумма); |Функция СуммаКонОст = КонОст(Сумма); |Группировка ТекущийДокумент; |Условие(Номенклатура = СписокЗначенийЗапроса[1]); |"; Если Запрос77.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; |
|||
2
ДенисЧ
16.11.18
✎
10:26
|
Именно запрос или вся обработка?
|
|||
3
plnz
16.11.18
✎
10:27
|
именно запрос
|
|||
4
plnz
16.11.18
✎
10:30
|
было два варианта формирования условия запроса
1) через номенклатура.код = штрихкод 2) использовать решение с помощью известной процедуры СкорректироватьСписок так вот по времени - если в 7.7 (напрямую) в звпросе написать условие номенклатура.код = штрихкод вместо номенклатура = ВыбНоменклатур, то время выполнение соизмеримо с временем по ОЛЕ |
|||
5
plnz
16.11.18
✎
10:30
|
надеюсь понятно выразился...
|
|||
6
NikVars
16.11.18
✎
10:31
|
Семерочная Оле не быстрая штука.
|
|||
7
Ёпрст
16.11.18
✎
10:33
|
(4) ясен пень, за условия через точку нужно пизд..ть линейкой по пальчикам, чтоб неповадно было
|
|||
8
Ёпрст
16.11.18
✎
10:35
|
напиши так:
|
|||
9
plnz
16.11.18
✎
10:35
|
(7) я и привел это для сравнения
такое чувство, что пол оле условие запроса как-то по другому обрабатывается. такое возможно? |
|||
10
Ёпрст
16.11.18
✎
10:35
|
наслаждайся
|
|||
11
Ёпрст
16.11.18
✎
10:35
|
(9) нет
|
|||
12
plnz
16.11.18
✎
10:35
|
(8) пробовал. не помогает
|
|||
13
Ёпрст
16.11.18
✎
10:35
|
база 7.7 вообще не догадывается, что её кто-то по оле запустил, ей пофик
|
|||
14
Ёпрст
16.11.18
✎
10:36
|
(12) врешь же.
|
|||
15
plnz
16.11.18
✎
10:37
|
(14) нет, ча с замерами скину картинку
|
|||
16
ptiz
16.11.18
✎
10:37
|
(0) ОЛЕ в 7.7 - тормоз, это нормально. Если надо быстро - запускать 7.7 через командную строку с параметрами, чтобы она вернула ответ в текстовый файл, например.
|
|||
17
plnz
16.11.18
✎
10:44
|
это замер в 8
https://yadi.sk/i/ZaF0SCBhE-e3Qw |
|||
18
plnz
16.11.18
✎
10:49
|
вот 7.7
https://yadi.sk/i/Msl5YZxCuKkRvQ |
|||
19
plnz
16.11.18
✎
10:54
|
и замер в 7.7 с сылкой на справочник (и без строчки в запросе
ШК = Регистр.ОстаткиИзделий.Изделие.Код; https://yadi.sk/i/wgENU1dxBSMwiw |
|||
20
Ёпрст
16.11.18
✎
11:00
|
(19) ты сравниваешь несравнимые вещи.
Ты сравни время выполнения (8) и такой код:
|
|||
21
Ёпрст
16.11.18
✎
11:01
|
Если надо скорости - пиши прямой запрос к базе 7.7 из снеговика
|
|||
22
Ёпрст
16.11.18
✎
11:01
|
7.7 у тя дбф ? sql ?
|
|||
23
plnz
16.11.18
✎
11:02
|
(22) дбф
|
|||
24
plnz
16.11.18
✎
11:05
|
(20) то есть добиться нормальной скорости не получится без ухищрений?
|
|||
25
plnz
16.11.18
✎
11:05
|
либо прямой запрос, либо то-то еще?
|
|||
26
АгентБезопасной Нацио
16.11.18
✎
11:06
|
(25) (24) а разве прямой запрос - ухищрение? по моему, это как раз нормальный язык.
|
|||
27
plnz
16.11.18
✎
11:07
|
(26) я с ними не сталкивался... поэтому пока для меня это ухищрение ))
|
|||
28
Ёпрст
16.11.18
✎
11:10
|
(23) На вот, как образец..
|
|||
29
plnz
16.11.18
✎
11:10
|
(28) Спасибо
|
|||
30
Ёпрст
16.11.18
✎
11:11
|
(24) только если скармливать будешь чорному запросу нормальные параметры в виде ссылок. Через оле это получится, если будешь передавать массив в текст запроса, элементом которого является список значений, в списке - элементы для фильтра
|
|||
31
Ёпрст
16.11.18
✎
11:12
|
сам массив должен быть глобальным
|
|||
32
azernot
16.11.18
✎
11:15
|
(0) Причина в том как этот запрос выполняется. По сути он таскает данные туда-сюда между 7.7 и 8.0
Если есть желание не использовать прямые запросы, ВК и т.п., а обойтись штатными средствами, рекомендую использовать что-то вроде такой конструкции: в 1С 7.7 в глобальном модуле //***************************************************************************** Функция ВыполнитьЗапросПоCOM(ТекстЗапроса, Флаг = 0, Итоги = 1) Экспорт Запрос = CreateObject("Запрос"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); Попытка Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда Если Запрос.Выгрузить(ТЗ, Флаг, Итоги) = 1 Тогда Возврат ТЗ; Иначе Возврат "Не удалось выгрузить результаты запроса!"; КонецЕсли; Иначе Возврат "Не удалось выполнить запрос!"; КонецЕсли; Исключение Возврат ОписаниеОшибки(); КонецПопытки; КонецФункции А в 1С 8 ТЗ_Запроса77 = v77_com.EvalExpr("ВыполнитьЗапросПоCOM("+""""+СтрЗаменить(ТекстЗапроса, Символы.ПС, "")+""""+", 0, 0)"); И разбирать ТЗ на стороне 1С 8 (с учётом того, что это OLE-объект) |
|||
33
plnz
16.11.18
✎
11:18
|
(32) такая идея тоже была...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |