Имя: Пароль:
1C
 
Как отобразить картинку на упр. форме из внешнего файла в 8.2?
0 simply
 
12.04.11
12:07
Добрый день!
Подскажите, пожалуйста, как отобразить картинку на управляемой форме (8.2) из внешнего файла без ХранилищаЗначений?
1 simply
 
12.04.11
12:15
Без ХранилищаЗначений - имеется в виду - без сохранения в базе, вообще.
2 Волесвет
 
12.04.11
12:18
тут типо нато тупо ткнуть носом откуда и что
3 detec
 
12.04.11
12:19
(0) Через навигационную ссылку.
4 detec
 
12.04.11
12:20
Точнее, через временное хранилище, и файл кратинки нужно по-любому передавать на сервер.
5 Варвар
 
12.04.11
12:22
Поле HTML документа как вариант.
6 simply
 
12.04.11
12:43
(5) и я так уже думал. Но отложил пока этот вариант.

(4) спасибо! сейчас опробую его. Заодно, проверю, насколько будет тормозить
7 Композитор
 
12.04.11
12:45
(6) тормозить будет. Вопрос насколько... :)
8 simply
 
12.04.11
12:49
(7) тогда зачем "козе баян"?! Не перестаю удивляться извращенности создателей 1С! Нет, чтобы просто сделать ее ООП-ной. Понамутили, аж тошнит.
Сорри, за эмоции :)
9 ДобрынинПавел
 
12.04.11
12:53
В модуле формы:&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ИмяКартинки = Строка(Объект.АртикулНаш)+".*";
   Путь=Константы.ПутьКартинок.Получить();
   //+Объект.АртикулНаш+ ".gif";
   НайденныеФайлы = НайтиФайлы(Путь, ИмяКартинки, Ложь);
   Если НайденныеФайлы.Количество()>0 тогда
       СсылкаНаКартинку=ПоместитьВоВременноеХранилище(Новый Картинка(НайденныеФайлы[0].ПолноеИмя, Истина), УникальныйИдентификатор);
   Иначе
       Элементы.Картинка.ТекстНевыбраннойКартинки="Картинка "+ИмяКартинки+" не найдена.";
   КонецЕсли;
   
   //МинОстатокПосчитанный=ПроцедурыОбменаССайтом.ПолучитьМинОстаток(Объект);
   //ПроцентНаценкиПосчитанный=ПроцедурыОбменаССайтом.ПолучитьПроцентНаценки(Объект);
   НашаЦена=ПроцедурыОбменаССайтом.ПолучитьЦенуСНаценкой(Объект);
   //Попытка
   //Исключение
   //    //Сообщить("Картинка "+ИмяКартинки+" не найдена.");
   //КонецПопытки;
   Элементы.Наценка.ТолькоПросмотр=Объект.НаценкаНаследуется;
   Элементы.МинОстаток.ТолькоПросмотр=Объект.МинОстатокНаследуется;

КонецПроцедуры
10 ДобрынинПавел
 
12.04.11
12:56
СсылкаНаКартинку является реквизитом формы типа строка, и является значением параметра ПутьКДанным самой картинки на форме.
11 acsent
 
12.04.11
12:58
Зачем так извращаться? Почему не использовать стандартный механизм?
Кстати там тоже можно храниить файлы на диске
12 ДобрынинПавел
 
12.04.11
12:59
Это как?
13 simply
 
12.04.11
13:00
(9) Спасибо!
(10) "... и является значением параметра ПутьКДанным самой картинки на форме" - что-то я не понял
14 simply
 
12.04.11
13:01
(11) что за "стандартный механизм"? Пока ничего кроме извращений не нашел.
15 ДобрынинПавел
 
12.04.11
13:02
На форме ставишь Поле картинки, у него есть реквизит ПутьКДданным, в нем выбираешь реквизит формы СсылкаНаКартинку
16 simply
 
12.04.11
13:02
чтобы была понятна задача:
В MySQL лежат картинки в двоичном виде.
В списке товаров вытаскиваю нужную картинку товара, сохраняю во временный файл и отображаю на форме.
В 7.7 с отображением проблем не было. А здесь ...
17 acsent
 
12.04.11
13:03
(14) Стандартный механизм хранения файлов
18 simply
 
12.04.11
13:03
а зачем мне их хранить в базе 1С? Она файловая и имеет ограничение на размер
19 simply
 
12.04.11
13:04
к тому же, годы хранения картинок в MySQL зарекомендовали себя великолепно.
20 acsent
 
12.04.11
13:05
(18) >>Кстати там тоже можно храниить файлы на диске
21 simply
 
12.04.11
13:06
(20) спасибо за попытку помочь!
Это вариант не подходит, т.к. не хочу на каждом компьютере дублировать огромную коллекцию картинок.
Достал нужную из MySQL. Не нужна - удалил. И т.д. Удобно и экономно.
22 simply
 
12.04.11
13:08
пойду замерять ВременноХранилище.
Если не понравится, займусь вариантами HTML и AxtiveX
23 acsent
 
12.04.11
13:09
(21) Не на каждом а на одном - на сервере например
24 ДобрынинПавел
 
12.04.11
13:09
Мой вариант работает (9)? Я забыл там лишнее удалить, но думаю и так понятно. У меня работало нормально.
25 Композитор
 
12.04.11
13:09
26 simply
 
12.04.11
13:15
(24) еще нет, но сразу же отпишусь

(25) спасибо!
27 simply
 
12.04.11
13:22
про ВременноХранилище, цитата:
"... перенести эту информацию из временного из временного хранилища в базу данных и получить ее обратно на компьютер пользовател"

Да что за напасть?! Ну не хочу я ничего в базу пихать! Ну и извращение эта 8.2!
28 Композитор
 
12.04.11
13:27
(27) так временно же :)
29 simply
 
12.04.11
13:32
даже это пугает ;)

В магазине пользователь за один сеанс может пересмотреть сотни товаров. Их все в базе, пусть и временно хранить?
30 simply
 
12.04.11
13:32
или пойти путем: добавил - удалил?
31 detec
 
12.04.11
13:58
(30) Моё ИМХО - хранить в БД. В этом случае, после того, как исправят баг 1С-овцы, можно будет использовать http://info_start.ru/public/81374/.
32 simply
 
12.04.11
14:12
ссылка битая
33 simply
 
12.04.11
14:13
(32) сорри, это я торможу
34 simply
 
12.04.11
17:05
Вот что получилось (по сути, как и было у меня в 7.7, только с понтами 8.2):
АдресКартинки - строковый реквизит формы для хранения ссылки во временном хранилище
ИмяФайлаКартинки - строковый реквизит формы для хранения полного пути к внешнему файлу картинки
ПараметрыСеанса.СКЛ - модуль объекта обработки, где эмулируется класс по работе с MySQL

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
   // На всякий случай очистим предыдущие данные картинки
   Попытка
       УдалитьИзВременногоХранилища(АдресКартинки);
   Исключение
   КонецПопытки;
   АдресКартинки="";
   Попытка
       УдалитьФайлы(ИмяФайлаКартинки);
   Исключение
   КонецПопытки;
   ИмяФайлаКартинки="";
   
   ИмяФайлаКартинки=ПолучитьКартинкуАртикула(СокрЛП(Элемент.ТекущаяСтрока));
   Попытка
       Результат=ПоместитьФайл(АдресКартинки,ИмяФайлаКартинки,,Ложь,Новый УникальныйИдентификатор);
       Если НЕ Результат Тогда
           а=1/0;
       КонецЕсли;
   Исключение
       АдресКартинки="";
       Элементы.Картинка.ТекстНевыбраннойКартинки="Картинка для артикула "+СокрЛП(Элемент.ТекущаяСтрока)+" не найдена";
   КонецПопытки;
   //Оповестить("НоваяКартинка");
КонецПроцедуры

&НаСервере
Функция ПолучитьКартинкуАртикула(Артикул)
   ИмяКартинки=Неопределено;
   Если ТекущийЭлемент.Имя="Список" Тогда
       оСКЛ=ПолучитьИзВременногоХранилища(ПараметрыСеанса.СКЛ);
       ИмяКартинки=оСКЛ.ПолучитьРисункиАртикула(Артикул);
       оСКЛ=Неопределено;
   КонецЕсли;
   Возврат ИмяКартинки;
КонецФункции // ПолучитьКартинкуАртикула
35 simply
 
12.04.11
17:08
Да, скорость работы - визуально приемлемая, как в моей 7.7
36 simply
 
12.04.11
17:08
Спасибо всем!!!
Ошибка? Это не ошибка, это системная функция.