| 
    
            
         
         | 
    
  | 
8,2 Работа с реквизитом типа ХранилищеЗначения | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    10:29 
 | 
         
        Есть справочник ФотоНоменклатуры.
  
        У него есть реквизит ХранилищеКартинки - тип ХранилищеЗначения. На форме есть кнопка "ПрикрепитьКартинку". &НаКлиенте Процедура ПрикрепитьКартинку(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.ПолноеИмяФайла = ""; Диалог.Фильтр = "(*.jpg)|*.jpg"; Диалог.МножественныйВыбор = Ложь; Диалог.Заголовок = "Выберите файл"; Если Диалог.Выбрать() Тогда МассивФайлов = Диалог.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл ВыбранныйФайл = Новый Файл(ИмяФайла); ПутьКФайлу = ВыбранныйФайл.ПолноеИмя; МояКартинка = Новый Картинка(ПутьКФайлу, Истина); //ПроцедураПомещенияВХранилищеКартинки КонецЦикла; КонецЕсли; КонецПроцедуры Вопрос в том, как должна выглядеть ПроцедураПомещенияВХранилищеКартинки ? Эта процедура должна поместить переменную МояКартинка в реквизит ХранилищеКартинки справочника ФотоНоменклатуры.  | 
|||
| 
    1
    
        Cube    
     13.03.12 
            ✎
    10:30 
 | 
         
        (0) Посмотреть, как это сделано в типовых не предлагать?     
         | 
|||
| 
    2
    
        Рэйв    
     13.03.12 
            ✎
    10:31 
 | 
         
        ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
  
        НовоеФото = Новый ХранилищеЗначения(ВыбранноеФото,Новый СжатиеДанных(1)); СхемаПроезда=НовоеФото; ЭлементыФормы.ПолеКартинки1.Картинка = СхемаПроезда.Получить();  | 
|||
| 
    3
    
        Cube    
     13.03.12 
            ✎
    10:33 
 | 
         
        (2) Это так просто было в обычных формах, а у него, походу, управляемые... :)     
         | 
|||
| 
    4
    
        Рэйв    
     13.03.12 
            ✎
    10:34 
 | 
         
        (2)Разберется поди:-)     
         | 
|||
| 
    5
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    10:41 
 | 
         
        Да управляемые и (2) не прокатывает.     
         | 
|||
| 
    6
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    10:43 
 | 
         
        Как обратиться к реквизиту ХранилищеКартинки, т.к. его даже нет в перечне реквизитов ?     
         | 
|||
| 
    7
    
        Cube    
     13.03.12 
            ✎
    10:46 
 | 
         
        (6) Смотри (1).     
         | 
|||
| 
    8
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    10:48 
 | 
         
        Смотрел, но чето простого ничего не увидел.     
         | 
|||
| 
    9
    
        Cube    
     13.03.12 
            ✎
    10:53 
 | 
         
        (8) Значит правильно смотрел :)
  
        Там ничего простого нет)  | 
|||
| 
    10
    
        Smallrat    
     13.03.12 
            ✎
    10:57 
 | 
         
        примерный кусок кода:
  
        
      | 
|||
| 
    11
    
        Smallrat    
     13.03.12 
            ✎
    11:00 
 | 
        
      | 
|||
| 
    12
    
        Smallrat    
     13.03.12 
            ✎
    11:00 
 | 
         
        ой не то 
  
        
      | 
|||
| 
    13
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    17:47 
 | 
         
        Сделал так
  
        &НаКлиенте Процедура ЗагрузитьКартинку(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.ПолноеИмяФайла = ""; Диалог.Фильтр = "(*.jpg)|*.jpg"; Диалог.МножественныйВыбор = Ложь; Диалог.Заголовок = "Выберите файл"; Если Диалог.Выбрать() Тогда МассивФайлов = Диалог.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл ВыбранныйФайл = Новый Файл(ИмяФайла); Объект.ПутьКФайлу = ВыбранныйФайл.ПолноеИмя; Если Не ЗначениеЗаполнено(Объект.Наименование) Тогда Объект.Наименование = ВыбранныйФайл.ИмяБезРасширения КонецЕсли; НоваяКартинка = Новый Картинка(Объект.ПутьКФайлу, Истина); АдресКартинки = ПоместитьВоВременноеХранилище(НоваяКартинка); КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если Не ЗначениеЗаполнено(АдресКартинки) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Загрузите картинку"; Сообщение.Сообщить(); Отказ = Истина; Возврат КонецЕсли; КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ДанныеКартинки = ПолучитьИзВременногоХранилища(АдресКартинки); ТекущийОбъект.ХранилищеКартинки = Новый ХранилищеЗначения(ДанныеКартинки, Новый СжатиеДанных(9)); ТекущийОбъект.Записать(); УдалитьИзВременногоХранилища(АдресКартинки); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда Возврат КонецЕсли; ТекущаяКартинка = Объект.Ссылка.ХранилищеКартинки.Получить(); АдресКартинки = ПоместитьВоВременноеХранилище(ТекущаяКартинка); КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() УдалитьИзВременногоХранилища(АдресКартинки); КонецПроцедуры Прошу указать на недочеты. Smallrat спасибо за код.  | 
|||
| 
    14
    
        Кукалёв Анатолий    
     13.03.12 
            ✎
    17:48 
 | 
         
        АдресКартинки - реквизит формы, тип строка(0)     
         | 
|||
| 
    15
    
        Smallrat    
     14.03.12 
            ✎
    08:47 
 | 
         
        (14) на быстрый взгляд ничего криминального нет. Работает ? Вот и хорошо :)     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |