Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Сохранение изображения и вывод в HTML-документ          
Keyword1109 Подменю пользователя
сообщение 27.09.12, 9:45
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

Добрый день!
Получаю с веб-сервиса изображение в виде двоичных данных, сохраняю в файл и вывожу в поле HTML документа. Вот, собственно, код:
НомерКартинки = 0;

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

Проблема в том, что изображение почему-то не записывается, да и ошибка записи не выскакивает. Двоичные данные передаются нормально. Вообще код отрабатывается без ошибок, но вот изображения NomImWS0.jpg в каталоге C:\Temp не наблюдается.
Подскажите, пожалуйста, в чем может быть проблема? 64000000.gif

Batchir Подменю пользователя
сообщение 27.09.12, 10:24
Сообщение #2

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

В отладчике на строке ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);
что показывает команда ТипЗнч(ПозицияНоменклатуры.coverImage)?

Расширение картинок одинаковое?
Как-то сталкивался с тем что сначала нужно было конвертить программно получаемую картинку с помощью сторонних средств перед тем как обрабатывать в 1С, по другому отказывалось работать.

Сообщение отредактировал Batchir - 27.09.12, 10:29

pablo Подменю пользователя
сообщение 27.09.12, 10:30
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

И еще, опять же в отладчике, но после строки
ИзображениеНоменклатуры = Новый Картинка(ПозицияНоменклатуры.coverImage);

Чему будет равен Картинка.Формат()?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Keyword1109 Подменю пользователя
сообщение 27.09.12, 10:34
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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


Цитата(pablo @ 27.09.12, 11:30) *
Чему будет равен Картинка.Формат()?



Batchir Подменю пользователя
сообщение 27.09.12, 10:39
Сообщение #5

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

А попробуйте теперь расширение с учетом регистра:
ПутьКФайлу = "C:\Temp\NomImWS"+НомерКартинки+".JPEG";


Сообщение отредактировал Batchir - 27.09.12, 10:45

Keyword1109 Подменю пользователя
сообщение 27.09.12, 10:48
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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

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



Ну если бы не сохранялось изображение, наверное, сработало бы исключение?! А так вообще ничего: ни ошибки, ни файла...

pablo Подменю пользователя
сообщение 27.09.12, 10:59
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

А если ?
ПутьКФайлу = "C:\Temp\NomImWS"+строка(НомерКартинки)+".jpg";


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Batchir Подменю пользователя
сообщение 27.09.12, 11:02
Сообщение #8

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

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


Сообщение отредактировал Batchir - 27.09.12, 11:03

Keyword1109 Подменю пользователя
сообщение 27.09.12, 11:03
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

Не в формате изображения ошибка. Я с помощью Картинка.Преобразовать(<ФорматКартинки>) и в png преобразовал и сохранял как png, но ничего не срабатывает.

Может есть какой-нибудь еще способ отобразить изображение из двоичных данных в поле html-документа?
<img src="data:image/png;base64,iVBOR...... Не предлагать.... smile.gif

Batchir Подменю пользователя
сообщение 27.09.12, 11:15
Сообщение #10

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

У меня к сожалению нет тех двоичных данных что у Вас, но провел следующий эксперимент:
НомерКартинки=0;
    ИзображениеНоменклатуры = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
    
    ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
    ИзображениеНоменклатуры.Записать(ПутьКФайлу);
    
    Файл = Новый Файл(ПутьКФайлу);
    Если Файл.Существует() Тогда
        Сообщить("ОК", СтатусСообщения.Обычное);
        ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
        НомерКартинки=1;
        ИзображениеНоменклатуры = Новый Картинка(ДвоичныеДанные);
        ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
        Попытка
            ИзображениеНоменклатуры.Записать(ПутьКФайлу);
            Сообщить(ПутьКФайлу, СтатусСообщения.Обычное);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Не ОК", СтатусСообщения.Обычное);
    КонецЕсли;


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

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

а конвертил с помощью компоненты GFLAx, ею же и приводил к стандартному размеру, т.к. картинки бывают разными

Сообщение отредактировал Batchir - 27.09.12, 11:20

Keyword1109 Подменю пользователя
сообщение 27.09.12, 11:17
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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

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

То картинка не отображается... sad.gif

Vofka Подменю пользователя
сообщение 27.09.12, 11:27
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13962
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

А так:
ТекстHTML.ДобавитьСтроку("<img src="""+ПутьКФайлу+""" width=""139"" />");

Batchir Подменю пользователя
сообщение 27.09.12, 11:28
Сообщение #13

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

bn.gif Прикрепленный файл  primer.rar ( 3,86 килобайт ) Кол-во скачиваний: 71

У меня работает

Спасибо сказали: Keyword1109,

Keyword1109 Подменю пользователя
сообщение 27.09.12, 11:48
Сообщение #14

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

Цитата(Batchir @ 27.09.12, 12:28) *
bn.gif Прикрепленный файл  primer.rar ( 3,86 килобайт ) Кол-во скачиваний: 71

У меня работает

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

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

Т.е., второй раз картинку сохранять не надо....

Vofka Подменю пользователя
сообщение 27.09.12, 11:50
Сообщение #15

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13962
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Keyword1109, я так понимаю задача решается не в управляемом интерфейсе?

Keyword1109 Подменю пользователя
сообщение 27.09.12, 11:55
Сообщение #16

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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

Интерфейс у меня смешанный. То есть, обычный интерфейс с вожножностью использовать управляемые формы. Я же данную задачу решаю в управляемой форме.

Vofka Подменю пользователя
сообщение 27.09.12, 11:58
Сообщение #17

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13962
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Цитата(Keyword1109 @ 27.09.12, 12:55) *
Я же данную задачу решаю в управляемой форме.

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

?

Keyword1109 Подменю пользователя
сообщение 27.09.12, 12:04
Сообщение #18

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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

?

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


.... ну как-то так smile.gif

Batchir Подменю пользователя
сообщение 27.09.12, 12:45
Сообщение #19

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Цитата(Keyword1109 @ 27.09.12, 12:48) *
Т.е., второй раз картинку сохранять не надо....

то я для примера формирования картинки из двоичных данных сделал для чистоты эксперимента.

Keyword1109 Подменю пользователя
сообщение 28.09.12, 10:23
Сообщение #20

Говорящий
***
Группа: Пользователи
Сообщений: 70
Спасибо сказали: 4 раз
Рейтинг: 0

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

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

 ! 

Правила п.6
 


Сообщение отредактировал pablo - 28.09.12, 13:28

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.06.24, 17:04
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!