Имя: Пароль:
1C
1С v8
Долго получает данные из другой базы (через COM подключение)
0 ac13
 
09.04.19
17:30
Подключась к базе и получаю из нее данные через запросы

...
База = Соединение.Connect(Параметры);

Запрос = База.NewObject("Запрос");
Запрос.Текст = "...";
Выборка = Запрос.Выполнить.Выбрать();

Выборка из таких запросов обрабатывается долго, хотя данных не так уж и много. Процесс можно как-то ускорить или это нормально, когда выборка из другой базы?
1 ptiz
 
09.04.19
17:33
(0) "Выборка из таких запросов обрабатывается долго" - смотря что в обрабатывающем коде понаписано.
2 ac13
 
09.04.19
17:35
(1) Выборка.Количество() = 500, элементарно
Пока Выборка.Следующий() Цикл
     Сообщить("123");
КонецЦикла;

будет долго ...
3 Nuobu
 
09.04.19
17:36
(2) А выгрузить()?
4 ac13
 
09.04.19
17:41
(3) Выгрузить не пробовал
5 Cyberhawk
 
09.04.19
17:41
Ну попробуй не выборку обходить, а ТЗ
6 Вафель
 
09.04.19
17:42
получать только примитивные типы из запроса: число, строка, дата
7 ac13
 
09.04.19
17:43
(5) сейчас попробую, (6) да да
8 Вафель
 
09.04.19
17:44
(7) тз не поможет, тк это будет ком тз, а не тз приемника
9 Cyberhawk
 
09.04.19
17:47
(8) Большая выборка-то в файлики будет сбрасываться, а ТЗ - не будет
10 Cyberhawk
 
09.04.19
17:49
На специалисте за такое насилование ОЗУ (выгрузка в ТЗ) конечно же балл снимут, но в жизни оно по-всякому бывает)
11 ac13
 
09.04.19
17:49
(8) ну да, че-то быстрее не стало, как бы не медленнее
12 Cyberhawk
 
09.04.19
17:50
Так ты замером код замерь, что занимает дольше времени - Следующий() или шаг цикла
13 ac13
 
09.04.19
17:52
(12) выборка результата запроса быстрее
14 Вафель
 
09.04.19
17:52
(9) Выборка - такое же насилование ОЗУ. в файлики только на 32 битах
15 Nuobu
 
09.04.19
17:53
(11) Попробуй еще сделать функцию, которая сделана полностью в базе, куда ты обращаешься, и пусть она ТЗ с примитивными типами оборачивает в "ЗначениеВСтрокуВнутр".
16 Провинциальный 1сник
 
09.04.19
17:54
Это да. Вообще конечно странно это. Я ранее предполагал, что выборка это открытый курсор на sql-сервере. Оказалось это заполненный буфер в памяти.
17 Вафель
 
09.04.19
17:55
никогда выборка в 1с не была открытым курсором
18 ac13
 
09.04.19
17:58
ладно, пусть пока будет так, на самом деле вся обработка длится секунд 30, потрепеть можно
19 Cyberhawk
 
09.04.19
17:59
(13) Ты отвечаешь на какой-то незаданный вопрос
20 Cyberhawk
 
09.04.19
18:06
(14) Спс
21 TormozIT
 
гуру
10.04.19
06:57
22 Жан Пердежон
 
10.04.19
07:00
(10) и давно на специалисте через COM заставляют данные гонять?
23 Провинциальный 1сник
 
10.04.19
07:16
(8) Финт ушами с ЗначениеВСтрокуВнутр туда-сюда - и готова ТЗ приемника
24 Cyberhawk
 
10.04.19
08:33
(22) Хз о чем ты. Походу ты что-то напутал.
25 ac13
 
10.04.19
08:47
(21) спасибо!
26 Кирпич
 
10.04.19
08:59
(23) Вот вот. А еще лучше ЗначениеВФайл(), а потом ЗначениеИзФайла()
27 Кирпич
 
10.04.19
09:00
чтобы памяти не ужирало, если выборка большая
28 ac13
 
10.04.19
10:37
(23) (26) это надо делать в базе источнике (откуда данные выгружаются) и потом из обработки в базе приемнике обращаться к модулю базы источника, к которой подключаюсь?
29 Провинциальный 1сник
 
10.04.19
10:41
(28) НашаТабЗнач=ЗначениеИзСтрокиВнутр(БАЗА.ЗначениеВСтрокуВнутр(ЧужаяТабЗнач))
30 Провинциальный 1сник
 
10.04.19
10:42
И вообще таким финтом лучше всё передавать, особенно числа - чтобы не получить потери точности.