Имя: Пароль:
1C
1С v8
v8: ХранилищеЗначений в табличной части
0 Молодой 1Снег
 
12.03.13
10:37
Есть документ с табличной частью один из реквизитов которой ХранилищеЗначений. Формы обычные.

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

Правильно ли я записываю данные? Если да, то как их оттуда потом прочитать (например, запустить файл в событии Открытие)?
1 butterbean
 
12.03.13
10:38
ТехЗадание.Получить().Записать(ИмяФайла)
2 Молодой 1Снег
 
12.03.13
10:51
Делаю вот так:

Процедура ДокументооборотТехЗаданиеОткрытие(Элемент, СтандартнаяОбработка)
   
   ТехЗадание = ЭлементыФормы.Документооборот.ТекущиеДанные.ТехЗадание.ПолучитьОбъект();
   ИмяФайла = КаталогВременныхФайлов() + "TempFile." + "txt";
   ТехЗадание.Получить().Записать(ИмяФайла);
   ЗапуститьПриложение(ИмяФайла);

КонецПроцедуры

Ругается: "Метод объекта не обнаружен (ПолучитьОбъект)"

Не пойму, в чём ошибка?
3 patapum
 
12.03.13
10:52
(2) надо просто понять, какой тип у ЭлементыФормы.Документооборот.ТекущиеДанные.ТехЗадание
4 Молодой 1Снег
 
12.03.13
10:57
(3) Отладчик говорит, что там ХранилищеЗначения
5 butterbean
 
12.03.13
10:59
(4) код в (0) не записывает файл в твой реквизит ТехЗадание
6 Молодой 1Снег
 
12.03.13
11:00
Сделал так:

Процедура ДокументооборотТехЗаданиеОткрытие(Элемент, СтандартнаяОбработка)
   
   ТехЗадание = ЭлементыФормы.Документооборот.ТекущиеДанные.ТехЗадание;
   ИмяФайла = КаталогВременныхФайлов() + "TempFile." + "txt";
   ТехЗадание.Получить().Записать(ИмяФайла);
   ЗапуститьПриложение(ИмяФайла);

КонецПроцедуры

Всё заработало. Даже файл открывается.

(5) А что там не так?
7 Молодой 1Снег
 
12.03.13
11:08
Появился ещё вопрос. В ЗранилищеЗначения хранится расширение файла? Мне нужно хранить в нём файлы разных типов, а затем запускать их соответствующими приложениями.
Как это сделать?
8 cw014
 
12.03.13
11:13
(7) Для таких вещей уже нужно справочник делать. С типами файлов и т.д. В хранилище хранится только двоичные данные файла
9 Молодой 1Снег
 
12.03.13
11:19
(8) Я думал про это. Но не придумал как сделать, чтобы при заполнении реквизита ТехЗадание пользователю не справочник открывался, а сразу диалог выбора файла. Такое возможно?
10 cw014
 
12.03.13
11:27
(9) Если руки из правильного места растут - все возможно
11 samozvanec
 
12.03.13
11:31
(9) хранилище с файлом суй в структуру, вместе с расширением, ее опять в хранилище, его в реквизит
12 samozvanec
 
12.03.13
11:31
+(11) да и ваще не хранилище, а ДД в структуру суй.
13 Молодой 1Снег
 
12.03.13
11:37
(12) Если я структуру засуну в хранилище данных, а потом получу оттуда значение это будет опять структура?
14 samozvanec
 
12.03.13
11:43
(13) да
15 Молодой 1Снег
 
12.03.13
11:59
(14) Всё получилось! Спасибо!

Теперь последний вопрос.
В табличной части реквизит ТехЗадание всегда отображается надписью ХранилищеЗначения. Мне нужно чтобы там отображалось название хранимого файла. Как это сделать с учетом того что название файла я сохраняю в той же структуре, что и сам файл?
16 cw014
 
12.03.13
12:01
(15) Отлучи колонку от данных, и ПриВыводеСтроки тебе в помощь
17 Молодой 1Снег
 
12.03.13
12:03
(16) Пробую
18 Молодой 1Снег
 
12.03.13
13:35
Создал новую колонку не привязанную к данным. Повесил на неё все обработчики с колонки ТехЗадание. Всё работает, файл сорхраняется и открывается.
Но не пойму как теперь имя файла отображать в этой колонке. Подскажите, что написать в обработчике ПриВыводеСтроки?
19 Молодой 1Снег
 
12.03.13
14:00
Сделал вот так:

Процедура ДокументооборотПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   техзадание = ДанныеСтроки.техзадание.Получить();
   если не техзадание = неопределено Тогда
       ОформлениеСтроки.Ячейки.Колонка1.ОтображатьТекст = Истина;
       ОформлениеСтроки.Ячейки.Колонка1.Текст=техзадание.имя;
   КонецЕсли;
 
КонецПроцедуры

Вроде работает, но не совсем хорошо. Наименование файла отображается в ячейке только после того как закончишь её редактирование. Когда ячейка редактируется, т.е. в ней моргает курсор, то она пуста. Даже если в реквизите Техзадание что-то есть.
Может как то по-другому надо было сделать?
Ошибка? Это не ошибка, это системная функция.