Имя: Пароль:
1C
 
v8: 8.2. Запись данных в реквизит табличной части с типом ХранилищеЗначения
0 Композитор
 
30.09.10
21:43
&НаКлиенте
Процедура ПоКнопкеДобавитьФото(Команда)
   Перем ВыбранноеИмя,АдресВременногоХранилища;
   Если ПоместитьФайл(АдресВременногоХранилища, "", ВыбранноеИмя, Истина, УникальныйИдентификатор) Тогда
       АдресКартинки = АдресВременногоХранилища;
       ТекСтрока = ТекущийЭлемент.ТекущаяСтрока;
       Если ТекСтрока <> Неопределено Тогда
           ТекущийЭлемент.ТекущиеДанные.АдресКартинки = АдресКартинки;
       КонецЕсли;    
       Модифицированность = Истина;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриАктивизацииСтроки(Элемент)
   АдресКартинки = Элемент.ТекущиеДанные.АдресКартинки;
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   i = 0;
   Для Каждого Строка Из Объект.ТЧ_Фото Цикл
       Строка.АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ТЧ_Фото.Фото", i);
       i = i+1;
   КонецЦикла;    
КонецПроцедуры
_____________________________________________________________________

Есть справочник, у справочника табличная часть ТЧ_Фото, в табличной части реквизиты АдресКартинки (строка) и Фото (ХранилищеЗначений).
Нужно выбирать файл изображения, записывать его в строку табличной части, при перемещении курсора отображать соответствующее изображение в поле формы Картинка через реквизит формы АдресКартинки.

Фал выбирается, изображения меняются, но после записи элемента справочника и повторного открытия формы изображение не появляется. Не могу сообразить: то ли некорректно записываю, то ли неправильно считываю данные из хранилища значения.
1 Композитор
 
01.10.10
09:43
ап
2 Композитор
 
01.10.10
10:12
что, спецы в отпуске?
3 Композитор
 
04.10.10
17:42
Вышел из положения следующим образом:

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

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

В реквизите ПутьКДанным поля Картинка дал ссылку на реквизит табличной части АдресКартинки.

Все работает как надо. Но слегка медленно, что раздражает. Перемещение маркера по элементам табличного поля идет с минимальной, но все же задержкой. Впрочем, то же самое было и в примере из (0).

Вопрос к знатокам - как в 8.2 показать изображение на форме непосредственно из файла, минуя временное хранилище? В 8.1 с этим проблем не было, а здесь есть.
4 Композитор
 
05.10.10
15:49
(3) дали мне ссылку на руководство разработчика:

7.5.1.4. Картинки элементов

Элементы формы позволяют использовать для своего оформления картинки. Задание картинки возможно двумя способами:

? из конфигуратора,

? программным способом.

В случае если картинка задается программным способом, может быть установлена либо пустая картинка, либо картинка из библиотеки картинок конфигурации.

Если картинка задается из конфигуратора, то возможен еще один вариант — задание картинки из файла на диске (внешняя картинка). Использование таких картинок рекомендуется только в тех случаях, когда разрабатываются внешние отчеты или обработки, которые могут использоваться в различных конфигурациях и картинка является значимым элементом оформления, в остальных случаях использование таких картинок является нежелательным. Для команд формы и глобальных команд выбрать внешнюю картинку невозможно.
_____________________________________________________________________

Таким образом, я вижу проблему в 8.2, которой не было в 8.1 и 7.7, а именно: невозможность (по моему, пока небольшому опыту) комфортного (быстрого) пролистывания массива изображений, если размер изображения достаточно велик. Пока выхожу из ситуации таким образом: при записи пути к файлу в реквизит табличной части предварительно преобразовываю файл в другой формат.

Процедура ПоКнопкеДобавитьФото(Команда)
   ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   ДиалогОткрытияФайла.ПолноеИмяФайла = "";
   ДиалогОткрытияФайла.Заголовок = "Выберите файлы изображений";
   Если ДиалогОткрытияФайла.Выбрать() Тогда
       НоваяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла);
       ПреобразованнаяКартинка = НоваяКартинка.Преобразовать(ФорматКартинки.PNG);
       ВыбФайл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла);
       ИмяФайла = ВыбФайл.ИмяБезРасширения+".PNG";
       ПолноеИмяФайла = ВыбФайл.Путь+ИмяФайла;
       ПреобразованнаяКартинка.Записать(ПолноеИмяФайла);
       ТекущийЭлемент.ТекущиеДанные.СтрокаПутьФайла = ПолноеИмяФайла;
       Сообщить(ПолноеИмяФайла);
   КонецЕсли;
   
   ПриАктивизацииСтроки(Элементы.ТаблицаФото);
КонецПроцедуры

Можно, как подсказывают, использовать запуск в режиме командной строки программу, которая преобразовывает файл изображения с меньшим размером файла на выходе.
5 Композитор
 
05.10.10
15:56
Стоит оговориться, что речь идет об управляемых формах.
6 milan
 
05.10.10
16:22
(4) А в каких решениях на веб ты имеешь такую возможность - быстро пролистывать массивы изображений ????

Либо кешируется, причем асинхронно, либо показывается превью, потом по клику отображается на весь экран и при еще одном клике исходное изображение
7 Композитор
 
05.10.10
16:28
(6) так я как раз и ухожу от вэб.
8 Композитор
 
05.10.10
16:28
+(5) при использовании обычных форм такой проблемы нет