Имя: Пароль:
1C
1С v8
Картинка на форме в веб-клиенте
0 fdv_83
 
17.12.14
15:39
Здравствуйте, форумчане.
У меня такая проблема. Я в управляемом приложении в форме элемента справочника по нажатию кнопки выбираю картинку. В толстом и тонком клиенте эта картинка сразу же отображается на форме. А вот в веб-клиенте не отображается. Она появляется на форме, если закрыть программу и снова открыть. Подскажите, пожалуйста, как сделать, чтобы картинка в веб-клиенте сразу появлялась на форме.
1 fdv_83
 
17.12.14
17:50
Люди, откликнитесь
2 fdv_83
 
17.12.14
18:14
Up
3 fdv_83
 
17.12.14
22:50
Up
4 fdv_83
 
18.12.14
10:17
Up
5 vde69
 
18.12.14
10:19
показывай код
6 fdv_83
 
18.12.14
10:27
&НаКлиенте
Процедура ВыбратьКартинку(Команда)
    Перем ВыбранноеИмя;
    Если ЗначениеЗаполнено(Объект.ФайлКартинки) Тогда
        Если Вопрос("Удалить картинку?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
            АдресКартинки = "";
            ПоместитьФайлКартинки(АдресКартинки);
            АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
            Возврат;
        КонецЕсли;
    КонецЕсли;
    #Если ВебКлиент Тогда
        АдресКартинки = "";
        Если ПоместитьФайл(АдресКартинки, "", ВыбранноеИмя, Истина) Тогда
            Объект.ФайлКартинки = ВыбранноеИмя;
            ПоместитьФайлКартинки(АдресКартинки);
        КонецЕсли;
        АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
    #Иначе
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Заголовок = "Выберите файл картинки...";
        Диалог.ПредварительныйПросмотр = Истина;
        Диалог.МножественныйВыбор = Ложь;
        Диалог.Фильтр = "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|"
        + "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
        + "Формат jpeg (*.jpg;*.jpeg)|*.jpg;*.jpeg|"
        + "Формат tiff (*.tif)|*.tif|"
        + "Формат gif (*.gif)|*.gif|"
        + "Формат png (*.png)|*.png|"
        + "Формат icon (*.ico)|*.ico|"
        + "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|";
        Если Диалог.Выбрать() Тогда
            АдресКартинки = "";
            Если ПоместитьФайл(АдресКартинки, Диалог.ПолноеИмяФайла, "", Ложь) Тогда
                Объект.ФайлКартинки = Диалог.ПолноеИмяФайла;
                ПоместитьФайлКартинки(АдресКартинки);
            КонецЕсли;
            АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
КонецПроцедуры
7 fdv_83
 
18.12.14
10:31
ДанныеФайлаКартинки - реквизит объекта типа ХранилищеЗначений
ФайлКартинки - реквизит объекта типа Строка неограниченной длины
АдресКартинки - реквизит типа Строка неограниченной длины

Имеется реквизит формы Картинка, имеет вид Поле картинки, путь к данным АдресКартинки
8 vde69
 
18.12.14
10:35
АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");


ты передаешь ссылку, в сылке картинки нет, картинка есть в не записаном обьекте....
9 fdv_83
 
18.12.14
10:40
(8) Я объект записываю в момент выбора картинки. Этот код работает в толстом и тонком клиентах, но не отображает картинку на форме в веб-клиенте. Вот не могу понять. в чём причина этого
10 vde69
 
18.12.14
10:42
контекст на сервере обновил? а то может он и не знает о том, что записано....

вообще перечитай обьект...
11 vde69
 
18.12.14
10:51
в УФ контекст существует одновременно на сервере и клиенте, при изменении контекста на сервере клиент может не знать об этом.

Для веб клиента вообще передача с сервера на клиент может происходить только "по запросу", по этому нужно или на клиенте что-то постоянно проверять или генерить системное событие...

Самое простое - перечитать обьект, при этом в явном виде форма получит последнюю версию контекста и обновит свои элементы.
12 fdv_83
 
18.12.14
11:05
(11) А каким методом нужно перечитать объект?
13 fdv_83
 
18.12.14
11:26
(11) Используя метод ЭтаФорма.ОбновитьОтображениеДанных(), картинка появляется после закрытия, открытия формы
14 vde69
 
18.12.14
11:29
Расширение управляемой формы для объектов (Managed form extension for objects)
Прочитать (Read)
Синтаксис:

Прочитать()
Описание:

Обновляет объект управляемой формы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
15 fdv_83
 
18.12.14
12:03
(14) Всё так же картинка сразу не отображается
16 fdv_83
 
18.12.14
13:16
Есть возможность отображение картинки на форме в веб-клиенте?
17 SergeyKB
 
18.12.14
13:36
(11)
>в УФ контекст существует одновременно на сервере и клиенте, при изменении контекста на сервере клиент может не знать об этом.

А какой смысл существования контекста на сервере ?
Если с клиента при контекстном вызове он туда передаётся

Понимаю, что он может создаваться при создании формы и чтении объекта, но разве он не удаляется (освобождая память) при передачи управления на клиента (При открытии формы)
18 vde69
 
18.12.14
13:41
(17) я вообще не понимаю зачем нужен клиентский исполняемый код кроме как при работе с внешними интерфейсами (например ККМ)
19 SergeyKB
 
18.12.14
13:43
(18)
ну а как же работа с файлами (чтение. запись) COM подключения и прочая шелуха ?
20 SergeyKB
 
18.12.14
13:44
(19) тащить всё на сервак не айс мне кажется
21 fdv_83
 
18.12.14
14:05
А по существу вопроса что можете сказать?
22 fdv_83
 
18.12.14
22:31
Up
23 Garykom
 
гуру
18.12.14
22:48
(21) грузи/тащи картинку на сервер при выборе
24 fdv_83
 
19.12.14
07:59
(23) Так код загрузки и так на сервере выполняется
25 DrZombi
 
гуру
19.12.14
08:19
(6) Где ты заполняешь "ВыбранноеИмя" ?
26 DrZombi
 
гуру
19.12.14
08:19
Для Веб клиента?
27 DrZombi
 
гуру
19.12.14
08:19
Ты пользовался отладчиком?
28 DrZombi
 
гуру
19.12.14
08:22
(6) >>>  АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");

А это зачем?
Что такое "АдресКартинки"?
Надеюсь, что это реквизит формы типа Строка, и выведен на форму в качестве Картинки?
29 DrZombi
 
гуру
19.12.14
08:23
+ Дай код посмотреть с формой :)
На Яндекс или Майл Диске можешь выложить Обработку, ли CF
30 fdv_83
 
19.12.14
08:50
(25) (26) Выбор файла происходит на клиенте, а АдресКартинки - реквизит типа Строка неограниченной длины

Имеется реквизит формы Картинка, имеет вид Поле картинки, путь к данным АдресКартинки
31 fdv_83
 
19.12.14
08:55
(28) Код этот рабочий, только в вебе не отображается сразу картинка
32 banco
 
19.12.14
09:10
(31) у меня все отображается, значит у тебя что то не так, покажи код, чтоб могли подсказать
33 fdv_83
 
19.12.14
09:18
&НаКлиенте
Процедура ВыбратьКартинку(Команда)
    Перем ВыбранноеИмя;
    Если ЗначениеЗаполнено(Объект.ФайлКартинки) Тогда
        Если Вопрос("Удалить картинку?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
            АдресКартинки = "";
            ПоместитьФайлКартинки(АдресКартинки);
            АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
            Прочитать();
            Возврат;
        КонецЕсли;
    КонецЕсли;
    #Если ВебКлиент Тогда
        АдресКартинки = "";
        Если ПоместитьФайл(АдресКартинки, "", ВыбранноеИмя, Истина) Тогда
            Объект.ФайлКартинки = ВыбранноеИмя;
            ПоместитьФайлКартинки(АдресКартинки);
        КонецЕсли;
        АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
    #Иначе
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Заголовок = "Выберите файл картинки...";
        Диалог.ПредварительныйПросмотр = Истина;
        Диалог.МножественныйВыбор = Ложь;
        Диалог.Фильтр = "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|"
        + "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
        + "Формат jpeg (*.jpg;*.jpeg)|*.jpg;*.jpeg|"
        + "Формат tiff (*.tif)|*.tif|"
        + "Формат gif (*.gif)|*.gif|"
        + "Формат png (*.png)|*.png|"
        + "Формат icon (*.ico)|*.ico|"
        + "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|";
        Если Диалог.Выбрать() Тогда
            АдресКартинки = "";
            Если ПоместитьФайл(АдресКартинки, Диалог.ПолноеИмяФайла, "", Ложь) Тогда
                Объект.ФайлКартинки = Диалог.ПолноеИмяФайла;
                ПоместитьФайлКартинки(АдресКартинки);
            КонецЕсли;
            АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайлаКартинки");
        КонецЕсли;
    #КонецЕсли
    Прочитать();
КонецПроцедуры


&НаСервере
Процедура ПоместитьФайлКартинки(АдресВременногоХранилища)
    ЭлементСправочника = РеквизитФормыВЗначение("Объект");
    Если АдресВременногоХранилища = "" Тогда
        ЭлементСправочника.ДанныеФайлаКартинки = Новый ХранилищеЗначения("");
        ЭлементСправочника.ФайлКартинки = "";
    Иначе
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
        ЭлементСправочника.ДанныеФайлаКартинки = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9));
    КонецЕсли;
    ЭлементСправочника.Записать();
    Если Не АдресВременногоХранилища = "" Тогда
        УдалитьИзВременногоХранилища(АдресВременногоХранилища);
    КонецЕсли;
    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
КонецПроцедуры
34 fdv_83
 
19.12.14
09:23
(32) Можешь показать свой код?
35 DrZombi
 
гуру
19.12.14
10:07
(33) Покажи код в Обработке. Нам как тоне видно, как ты на форме все разместил :)
36 fdv_83
 
19.12.14
13:58
(35) Я же выложил код и описал, что да как сделал
37 banco
 
19.12.14
14:08
(34) я использую подсистему ПрисоединенныеФайлы из БСП и не изобретаю велосипед. а у тебя очень плохой код, там не то что исправить, а все заново написать. хотя бы посмотри как в демо базе, которая с платформой идет, сделано
38 fdv_83
 
19.12.14
15:42
(37) Код рабочий, просто требует маленькой доработки
39 fdv_83
 
19.12.14
17:12
Up
40 fdv_83
 
20.12.14
08:19
Up
41 Ненавижу 1С
 
гуру
20.12.14
08:32
какой браузер? попробуй на различных
42 banco
 
20.12.14
10:58
(40)  ну ты упертый, не хочешь писать нормальный код.
добавь строчку
Элементы.Картинка.Обновить();
43 fdv_83
 
20.12.14
17:35
(42) Спасибо тебе, помог. А то на код мой грешил. Я же говорил маленькая доработка нужна.
AdBlock убивает бесплатный контент. 1Сергей