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

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

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

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

поэтому сравнение

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

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

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

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

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

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