Имя: Пароль:
1C
1С v8
Перебор записей табличной части элемента справочника для просмотра картинок
0 alpha78
 
21.09.15
09:29
Добрый день, коллеги. Хорошей новой недели.
Задача в чем. Это модуль формы для записи картинок в табличную часть элемента справочника при помощи ХранилищаЗначений
Для каждого элемента справочника Номенклатура есть табличная часть, в строках которой указаны имя, расширение файла картинок - фото товаров и Хранилище Значений, где хранится файл картинки.
Все вроде работает, но проблема вот в чем
Нужно при открытии формы элемента для элемента справочника в табличной части перебирать картинки при кликании на них мышкой, чтоб они отображались в ПолеКартинки - реквизит формы.
Я знаю есть для этого Обработка события "При Активизации строки".
Помогите в решении этого вопроса. Заранее благодарен.



&НаКлиенте
Процедура ВыбратьФайлКартинки(Команда)
//Создаем оповещение,   именно  процедура  "ОбработатьВыборФайла"  будет вызвана при закрытии окна выбора файла
Оповещение  =  Новый ОписаниеОповещения("ОбработатьВыборФайла",   ЭтаФорма);
//Открываем интерактивно  окно для выбора файла
НачатьПомещениеФайла(Оповещение,   ,   ,   Истина,   УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

Если Не Результат Тогда
Возврат;
КонецЕсли;

СсылкаНаКартинку = Адрес;
ЗаписьХранилища(Адрес,ВыбранноеИмяФайла);
КонецПроцедуры  

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

    
    ЭлементСправочника.Записать();
    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
    
        
    А=0;
    //Чистим временное хранилище
    //УдалитьИзВременногоХранилища(Адрес);
    
КонецПРоцедуры


//  при окрытии формы элемента справочника
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Для каждого ТекСтрока Из Объект.ПрикрепленныеФайлы Цикл
           // выводится только основная картинка
        
           Если ТекСтрока.ОсновнаяКартинка Тогда
           Индекс = Объект.ПрикрепленныеФайлы.Индекс(ТекСтрока);
           СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ПрикрепленныеФайлы.СодержимоеФайла", Индекс);        
           Прервать;
       КонецЕсли;            
   КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПрикрепленныеФайлыОсновнаяКартинкаПриИзменении(Элемент)
        Строка=Элементы.ПрикрепленныеФайлы.ТекущиеДанные;
        ПроверкаНаличияОсновной();
        Строка.ОсновнаяКартинка=Истина;
КонецПроцедуры

// проверка наличия основных картинок
&НаСервере
Процедура ПроверкаНаличияОсновной();
    Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл
        Строка.ОсновнаяКартинка=Ложь;    
    КонецЦикла;    
КонецПроцедуры

// если у нас услуга, то кнопка выбора картинок не работает
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)
    Если ОБъект.Услуга=Ложь Тогда
    Элементы.ФормаВыбратьФайлКартинки.Доступность=Истина;
    Иначе
    Элементы.ФормаВыбратьФайлКартинки.Доступность=Ложь;
    КонецЕсли;
КонецПроцедуры

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





//с активизацией табличной части не получилось

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

//    //ПрикрепленныеФайлыПриАктивизацииСтрокиНаСервере(ТабСтрока.НаименованиеФайла);
//КонецПроцедуры


//&НаСервере
//Процедура ПрикрепленныеФайлыПриАктивизацииСтрокиНаСервере(Файл)
//    ЭлементСправочника = РеквизитФормыВЗначение("Объект");
//    Строка = ЭлементСправочника.Найти(Файл);
//    Картинка = Строка.СодержимоеФайла;
//    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
//КонецПроцедуры




&НаКлиенте
Процедура ВыбратьФайлКартинки(Команда)
//Создаем оповещение,   именно  процедура  "ОбработатьВыборФайла"  будет вызвана при закрытии окна выбора файла
Оповещение  =  Новый ОписаниеОповещения("ОбработатьВыборФайла",   ЭтаФорма);
//Открываем интерактивно  окно для выбора файла
НачатьПомещениеФайла(Оповещение,   ,   ,   Истина,   УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

Если Не Результат Тогда
Возврат;
КонецЕсли;

СсылкаНаКартинку = Адрес;
ЗаписьХранилища(Адрес,ВыбранноеИмяФайла);
КонецПроцедуры  

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

    
    ЭлементСправочника.Записать();
    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
    
        
    А=0;
    //Чистим временное хранилище
    //УдалитьИзВременногоХранилища(Адрес);
    
КонецПРоцедуры


//  при окрытии формы элемента справочника
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Для каждого ТекСтрока Из Объект.ПрикрепленныеФайлы Цикл
           // выводится только основная картинка
        
           Если ТекСтрока.ОсновнаяКартинка Тогда
           Индекс = Объект.ПрикрепленныеФайлы.Индекс(ТекСтрока);
           СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ПрикрепленныеФайлы.СодержимоеФайла", Индекс);        
           Прервать;
       КонецЕсли;            
   КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПрикрепленныеФайлыОсновнаяКартинкаПриИзменении(Элемент)
        Строка=Элементы.ПрикрепленныеФайлы.ТекущиеДанные;
        ПроверкаНаличияОсновной();
        Строка.ОсновнаяКартинка=Истина;
КонецПроцедуры

// проверка наличия основных картинок
&НаСервере
Процедура ПроверкаНаличияОсновной();
    Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл
        Строка.ОсновнаяКартинка=Ложь;    
    КонецЦикла;    
КонецПроцедуры

// если у нас услуга, то кнопка выбора картинок не работает
&НаКлиенте
Процедура УслугаПриИзменении(Элемент)
    Если ОБъект.Услуга=Ложь Тогда
    Элементы.ФормаВыбратьФайлКартинки.Доступность=Истина;
    Иначе
    Элементы.ФормаВыбратьФайлКартинки.Доступность=Ложь;
    КонецЕсли;
КонецПроцедуры

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





//с активизацией табличной части не получилось

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

//    //ПрикрепленныеФайлыПриАктивизацииСтрокиНаСервере(ТабСтрока.НаименованиеФайла);
//КонецПроцедуры


//&НаСервере
//Процедура ПрикрепленныеФайлыПриАктивизацииСтрокиНаСервере(Файл)
//    ЭлементСправочника = РеквизитФормыВЗначение("Объект");
//    Строка = ЭлементСправочника.Найти(Файл);
//    Картинка = Строка.СодержимоеФайла;
//    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
//КонецПроцедуры
1 alpha78
 
21.09.15
09:35
извините небольшая опечатка дублировал код