Имя: Пароль:
1C
1С v8
Показ картинки при подборе товаров
0 LittlePumpkin
 
28.07.20
10:10
Здравствуйте. УТ 11

Хочу при подборе товаров выводить картинку товара (при позиционировании на строке).
Есть справочник "Номенклатура", у которого есть реквизит "ФайлКартинки". Этот реквизит ссылается на справочник "НоменклатураПрисоединенныеФайлы". У "НоменклатураПрисоединенныеФайлы" есть реквизит "ФайлХранилище" с типом ХранилищеЗначения.

1)Я правильно понимаю, что картинки номенклатуры хранятся в "ФайлХранилище"?

В интернете прочитал, что нужно использовать "ПолучитьНавигационнуюСсылку". Применяю эту функцию для "ФайлКартинки", получаю непонятное значение:
e1cib/data/Справочник.Номенклатура.ФайлКартинки?ref=90d9eca86b24952c11e4a0606cf67d55

2)Как правильно использовать "ПолучитьНавигационнуюСсылку", чтобы получить изображения номенклатуры?
1 shuhard
 
28.07.20
10:18
(0)[В интернете прочитал, что нужно использовать "ПолучитьНавигационнуюСсылку"]
смени интернет, в твоём пургу гонят
2 vde69
 
28.07.20
10:26
(1) все правильно про получитнавигационнуюссылку, делать надо через неё или на крайняк через хранилище
3 LittlePumpkin
 
28.07.20
10:27
А как можно через хранилище?
4 vde69
 
28.07.20
10:30
Нав ссылку добавляешь в новую колонку по событию приполученииданных тип этой колонки должен быть строка.
Далее элемент формы картинка указываешь данные на этоту новую колонку
5 vde69
 
28.07.20
10:31
(3) помещаешь в хранилище а картинку натравливаешь на адрес хранилища

По существу это практически одно и тоже
6 LittlePumpkin
 
28.07.20
10:34
Проблема в том, что все еще выводится странная ссылка, а не картинка
https://imgur.com/a/hRe9Yoa
7 Ёпрст
 
28.07.20
11:13
8 LittlePumpkin
 
28.07.20
11:31
Да, это я читал. Проблема в том, что у меня данный код выдает ссылку, а не саму картинку. Возможно проблема в том, что обращаюсь к "ФайлКартинки", а не "ФайлХранилище"?
9 Ёпрст
 
28.07.20
11:40
(8) нам отсюда не видно как и че ты творишь
10 Ёпрст
 
28.07.20
11:41
и.. там же есть демопример..посмотри его, для начала, сделай по-аналогии
11 LittlePumpkin
 
28.07.20
12:00
В демопримере картинка хранится в реквизите самого справочника Номенклатура. А у меня она хранится в НоменклатураПрисоединенныеФайлы.  Поэтому не понимаю как использовать ПолучитьНавигационнуюСсылку, если номенклатура в одном справочнике, а картинка в другом
12 Ёпрст
 
28.07.20
12:02
(11) а есть какая то разница особая ? ))
там же в примере вы помещаете в колонку навигационную ссылку ..для неё пофик, откуда вы будете тащить данные картинки
13 Fragster
 
гуру
28.07.20
12:03
(0) оно тормозит
14 Fragster
 
гуру
28.07.20
12:03
хотя, если выводить не в ДС, а при активизации строки, то норм
15 Fragster
 
гуру
28.07.20
12:04
(11) более того, оно может быть на диске. правильно - получить двоичные данные и поместить их во временное хранилище. полученный адрес использовать как картинку.
16 LittlePumpkin
 
28.07.20
12:05
Значение есть, так как когда ПолучитьНавигационнуюСсылку обращается к реквизиту, где хранится картинка, то и выдается картинка.
А в моем случае ПолучитьНавигационнуюСсылку обращается к реквизиту, где хранится ССЫЛКА на справочник с картинками. И выдает соответственно не картинку, а вот это:
e1cib/data/Справочник.Номенклатура.ФайлКартинки?ref=90d9eca86b24952c11e4a0606cf67d55
17 LittlePumpkin
 
28.07.20
12:06
В примере ПолучитьНавигационнуюСсылку обращается к реквизиту с типом ХранилищеЗначений. А у меня тип - СправочникСсылка
18 Ёпрст
 
28.07.20
12:07
(16) через точку указать имя табличной части и имя реквизита в ней
19 LittlePumpkin
 
28.07.20
12:08
Извините, не понял. Вы сейчас о каком реквизите?
20 Ёпрст
 
28.07.20
12:11
почитай описание метода получить навигационную ссылку
21 LittlePumpkin
 
28.07.20
12:14
Ну, в первом параметре передается ссылка на объект, во втором имя реквизита. В моем случае указание имени реквизита справочника Номенклатура не работает, так как там ссылка, а не хранилище.
22 Ёпрст
 
28.07.20
12:17
(21) ну так тогда


Выборка = ПолучитьПрисоединенныеФайлы(Номенклатура);
Если Выборка.Следующий() Тогда
    Возврат ПолучитьИзвременногоХранилища(ПрисоединенныеФайлы.ПолучитьДанныеФайла(Выборка.Файл, Новый УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла);
КонецЕсли;
23 Ёпрст
 
28.07.20
12:21
на вот, занимайся.. решение ищется поиском за 1 минуту


&НаКлиенте
Процедура СписокИзмененийПриАктивизацииСтроки(Элемент)
    Если Объект.СписокИзменений.Количество()>0 Тогда
        ТекДанные=Элементы.СписокИзменений.ТекущиеДанные;
        ЭтаФорма.Изображение = ПолучитьКартинку(ТекДанные.Номенклатура);
    КонецЕсли;        
КонецПроцедуры

&НаСервере
Функция ПолучитьКартинку(Номенклатура)

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.ФайлКартинки КАК Картинка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Номенклатура);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаДетальныеЗаписи.Картинка,ЭтаФорма).СсылкаНаДвоичныеДанныеФайла;    
    КонецЦикла;
    
    Возврат Неопределено;
    
КонецФункции
24 PuhUfa
 
28.07.20
12:23
Если УТ11 то:
На форме поле. Вид - "Поле картинки". ПутьКДанным - АдресКартинки (реквизит формы, тип строка)

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    
    ...    
    Если Элемент.ТекущиеДанные <> Неопределено Тогда
        АдресКартинки = ПолучитьАдресКартинки(Элемент.ТекущиеДанные.Ссылка, ЭтаФорма.УникальныйИдентификатор);
    КонецЕсли;    
        
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьАдресКартинки(Номенклатура, УникальныйИдентификаторФормы)
    
    Попытка
        АдресКартинки = РаботаСФайлами.ДанныеФайла(Номенклатура.ФайлКартинки, УникальныйИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;
    Исключение
        АдресКартинки = "";
    КонецПопытки;
    
    Возврат АдресКартинки;
    
КонецФункции
25 LittlePumpkin
 
28.07.20
12:41
Спасибо огромное! Работает:)
Расскажите пожалуйста, зачем передается уникальный идентификатор формы?
И как вы нашли решение? В смысле как вы поняли, что нужно использовать? Бился около двух дней над этой проблемой, хочу понять свои ошибки.
26 PuhUfa
 
28.07.20
12:47
(25) Это БСП. Перейди в функцию РаботаСФайлами.ДанныеФайла(...) там есть полное описание
27 LittlePumpkin
 
28.07.20
12:50
Да, это я понимаю. Но как вот в такой ситуации понять, что нужно использовать именно эту функцию в общем модуле?
28 PuhUfa
 
28.07.20
13:05
(27) а это уже Дзэн -))