Имя: Пароль:
1C
1С v8
Клиент-сервер. Медленная работа выбора.
0 espanol
 
16.07.12
13:20
&НаКлиенте
Перем ОбработаннаяСтрока;

&НаКлиенте
Процедура ОстаткиПриАктивизацииСтроки(Элемент)
   
   Если ОбработаннаяСтрока <> Элемент.ТекущаяСтрока Тогда
       ПолучитьКартинку(Элемент.ТекущаяСтрока, Элемент.ТекущиеДанные.Номенклатура);
   КонецЕсли;
   
КонецПроцедуры

&НаСервере
Функция ПолучитьКартинку(ТекущийСчет, СсылкаНаНоменклатуру)
   
   ОбработаннаяСтрока = ТекущийСчет;
   НаборКартинок      = РегистрыСведений.КартинкиИФайлы.СоздатьНаборЗаписей();
   НаборКартинок.Отбор.Объект.Установить(СсылкаНаНоменклатуру);
   НаборКартинок.Прочитать();
   Если НЕ (НаборКартинок.Количество() = 0) Тогда
       Для Инд = 0 По НаборКартинок.Количество() - 1 Цикл
           мКартинка = НаборКартинок[0].Данные.Получить();
           Картинка  = ПоместитьВоВременноеХранилище(мКартинка.ПолучитьДвоичныеДанные());
       КонецЦикла;
   КонецЕсли;
   
КонецФункции

ОбработаннаяСтрока = Неопределено;


Очень медленно работает, секунд 10 отрабатывается, может кто знает как ускорить?
1 Fragster
 
гуру
16.07.12
13:22
а индекс по измерению Объект есть?
2 Kreont
 
16.07.12
13:22
Сжать картинки, может там сканы 10мб?
3 Fragster
 
гуру
16.07.12
13:22
да и зачем там цикл если все равно по индексу получаешь только первую запись?
4 Fragster
 
гуру
16.07.12
13:23
а еще можно кэш картинок добавить, но там можно поиметь косяк с утечками памяти при неправильном подходе
5 espanol
 
16.07.12
13:24
(1) нет
(2) нет, там мало у кого есть картинки вообще...
(3) это не без разницы, веть не оно утормаживает процесс
6 GROOVY
 
16.07.12
13:24
А нафига в ВХ картинки пихать? Не проще ли навигационную ссылку возвращать?
7 espanol
 
16.07.12
13:24
(4) расскажи подробнее пожалуйста
8 espanol
 
16.07.12
13:26
(6) типа при помощи него будет быстрее?
9 hhhh
 
16.07.12
13:29
(5) вообще-то если напрмер 1000 картинок в наборе, то утормаживает ровно в 1000 раз.
10 GROOVY
 
16.07.12
13:30
(8) Ну как бы на порядок или на пару порядков быстрее.
11 espanol
 
16.07.12
13:32
(9) там может быть только 1, да хоть так сделать, скорость не меняется:


   ОбработаннаяСтрока = ТекущийСчет;
   НаборКартинок      = РегистрыСведений.КартинкиИФайлы.СоздатьНаборЗаписей();
   НаборКартинок.Отбор.Объект.Установить(СсылкаНаНоменклатуру);
   НаборКартинок.Прочитать();
   Если НЕ (НаборКартинок.Количество() = 0) Тогда
       мКартинка = НаборКартинок[0].Данные.Получить();
       Картинка  = ПоместитьВоВременноеХранилище(мКартинка.ПолучитьДвоичныеДанные());
   КонецЕсли;
12 Fragster
 
гуру
16.07.12
13:36
(5).1 дык это, надо бы
13 Ksandr
 
16.07.12
13:37
быстрее будет, если картинки хранить в справочнике, а не в РС, в РС только ссылки :)

Не помню откуда, но делать нужно чуть иначе - при активизации подключить обработчик ожидания на пол секунды - секунду с однократным выполнением и оттуда вызывать процедуру.
14 espanol
 
16.07.12
13:38
(10) Картинка  = ПолучитьНавигационнуюСсылку(мКартинка.ПолучитьДвоичныеДанные());

скорость не поменялась...
15 Fragster
 
гуру
16.07.12
13:38
(13)о_О
16 espanol
 
16.07.12
13:39
тока строка там не та, для интереса так забил
17 espanol
 
16.07.12
13:40
(12) попробую
(13) ясно, спасибо!
18 Bober
 
16.07.12
13:42
(16) ПолучитьНавигационнуюСсылку(Тут набор записей, тут описание ресурса, тут номер строки)
19 Ksandr
 
16.07.12
13:42
(15) Это к началу сообщения относится или к окончанию?
20 Bober
 
16.07.12
13:43
(17) + выполнять этот как сказал (13) "...при активизации подключить обработчик ожидания "
21 Fragster
 
гуру
16.07.12
13:47
(19) к началу. окончание понятно - "не тормозить у любителей потыкать по списку быстробыстро"
22 GROOVY
 
16.07.12
14:15
(14) Естественно! Не надо читать данные из ХЗ. Надо на них тупо сослаться. Читай что тебе в (16) говорят.
23 H A D G E H O G s
 
16.07.12
14:17
ППЦ
24 H A D G E H O G s
 
16.07.12
14:17
Вы чего, народ?
25 H A D G E H O G s
 
16.07.12
14:18
НаборКартинок.Прочитать();

Вот тут ваши не все дома.
26 H A D G E H O G s
 
16.07.12
14:18
Запрос.Текст="
Выбрать Первые 1
КартинкиИФайлы.Данные
....
и.т.д.
27 H A D G E H O G s
 
16.07.12
14:20
(22) Без разницы, имхо. Тут не будет 10 секунд, даже при мегабайтах.
28 ChAlex
 
16.07.12
14:21
Вообще-то стоило бы подключить обработчик ожидания на событие при активации строки. Подозреваю ко всему прочему у вас по нескольку раз выполняется выборка картинки
29 espanol
 
16.07.12
14:49
(25) почему? по времени фактически одинаково выходит что и запросом