Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Исчезает изображение в тонком клиенте
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
irbis_triffle
Всем добрый день!
Столкнулся с проблемой, которую сам не могу победить(( :
Имеется два справочника: номенклатура и ХранилищеДополнительнойИнформации, в номенклатуре есть реквизит ОсновноеИзображение с типом СправочникСсылка.ХранилищеДополнительнойИнформации, в ХранилищеДополнительнойИнформации есть реквизит Файл и типом ХранилищеЗначения.
С помощью книги "Разработка управляемого интерфейса" организована загрузка и сохранение в базе картинки (в справочнике ХранилищеДополнительнойИнформации) и указание ссылки на этот объект в справочнике номенклатура.
Проблема в следующем: при открытии в тонком клиенте элемента справочника Номенклатура или справочника ХранилищеДополнительнойИнформации изображение отображается:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если НЕ Объект.Ссылка.Пустая() Тогда
        Если Объект.ОсновноеИзображение <> "" И НЕ Объект.ОсновноеИзображение = Справочники.ХранилищеДополнительнойИнформации.ПустаяСсылка() Тогда
            СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.ОсновноеИзображение.Ссылка, "Файл");
            ИмяФайлаКартинки = Объект.ОсновноеИзображение.ИмяФайла;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры



&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если НЕ Объект.Ссылка.Пустая() Тогда
            
        СсылкаНаФайл = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Файл");
        
    КонецЕсли;
    
КонецПроцедуры



А при повторном открытии изображения пропадают, причем в отладке реквизит СсылкаНаФайл заполнен и отображается именно пустое изображение и не отсутствующее - ТекстНевыбраннойКартинки не отображается:



В web-клиенте все работает нормально.

Подскажите где я ошибся?

Заранее благодарен.

PS 1С:Предприятие 8.2 (8.2.15.301), конфигурация самописная.
irbis_triffle
UPDATE:
когда картинка не отображается - её все-же можно сохранить на диск и получится нормальный файл, но на форме она не отображается(
Small sa
Может помочь:

необходимо зарегистрироваться для просмотра ссылки

необходимо зарегистрироваться для просмотра ссылки
irbis_triffle
UPDATE2:
Ошибка отображения наблюдается только у картинок большого размера ( > 800 кб)
irbis_triffle
UPDATE3:
Если загружать картинку с цветовой моделью "CMYK" ("JPEG CMYK (v1.2)", 2.5 Мб) то в тонком клиенте не возникает проблем с отображением.
Если загружать картинку с цветовой моделью "RGB" (JPEG TrueColor (v1.1)) то в тонком клиенте изображение отображается только при первом обращении, при повторном обращении изображение пустое.

Можно было бы загружать все картинки в CMYK, но тогда возникают проблемы с использованием web-клиента через IE (которые требует именно RGB).

Чувствую, что хожу по полю с граблями, но все никак их не увижу...

Загрузил учебную базу "Файлы и картинки" из дополнения к книге "Разработка управляемого интерфейса" - при загрузке картинки JPEG RGB свыше 800кб - она даже не отображается в форме элемента, при загрузке картинки CMYK проблем не возникает.

Получается, что это не ошибка в моей конфигурации?

У кого есть типовая конфа - пожалуйста попробуйте загрузить RGB изображение (например основное изображение номенклатуры) с размером больше 800 кб. Может эту проблему можно обойти?
Batchir
Если Вас утешит, то с большими картинками и в толстом клиенте я наблюдал эффекты, да и хранить большие картинки не очень хорошо (точнее какой вообще смысл?).
Вот что я использовал для того что бы программно урезать картинку до нормальных размеров и что бы грузилась как надо:
1. Подключил внешнюю компоненту GFLAx
2. При добавлении картинки обращался к этой компоненте и форматировал картинку, пример кода (использовал в УТ):
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Заголовок = "Выберите файл с изображением";
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.ПредварительныйПросмотр = Истина;
ДиалогОткрытияФайла.Фильтр = ПолучитьФильтрИзображений(); // функция описана отдельно
Если ДиалогОткрытияФайла.Выбрать() Тогда
    //ВыбранноеИзображение = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла, Ложь);
    Попытка
        Картинки= Новый COMОбъект("GFLAx.GFLAx");
        Картинки.LoadBitmap(ДиалогОткрытияФайла.ПолноеИмяФайла);
        ШиринаКартинки=Картинки.Width;
        ВысотаКартинки=Картинки.Height;
        НовВысота = 600;
        ОтклонениеРазмера =  ВысотаКартинки/НовВысота;
        НовШирина =  ШиринаКартинки/ОтклонениеРазмера;
        Картинки.Resize(НовШирина,НовВысота);
        Картинки.SaveFormat=1;
        Картинки.SaveBitmap(ДиалогОткрытияФайла.ПолноеИмяФайла);
        ПолныйПуть = ДиалогОткрытияФайла.ПолноеИмяФайла;
        ПутьБезРасшерения = "";
        ПозицияТочки = Найти(ДиалогОткрытияФайла.ПолноеИмяФайла ,".");
        Пока ПозицияТочки <> 0 Цикл
            ПутьБезРасшерения = ПутьБезРасшерения + Лев(ПолныйПуть,ПозицияТочки);
            ПолныйПуть = Сред(ПолныйПуть,ПозицияТочки+1,СтрДлина(ПолныйПуть)- ПозицияТочки);
            ПозицияТочки = Найти(ПолныйПуть ,".");
        КонецЦикла;
        ПолныйПуть = ПутьБезРасшерения + "JPG";
        ВыбранноеИзображение = Новый Картинка(ПолныйПуть,Ложь);
        
    Исключение
        Сообщить("Не подключена компонента для сжатия изображений GFLAx",СтатусСообщения.Важное);
        ПолныйПуть = ДиалогОткрытияФайла.ПолноеИмяФайла;
        ВыбранноеИзображение = Новый Картинка(ПолныйПуть,Ложь);
    КонецПопытки;
Иначе
    Возврат;
КонецЕсли;
НовыйОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
НовыйОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
НовыйОбъект.Хранилище = Новый ХранилищеЗначения(ВыбранноеИзображение, Новый СжатиеДанных);
НовыйОбъект.Объект = ОбъектВладелец;
НовыйОбъект.ИмяФайла = ПолучитьИмяФайлаИзПолногоПути(ПолныйПуть);

в результате я все загружаемые картинки привожу к размеру 600 пикселей по высоте, а ширину автоматом рассчитываю, что бы сохранить пропорцию.
irbis_triffle
Вариант изменения параметров картинки внешними средствами я так же рассматриваю, но сейчас просто хочу понять суть данного ограничения, т.к. в документации никаких ограничений я не нашел (плохо искал?).
Спасибо за предложенный вариант, обязательно посмотрю, т.к. я собирался решать вопрос через программы редактирования изображения из командной строки, а это намного веселее)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.