Дорогие и талантливые форумчане !

Вопрос такой : Нужно выводить на форму документа "Розничная продажа" картинку по
                          номенклатуре.

в самом справочнике Номенклатура при открытии формы элемента добавляется и открывается картинка номенклатуры таким образом :

```1c
    &НаКлиенте
    Процедура ДобавитьКартинку(Команда)
    ИмяФайла = ";
    ПутьФайла = ";
    //Вызываем Диалоговое окно и помещаем файл Картинки из локальной файловой системы во временное хранилище
    Если ПоместитьФайл(ПутьФайла, , ИмяФайла, Истина) = Истина Тогда

    //в строковый реквизит ФОТО нашей формы сохраняем ссылку на Картинку во временном хранилище
    Фото = ПутьФайла;
    //для создания нового элемента в Справочнике Файлы и записи Картинки в его реквизит Файл
    //переходим на сервер с помощью вызова серверной процедуры
    УстановитьКартинку();
    КонецЕсли;
    //условие ЕСЛИ нужно для того, чтобы если пользователь отказался от выбора файла
    //мы не вызывали серверную процедуру УстановитьКартинку()
    КонецПроцедуры

    &НаСервере
    Процедура УстановитьКартинку()
    //создаем новый элемент в Справочнике Файлы
    НовыйФайлКартинки = Справочники.Файлы.СоздатьЭлемент();
    //в реквизит СправочникаФайлы Файл помещаем выбранную ранее Картинку
    НовыйФайлКартинки.Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Фото));
    Фото = ПоместитьВоВременноеХранилище(НовыйФайлКартинки.Файл.Получить());
    //записываем новый элемент справочника Файлы
    НовыйФайлКартинки.Записать();

    //устанавливаем значение реквизита Картинка Справочника Номенклатура
    Объект.Картинка = НовыйФайлКартинки.Ссылка;
    КонецПроцедуры

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //отображение картинки при открытии формы справочника
    Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");

    //устанавливаем автомасштаб для картинки
    Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
    КонецПроцедуры
```
---
Получилось вытащить картинку из справочника таким путем:

Функция в ОбщемМодуле:

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

    КонецФункции
```

И процедура при изменении Объект.Номенклатура:

```1c
    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)
    Объект.Себестоимость = ОбщийМодуль.ПолучитьСреднююЦену(Объект.Номенклатура);

    Фото = неопределено;
    Объект.Картинка = ОбщийМодуль.ПолучитьКартинкуНоменклатуры(Объект.Номенклатура);
    Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");
    //устанавливаем автомасштаб для картинки
    Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
    КонецПроцедуры
```

Все работает. Если у профессионалов есть какое-то мнение о недостатках этого метода буду благодарен если напишете об этом.
---
Получилось вытащить картинку из справочника таким путем:

Функция в ОбщемМодуле:

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

    КонецФункции
```

И процедура при изменении Объект.Номенклатура:

```1c
    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)
    Объект.Себестоимость = ОбщийМодуль.ПолучитьСреднююЦену(Объект.Номенклатура);

    Фото = неопределено;
    Объект.Картинка = ОбщийМодуль.ПолучитьКартинкуНоменклатуры(Объект.Номенклатура);
    Фото = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");
    //устанавливаем автомасштаб для картинки
    Элементы.Фото.РазмерКартинки = РазмерКартинки.АвтоРазмер;
    КонецПроцедуры
```

Все работает. Если у профессионалов есть какое-то мнение о недостатках этого метода буду благодарен если напишете об этом.
---
УНФ 1.6

```1c
    &НаСервере

    ДвоичныеДанныеКартинки = УправлениеНебольшойФирмойСервер.СсылкаНаДвоичныеДанныеФайла(Файл, УникальныйИдентификатор);

    где

    Возврат РаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл, ДополнительныеПараметры).СсылкаНаДвоичныеДанныеФайла

    где

    СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
```

С работой через ПолучитьНавигационнуюСсылку() не сталкивался.
---
УТ 11.4. Вытащил и записал в файл картинки следующим образом:

```1c
    &НаСервере
    Процедура ВыгрузитьИзображения(ПутьКФайлу)

    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ
    | НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка,
    | НоменклатураПрисоединенныеФайлы.Расширение КАК Расширение,
    | НоменклатураПрисоединенныеФайлы.ВладелецФайла.ФайлКартинки КАК ФайлКартинки
    |ИЗ
    | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы";

    ТаблицаЗначений = Запрос.Выполнить().Выгрузить();

    Для Каждого Строка из ТаблицаЗначений Цикл
    Если ЗначениеЗаполнено(Строка.ФайлКартинки) Тогда
    ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла(Строка.ФайлКартинки);
    ИзображениеНоменклатуры = Новый Картинка(ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла));
    ФайлНаДиске = Новый Файл(ПолучитьИмяВременногоФайла(Строка.Расширение));
    ИзображениеНоменклатуры.Записать(ПутьКФайлу + "/" + ФайлНаДиске.Имя);
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```