Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранение изображения и вывод в HTML-документ
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Keyword1109
Добрый день!
Получаю с веб-сервиса изображение в виде двоичных данных, сохраняю в файл и вывожу в поле HTML документа. Вот, собственно, код:
НомерКартинки = 0;

Если ТипЗнч(ПозицияНоменклатуры.coverImage) <> Тип("Неопределено") Тогда
            
            
    ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);
            
    ПутьКФайлу = "C:\Temp\NomImWS"+НомерКартинки+".jpg";
            
    Попытка
        ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
                    
    ТекстHTML.ДобавитьСтроку("<img src='"+ПутьКФайлу+"' width='139' />");
            
КонецЕсли;

Проблема в том, что изображение почему-то не записывается, да и ошибка записи не выскакивает. Двоичные данные передаются нормально. Вообще код отрабатывается без ошибок, но вот изображения NomImWS0.jpg в каталоге C:\Temp не наблюдается.
Подскажите, пожалуйста, в чем может быть проблема? 64000000.gif
Batchir
В отладчике на строке ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);
что показывает команда ТипЗнч(ПозицияНоменклатуры.coverImage)?

Расширение картинок одинаковое?
Как-то сталкивался с тем что сначала нужно было конвертить программно получаемую картинку с помощью сторонних средств перед тем как обрабатывать в 1С, по другому отказывалось работать.
pablo
И еще, опять же в отладчике, но после строки
ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);

Чему будет равен Картинка.Формат()?
Keyword1109
Цитата(Batchir @ 27.09.12, 11:24) необходимо зарегистрироваться для просмотра ссылки
В отладчике на строке ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);
что показывает команда ТипЗнч(ПозицияНоменклатуры.coverImage)?


Цитата(pablo @ 27.09.12, 11:30) необходимо зарегистрироваться для просмотра ссылки
Чему будет равен Картинка.Формат()?


Batchir
А попробуйте теперь расширение с учетом регистра:
ПутьКФайлу = "C:\Temp\NomImWS"+НомерКартинки+".JPEG";
Keyword1109
Цитата(Batchir @ 27.09.12, 11:39) необходимо зарегистрироваться для просмотра ссылки
А попробуйте теперь расширение с учетом регистра:
ПутьКФайлу = "C:\Temp\NomImWS"+НомерКартинки+".JPEG";

Не помогает. sad.gif



Ну если бы не сохранялось изображение, наверное, сработало бы исключение?! А так вообще ничего: ни ошибки, ни файла...
pablo
А если ?
ПутьКФайлу = "C:\Temp\NomImWS"+строка(НомерКартинки)+".jpg";
Batchir
Попробуйте
ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
    ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    
    Файл = Новый Файл(ПутьКФайлу);
    Если Файл.Существует() Тогда
        Сообщить("ОК", СтатусСообщения.Обычное);
    Иначе
        Сообщить("Не ОК", СтатусСообщения.Обычное);
    КонецЕсли;
Keyword1109
Не в формате изображения ошибка. Я с помощью Картинка.Преобразовать(<ФорматКартинки>) и в png преобразовал и сохранял как png, но ничего не срабатывает.

Может есть какой-нибудь еще способ отобразить изображение из двоичных данных в поле html-документа?
<img src="data:image/png;base64,iVBOR...... Не предлагать.... smile.gif
Batchir
У меня к сожалению нет тех двоичных данных что у Вас, но провел следующий эксперимент:
НомерКартинки=0;
    ИзображениеНоменклатуры = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
    
    ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
    ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    
    Файл = Новый Файл(ПутьКФайлу);
    Если Файл.Существует() Тогда
        Сообщить("ОК", СтатусСообщения.Обычное);
        ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
        НомерКартинки=1;
        ИзображениеНоменклатуры = Новый Картинка(ДвоичныеДанные);
        ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
        Попытка
            ИзображениеНоменклатуры.Записать(ПутьКФайлу);
            Сообщить(ПутьКФайлу, СтатусСообщения.Обычное);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Не ОК", СтатусСообщения.Обычное);
    КонецЕсли;


т.е.
1. Сохранил на диск картинку из спр. номенклатуры
2. Преобразовал её в двоичные данные
3. Сохранил эти двоичные данные как картинку с другим именем

В результате в каталоге временных файлов находятся обе картинки.
Поэтому возможно актуально:
Цитата(Batchir @ 27.09.12, 11:24) необходимо зарегистрироваться для просмотра ссылки
Как-то сталкивался с тем что сначала нужно было конвертить программно получаемую картинку с помощью сторонних средств перед тем как обрабатывать в 1С, по другому отказывалось работать.

а конвертил с помощью компоненты GFLAx, ею же и приводил к стандартному размеру, т.к. картинки бывают разными
Keyword1109
Цитата(Batchir @ 27.09.12, 12:02) необходимо зарегистрироваться для просмотра ссылки
Попробуйте
ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
    ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    
    Файл = Новый Файл(ПутьКФайлу);
    Если Файл.Существует() Тогда
        Сообщить("ОК", СтатусСообщения.Обычное);
    Иначе
        Сообщить("Не ОК", СтатусСообщения.Обычное);
    КонецЕсли;

Выводит "Ок", но если после этого дописать
ТекстHTML.ДобавитьСтроку("<img src='"+ПутьКФайлу+"' width='139' />");

То картинка не отображается... sad.gif
Vofka
А так:
ТекстHTML.ДобавитьСтроку("<img src="""+ПутьКФайлу+""" width=""139"" />");
Batchir
bn.gif Нажмите для просмотра прикрепленного файла
У меня работает
Keyword1109
Цитата(Batchir @ 27.09.12, 12:28) необходимо зарегистрироваться для просмотра ссылки

И правда ваш пример работает! smile.gif
Спасибо большое! Буду сейчас разбираться...

Batchir
Ваш пример работает даже так:
    НомерКартинки=0;
    ИзображениеНоменклатуры = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
    
    ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
              ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    
    ТекстХТМЛ = "<img src='"+ПутьКФайлу+"' width='139' />";
    ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстХТМЛ);

Т.е., второй раз картинку сохранять не надо....
Vofka
Keyword1109, я так понимаю задача решается не в управляемом интерфейсе?
Keyword1109
Цитата(Vofka @ 27.09.12, 12:50) необходимо зарегистрироваться для просмотра ссылки
Keyword1109, я так понимаю задача решается не в управляемом интерфейсе?

Интерфейс у меня смешанный. То есть, обычный интерфейс с вожножностью использовать управляемые формы. Я же данную задачу решаю в управляемой форме.
Vofka
Цитата(Keyword1109 @ 27.09.12, 12:55) необходимо зарегистрироваться для просмотра ссылки
Я же данную задачу решаю в управляемой форме.

И такая строчка у вас работает:
ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстХТМЛ);

?
Keyword1109
Цитата(Vofka @ 27.09.12, 12:58) необходимо зарегистрироваться для просмотра ссылки
И такая строчка у вас работает:
ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстХТМЛ);

?

Это строчка кода из примера Batchir, тот пример реализован в обычной форме.
В моем коде это выглядит так
            
РезультирующийHTML = ТекстHTML.ПолучитьТекст();


.... ну как-то так smile.gif
Batchir
Цитата(Keyword1109 @ 27.09.12, 12:48) необходимо зарегистрироваться для просмотра ссылки
Т.е., второй раз картинку сохранять не надо....

то я для примера формирования картинки из двоичных данных сделал для чистоты эксперимента.
Keyword1109
Снова возвращаюсь к данному вопросу... sad.gif
Мой код с первого поста рабочий для локальной версии.... Подскажите, подалуйста, как быть если используется серверная версия?
Т.е., КаталогВременныхФайлов() 1С-ка нормально понимает, а вот Поле HTML документа не очень... Если прописать
ТекстHTML.ДобавитьСтроку("<img src='"+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат())+"' width='139' />");

... то Поле HTML документа будет искать данный файл на локальном компьютере....
Можно как-то перенаправить его на сервер?

 ! 

Правила п.6
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.