Имя: Пароль:
1C
1С v8
сохранение файла из регистра сведений
0 cyx7
 
21.04.15
13:57
Привет всем! Каким образом сохранить файл, который лежит в регистре сведений. делаю регламентное задание, добралась до этого пунктика, а как быть и не знаю, имею таблицу значений в которой содержатся файлики, циклом обхожу и каждый нужно сохранить. ут 11
1 Анютик
 
21.04.15
13:57
файл в регистре сведений? может, все же, в ХранилищеЗначений?
2 Ващета
 
21.04.15
13:59
Сначала получить из хранилища, потом провреить на двоичные данные, а потом вызвать метод записать()
3 Ващета
 
21.04.15
14:02
Хотя тут пишут, что получать не надо:

Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().

Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
    ДвоичныеДанные = Хранилище.Получить();
Иначе
    ДвоичныеДанные = Хранилище;
КонецЕсли;
ДвоичныеДанные.Записать(ИмяФайла);

Книга знаний: Хранилище значения
4 cyx7
 
21.04.15
14:05
(3) ДвоичныеДанные = стр.Получить();
        СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
5 cyx7
 
21.04.15
14:05
(4) и теперь сделать СсылкаНаДвоичныеДанныеФайла.записать()?
6 Ващета
 
21.04.15
14:06
(5) читал (3)? Что у тебя "стр"?
7 Ващета
 
21.04.15
14:07
Книга знаний: Хранилище значения ссылка неправильно вставилась
8 cyx7
 
21.04.15
14:25
(6) в переменную двоичные данные у меня присваиваются двоичные данные
9 cyx7
 
21.04.15
14:26
(6) но не работает последняя строчка СсылкаНаДвоичныеДанныеФайла.записать("D:\"); пишет Значение не является значением объектного типа (записать)
10 cyx7
 
21.04.15
14:27
(6) переменная ссылканадвоичныеданные имеет тип строка, значение e1cib/tempstorage/7b461a5a-a975-46b8-88d0-5e1d12690356
11 Ващета
 
21.04.15
14:28
(10) а зачем ты делаешь ПоместитьВоВременноеХранилище?
Читай (3) до просветления.
12 Ващета
 
21.04.15
14:30
(11) переменная "Хранилище" это твой реквизит, где файл лежит, присвой ей реквизит твой и всё.
13 cyx7
 
21.04.15
14:35
(12) по сути я так и делала в исправленном варианте: вот он(Для Каждого стр из результат Цикл
        ДвоичныеДанные = стр.ФайлЗапроса.Получить();
        ДвоичныеДанные.записать("D:\");)

А у меня теперь начал ругаться на Ошибка доступа к файлу 'D:\'. 1с запустила от администратора
14 Ващета
 
21.04.15
14:39
(13) Имя файла полное надо.. не только путь
15 cyx7
 
21.04.15
14:43
(14) да, тоже разобралась только что, спасибо Вам огромное за помощь=)))
16 cyx7
 
21.04.15
15:01
у меня еще вопрос, как реализовать такое: запрос формирует тз, в таблице значений две колонки "контрагент" и "файл", к примеру такой результат: 1 строка контрагент1 файл1, 2 строка контрагент2 файл2, 3 строка контрагент1 файл3,4 строка контрагент2 файл4. мне нужно файлы одного и тогоже контрагента индексировать. тоесть имя файлов изменить на "файл1_1", "файл3_1", "файл2_2", "файл4_2". как такое осуществить?
17 cyx7
 
21.04.15
15:25
сделала сама следующим образом, возможно кому то пригодится:
Результат = Запрос.Выполнить().Выгрузить();
    тз = новый таблицаЗначений;
    тз.Колонки.Добавить("Контрагент",,"Контрагент");
    Для Каждого стр из результат Цикл
        Если тз.Найти(стр.контрагент)=неопределено тогда
            строка = тз.Добавить();
            Строка.контрагент = стр.контрагент;
        КонецЕсли;
        Если тз.Найти(стр.контрагент)<>неопределено тогда
            индекс = тз.Индекс(тз.найти(стр.контрагент))+1;
        
            ДвоичныеДанные.записать("D:\"+стр.файлзапросаимя+"_"+индекс+".p10");
        КонецЕсли;
            
    КонецЦикла;
18 D_E_S_131
 
21.04.15
17:07
Нужно результат запроса получать с использованием итогов по контрагенту, а потом получать выборку с использованием ОбходРезультатаЗапроса.ПоГруппировкам. Тогда не придется извращаться с таблицей значений.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс