Имя: Пароль:
1C
 
Хранилище значения в реквизите табличной части (упр. формы)
0 sound
 
09.12.14
10:51
С управляемыми формами только разбираюсь, больно не пинать! Гуглил, но плохо, везде кусками, толкового разъяснения не нашел. Смотрел, что в типовых не юзают реквизиты с типом "ХранилищеЗначения" в табличных частях, а хранят все это в связанных регистрах, про это в курсе если что.

В документе есть табличная часть "ТЧФайлы", в ней 2 реквизита: "Файл" (тип "ХранилищеЗначения") и "ИмяФайла" (тип "строка"). Вопрос: как и в каких процедурах организовать запись (с выбором файлов) и чтение в реквизит "Файл"?
1 mikecool
 
09.12.14
10:53
в БСП посмотреть не предлагать?
2 sound
 
09.12.14
10:53
(1) а это чо? )
3 Жан Пердежон
 
09.12.14
10:54
смотри в типовых, в БСП реализована подсистема работы с файлами
4 sound
 
09.12.14
10:55
(1,2) Библиотека стандартных подсистем чтоли?
5 Жан Пердежон
 
09.12.14
11:00
(4) да, она бесплатная, качай - смотри - себе бери
6 sound
 
09.12.14
11:09
Пасиба всем, буду курить. Хотя жаль что примерчик никто не кинул :)
7 sound
 
09.12.14
12:00
Чото закопался я с этой БСП, много лишнего, может все таки есть у кого примерчик?
8 sound
 
09.12.14
12:11
вот пока до чего дошло, не знаю мож где ошибка, пишу в модуле формы документа:

&НаКлиенте
Процедура ДобавлениеФайла(Команда)
    ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ВыборФайла.МножественныйВыбор = Ложь;
    ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'");
    ВыборФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'");
    //РабочийКаталог = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ВладелецФайла);
    //ВыборФайла.Каталог = РабочийКаталог;
    Результат = ВыборФайла.Выбрать();
    ПолноеИмяФайла = ВыборФайла.ПолноеИмяФайла;
    Если НЕ Результат Тогда Возврат; КонецЕсли;
    Файл = Новый Файл(ПолноеИмяФайла);
    //ФайловыеФункцииСлужебныйКлиентСервер.ПроверитьВозможностьЗагрузкиФайла(Файл);
    АдресВременногоХранилища = "";
    ПомещаемыеФайлы = Новый Массив;
    Описание = Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, "");
    ПомещаемыеФайлы.Добавить(Описание);
    ПомещенныеФайлы = Новый Массив;
    Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы,,Ложь, ЭтаФорма.УникальныйИдентификатор) Тогда
        Сообщить("Ошибка при помещении файла во временное хранилище");
        ВОзврат;
    КонецЕсли;
    Если ПомещенныеФайлы.Количество() = 1 Тогда
        АдресВременногоХранилища = ПомещенныеФайлы[0].Хранение;
        НовСтр                = Объект.ТЧФайлы.Добавить();
        НовСтр.ИмяФайла     = Файл.Имя;
        НовСтр.Комментарий     = Файл.ИмяБезРасширения;
        НовСтр.АдресВременногоХранилища = АдресВременногоХранилища;
    КонецЕсли;
КонецПроцедуры


потом нарыл что нужно сделать примерно так:

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


&НаКлиенте
Процедура ТЧФайлыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Если Поле.Имя = "ТЧФайлыИмяФайла" Тогда
        Если Объект.ТЧФайлы[ВыбраннаяСтрока].ИмяФайла = "" Тогда
            Предупреждение("Нет сохраненного в базе файла!");
        Иначе
            СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ТЧФайлы.Файл", ВыбраннаяСтрока);
            Попытка
                ПолучитьФайл(СсылкаНаФайлВИБ, Объект.ТЧФайлы[ВыбраннаяСтрока].ИмяФайла);
            Исключение
                Предупреждение("Ошибка: возможно документ еще не записан!");
                Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
            КонецПопытки;
        КонецЕсли;    
    КонецЕсли;
КонецПроцедуры


вроде работает, но как то все через #$пу блин. Сижу щас думаю насколько это правильно вообще
10 Жан Пердежон
 
09.12.14
12:26
(9) да, все так, через временное хранилище файл отправляешь с клиента на сервер, и через него же получаешь обратно
11 sound
 
09.12.14
12:32
(10) Мне кажется в процедуре ПередЗаписьюНаСервере косяк какой то. Вроде файлы записываются, потом документ закрываю/открываю заново, добавляю 2-ю строчку, записываю, после этого  первая строка уже как будто не содержит файла
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс