Имя: Пароль:
1C
1С v8
Присоединенные файлы номенклатура сохранить в файл.
🠗 (Волшебник 01.02.2023 16:01)
0 K1RSAN
 
01.02.23
15:35
В общем, нужно выгрузить из УТ (для Казахстана) картинки номенклатуры.
Пытался получить данные из справочника, из регистра двоичные данные файла. Почему-то в обоих случаях пишет "метод объекта (Записать) не обнаружен".
В Файл (из кода) имеет тип "Структура"
В "Двоичные данные" - тоже.

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла КАК ВладелецФайла,
        |    НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка,
        |    Номенклатура.Код КАК Код,
        |    НоменклатураПрисоединенныеФайлы.Расширение КАК Расширение,
        |    НоменклатураПрисоединенныеФайлы.ФайлХранилище КАК ФайлХранилище,
        |    ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
        |ИЗ
        |    Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        |        ПО НоменклатураПрисоединенныеФайлы.ВладелецФайла = Номенклатура.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
        |        ПО НоменклатураПрисоединенныеФайлы.Ссылка = ДвоичныеДанныеФайлов.Файл
        |ГДЕ
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
        |    И Номенклатура.ФайлКартинки.Ссылка = НоменклатураПрисоединенныеФайлы.Ссылка";
    
    Запрос.УстановитьПараметр("ВладелецФайла", Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл                        
        Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();      
        Файл = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаДетальныеЗаписи.Ссылка);
        ФотоХранилище = ПоместитьВоВременноеХранилище(Файл, Новый УникальныйИдентификатор);
        ПутьКФайлуExcel = ПолучитьИмяВременногоФайла("xlsx");
        //Файл.Записать("c:\temp\1.jpg");                
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФотоХранилище);
        ДвоичныеДанные.Записать("c:\temp\1.jpg");
    КонецЦикла;


Пока пробую выгрузить по ссылке картинку, но должно в цикле пробежаться потом по всем и выгрузить
1 Kassern
 
01.02.23
15:37
(0) "метод объекта (Записать) не обнаружен"" - еще бы, у вас переменная ДвоичныеДанные <> тип ДвоичныеДанные. Скорее всего вообще неопределено у вас там)
2 Kassern
 
01.02.23
15:38
Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();      
        Файл = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаДетальныеЗаписи.Ссылка);  - вот это вы зачем 2 раза переменную переопределили?

Что у вас в итоге (в отладке) в Файл находится?)
3 K1RSAN
 
01.02.23
15:52
Это я просто дописываю разное пытаюсь.
В итоге отладка показывает, что у меня в файле находится некая структура с кучей реквизитов
4 K1RSAN
 
01.02.23
15:52
А в первом случае - некие двоичные файлы (всякие FF D8 FF и так далее)
5 K1RSAN
 
01.02.23
15:57
Разобрался. Первый вариант записать получается. Видимо по ходу экспериментов сам себе испортил всё
6 K1RSAN
 
01.02.23
16:03
В общем сохранить удалось

Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();
Файл.Записать("c:\temp\" + ВыборкаДетальныеЗаписи.ВладелецФайла + "." + ВыборкаДетальныеЗаписи.Расширение);

Но другая проблема. В наименовании номенклатуры используется символ "/" и 1С воспринимает, что надо создать папку и туда записывать файл с остатком наименования...
7 lodger
 
01.02.23
16:05
(6) Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();
Файл.Записать("c:\temp\" + СтрЗаменить(ВыборкаДетальныеЗаписи.ВладелецФайла,"/","") + "." + ВыборкаДетальныеЗаписи.Расширение);
8 K1RSAN
 
01.02.23
16:07
(7) Спасибо
Программист всегда исправляет последнюю ошибку.