Имя: Пароль:
1C
 
Хранилище значений в табличной части справочника 8.2
0 sereban
 
11.09.10
11:55
Возникла проблема при работе с реквизитом табличной части, который имеет тип хранилище значения. Табличная часть "Файлы" имеет 2 реквизита:
"ИмяФайла"(строка) и "ДанныеФайла"(хранилище).

Значение в табличную часть попападают следующим образом:

//процедура модуля формы элемента справочника

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

&НаСервере
Процедура ДобавитьФайлТЧ(ИмяФайла, ДвоичныеДанные)

   СправочникОбъект = РеквизитФормыВЗначение("Объект");
   СтрокаТЧ = СправочникОбъект.файлы.Добавить();
   СтрокаТЧ.ИмяФайла = ИмяФайла;
   ХЗ = Новый ХранилищеЗначения(ДвоичныеДанные);
   СтрокаТЧ.ДанныеФайла = ХЗ;
   ЗначениеВРеквизитФормы(СправочникОбъект, "Объект");
   
   
КонецПроцедуры // ДобавитьФайлТЧ()
1 sereban
 
11.09.10
11:58
Все вроде бы нормально, только когда я потом пытаюсь получить двоичные данные из хранилища, получаю результат НЕОПРЕДЕЛЕНО

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

КонецФункции // ПолучитьОбъект()
2 luns
 
11.09.10
12:00
подгляди как в типовой сделано. например в библиотеке стандартных подсистем - механизм хранения файлов.
3 sereban
 
11.09.10
12:01
смотрел. Там в ТЧ они не хранят
4 sereban
 
11.09.10
12:03
Строка ХЗ.Получить() возвращает неопределено. Тоже самое я использую в другом справочнике, но там мне эта функция дает ДвоичныеДанные. Отличия только в записи в таб часть: сдесь я двоичные данные получаю из файла, а в том который работает я получаю из входящего сообщения электронной почты. Там соответствие, а  в нем двоичные данные, которые я записываю. Может кто нибудь найдет что не при записи в ТЧ?
5 mdocs
 
11.09.10
14:01
Не очепятка СтрокаТЧ = ТЧ.Найти(НомерСтроки,"НомерСтроки")? вроде надо СтрокаТЧ = ТЧ.Найти(НомерСтрокиТЧ,"НомерСтроки")
6 sereban
 
11.09.10
14:05
Опечатка. Уже разобрался что к чему
Нужно обязательно записывать СправочникОбъект после добавления строки в ТЧ, тогда все работает
7 luns
 
11.09.10
14:08
(6) )))))))
8 sereban
 
11.09.10
14:10
Как я понял раз Тип Хранилище значения недоступен в данных формы, то он не запишется при стандартной записи. Пришлось добавлять в ТЧ только имена файлов, сохранять пути к ним и при записи, обращаясь к объекту, добавлять в ТЧ хранилище значений содержащее двоичные данные файла.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший