Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Прайс-лист с картинками(зависает)

Прайс-лист с картинками(зависает)
Я
   onetone
 
11.10.17 - 16:39
Прошу помощи.
Есть прайс-лист с картинками на СКД.
код вывода картинок:
ПриКомпоновкеРезультата

// Заполняем рисунки для полей, в данных расшифровки которых находятся элементы справочника 

    // "НоменклатураПрисоединенныеФайлы"

    КоличествоКолонокТаблицы = ДокументРезультат.ШиринаТаблицы;// Количество колонок в отчете

    КоличествоСтрокТаблицы = ДокументРезультат.ВысотаТаблицы;     // Количество строк в отчете

    // Обходим все ячейки отчета         

    
    Если СхемаКомпоновкиДанных.ВариантыНастроек.ПрайсЛист.Настройки <> Настройки Тогда
        
        Для Ст = 7 По КоличествоСтрокТаблицы Цикл              
            
            ТекОбласть = ДокументРезультат.Область(Ст, 9);  
            
            Если ТекОбласть.Расшифровка <> Неопределено Тогда
                ПоляРасшифровки = ДанныеРасшифровки.Элементы[ТекОбласть.Расшифровка].ПолучитьПоля();
                Если ПоляРасшифровки.Количество() > 0 И ПоляРасшифровки[0].Поле = "ФайлСсылка" Тогда
                    // Если тип значения поля расшифровки соответствует справочнику прикрепленных файлов, то

                    // выводим связанную картинку

                    Рисунок = ПолучитьИзображение(ПоляРасшифровки.Получить(0).Значение);
                    Если Рисунок <> Неопределено Тогда
                        Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                        Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
                        Рис.Картинка = Рисунок;
                        //Рис.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);

                        Рис.Расположить(ТекОбласть);                        
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;              
        КонецЦикла;
        
    КонецЕсли;

Функция ПолучитьИзображение(Номенклатура)
    
    КартинкаПоумолчанию = Неопределено;
    
    Если ТипЗнч(Номенклатура) =
            Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") Тогда                
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПрисоединенныеФайлы.ХранимыйФайл
        |ИЗ
        |    РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы
        |ГДЕ
        |    ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл";         
        Запрос.УстановитьПараметр("ПрисоединенныйФайл", Номенклатура);         
        Результат = Запрос.Выполнить();
        Если НЕ Результат.Пустой() Тогда
            Выборка = Результат.Выбрать();
            Выборка.Следующий();// Получаем двоичные данные катинки

            Возврат Новый Картинка(Выборка.ХранимыйФайл.Получить(), Истина);
        Иначе// Если данные отсутствуют, получаем стандартное изображение из 

              // дополнительного макета внешнего отчета

            Возврат Неопределено
        КонецЕсли;
    КонецЕсли;
    
    Возврат КартинкаПоумолчанию;
    
КонецФункции

Проблема в следующем, с недавних пор прайс стал просто зависать(возможно это связанно с увеличением картинок) пробовал подождать 3-4 часа, все равно что то формировал.

Замер производительности показывает, что все отрабатывает быстро. Весь код отрабатывается в районе 10с. то есть дальше код не выполняется, идет обработка на уровне платформы, насколько я понял.
 
 
   Fragster
 
1 - 11.10.17 - 16:49
ну а закомментировать-то вывод картинки пробовал?
   onetone
 
2 - 11.10.17 - 16:50
(1) Если честно, то нет. Что то не приходило в голову. Сейчас буду пробовать.
   lodger
 
3 - 11.10.17 - 16:51
зачем вам 20мпих картинки в прайслисте? суйте миниатюры и ссылку на фулсайз.
   onetone
 
4 - 11.10.17 - 17:03
(3) Привью то откуда брать? А ссылка там и так выводится на картинки в я.диск.
   onetone
 
5 - 11.10.17 - 17:07
(3 Отдельно создать для товаров привью и его пихать в прайс?
   onetone
 
6 - 11.10.17 - 20:28
(1) Без картинок все работает как надо.
   kittystark
 
7 - 11.10.17 - 20:56
у тебя получается запрос на каждую картинку отдельно, по сути в цикле для каждой строки

лучше выбрать одним запросом сразу - связав левым соединением по номенклатуре и в наборе данных чтоб сидело ХранимыйФайл,  а в цикле от него уже делать ХранимыйФайл.Получить()
   onetone
 
8 - 11.10.17 - 21:22
(7) Спасибо за подсказку, согласен, так быстрее будет.

Но по оптимизации там тоже беда, самая трудозатратная строчка кода:
Рис.Картинка = Рисунок;

85% времени уходить на нее из всего модуля.

3% уходить на как раз выполнение запроса.
   onetone
 
9 - 12.10.17 - 23:41
В общем проблема была похоже в объема этих картинок, сделал привьюшки, по 200х100 и прайс стал формироваться очень быстро

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует