Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Выгрузка изображений номенклатуры

Выгрузка изображений номенклатуры
Я
   NortT
 
07.11.17 - 11:28
Добрый день. Кто-нибудь знает как выгрузить картинку, прикрепленную к номенклатуре?
Пробовал сделать вот так, но значение Файл у меня в результате Неопределено. Может есть у кого рабочий пример?
&НаСервере
Процедура ВыгрузитьКартинкиНаСервере()
    КаталогИБ = "C:\wamp64\www\ххх\img\";
     КаталогНаДиске = Новый Файл("C:\wamp64\www\ххх\img\1");

    Если НЕ КаталогНаДиске.Существует() Тогда
            СоздатьКаталог(КаталогНаДиске.Путь);
    КонецЕсли;

    ИмяФайла = КаталогИБ + "1.jpg";
    
    Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовая бита");
    
    Если Номенклатура <> Неопределено Тогда
        Файл = Номенклатура.ФайлКартинки.ФайлХранилище.Получить();
        Если Файл <> Неопределено Тогда
            Попытка 
                Сообщить("Производится локальная запись файла: " + ИмяФайла);
                Файл.Записать(ИмяФайла);
                Сообщить("Файл успешно записан на диск");
            Исключение
                Сообщить("Ошибка записи");
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
 
 
   PuhUfa
 
1 - 07.11.17 - 11:41
А отладчик то что говорит? что у тебя тут:
Номенклатура.ФайлКартинки.ФайлХранилище
   NortT
 
2 - 07.11.17 - 11:56
Отладчик говорит что тип Номенклатура.ФайлКартинки.ФайлХранилище это ХранилищеЗначения. А когда делаю Получить() то получаю в итоге Неопределено. Попробовал сделать через запрос к справочнику НоменклатураПоставщиковПрисоединенныеФайлы и получить все записи. Там всего 4 записи на данный момент, при этом для каждой записи ФайлХранилище.Получить() возвращает Неопределено.
   NortT
 
3 - 07.11.17 - 12:05
Прошу прощения. Под НоменклатураПоставщиковПрисоединенныеФайлы 
 имелось ввиду НоменклатураПрисоединенныеФайлы, скопировал имя с конфигуратора не то :)
   ejikbeznojek
 
4 - 07.11.17 - 12:10
А картинки номенклатуры куда-то ещё выводятся?
Может там посмотреть откуда они берутся?
   NortT
 
5 - 07.11.17 - 12:15
Выводятся в форме элемента номенклатуры. Сейчас разбираюсь откуда они выводятся на форму, но пока не могу понять.
   mehfk
 
6 - 07.11.17 - 12:18
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовая бита");
    
    Если Номенклатура <> Неопределено Тогда

бессмысленное сравнение
   NortT
 
7 - 07.11.17 - 12:22
Согласен, но сути дела это не меняет.
   NortT
 
8 - 07.11.17 - 12:24
Можно уменьшить код до такого:
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовая бита");  
Файл = Номенклатура.ФайлКартинки.ФайлХранилище.Получить();
   mehfk
 
9 - 07.11.17 - 12:25
Ну раз не меняет - значит ебись сам.
   NortT
 
10 - 07.11.17 - 12:28
И как меняет?
 
 Рекламное место пустует
   h-sp
 
11 - 07.11.17 - 12:32
(10) НайтиПоНаименованию в вашем случае никогда не даст в результате Неопределено.

поэтому сравнение
Если Номенклатура <> Неопределено Тогда

это дебилизм.
   PuhUfa
 
12 - 07.11.17 - 12:36
(2) Номенклатура.ФайлКартинки - ссылка на справочник?
У "Тестовая бита" картинка то вообще есть?
   NortT
 
13 - 07.11.17 - 12:40
Я же написал, это понятно, что не даст. Этот кусок кода я скопипастил с соседней ветки этого форума. Вопрос был не в том что даст НайтиПоНаименованию, а как сохранить изображение найденной номенклатуры в файл.
Попробовал получить запросом список файлов у номенклатуры, в цикле Файл тоже имеет значение неопределено.
    Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Тестовая бита");
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    НоменклатураПрисоединенныеФайлы.ФайлХранилище
        |ИЗ
        |    Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
        |ГДЕ
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла";
    
    Запрос.УстановитьПараметр("ВладелецФайла", Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Файл = ВыборкаДетальныеЗаписи.ФайлХранилище.Получить();
    КонецЦикла;
(12) - Да есть, приведенный выше запрос возвращает одну запись. Проверял в консоле запросов на всякий случай, там тоже запрос возвращает одну запись для данной номенклатуры.
   NortT
 
14 - 07.11.17 - 12:41
(12) Да, оменклатура.ФайлКартинки это ссылка на НоменклатураПрисоединенныеФайлы
   PuhUfa
 
15 - 07.11.17 - 12:44
(13) >>Да есть, приведенный выше запрос возвращает одну запись.
Приведенный запрос возвращает ссылку на НоменклатураПрисоединенныеФайлы. Но это не факт, что в найденном элементе справочника "НоменклатураПрисоединенныеФайлы", в реквизите "ФайлХранилище" записана картинка.
   R740
 
16 - 07.11.17 - 15:42
Используй "Двоичные данные"

...........
РезультаТ = Неопределено;
    НМК                = СокрЛП(Строка(Номенклатура));
    КартинкаПоАртикулу = КаталогИЗО+"\"+НМК+".jpg";
    Попытка
        Картинка      = Новый ДвоичныеДанные(КартинкаПоАртикулу);
        НадоВыгружать = истина;
    Исключение
        НадоВыгружать = Ложь;
        Сообщить("Нет файла-"+НМК+".jpg"+" с изображением в исходном каталоге!");    
КонецПопытки;
................
   NortT
 
17 - 08.11.17 - 04:19
(16) Так в этом примере я получаю картинку из файла, а мне нужно записать картинку в файл. Вопрос в том как получить ее из базы, где именно они хранятся?

(15) Я запросом перебрал все записи в НоменклатураПрисоединенныеФайлы, в каждой записи поле ФайлХранилище == Неопределено.

Вопрос: кто знает где именно хранится картинка номенклатуры?
   NortT
 
18 - 08.11.17 - 05:18
В общем решение было найдено. Данные картинок хранятся в регистре ПрисоединенныеФайлы, а не в справочнике НоменклатураПрисоединенныеФайлы. Для конкретной номенклатуры получился такой код (код требует доработки, но общий смысл примерно такой):

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует