Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вывод изображения в поле картинки
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Fabri
Хорошего времени суток всем. Столкнулся с такой проблемой (может где-то было на форуме, но не нашел ответ именно на такой вопрос).
Имеется обработка, в ней табличная часть с реквизитом - Номенклатура - тип Номенклатура.Ссылка.И
Есть реквизит (Строка) на форме - Поле картинки.
Необходимо при активизации строки выводить в поле картинки основное изображение номенклатуры.

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


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

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

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

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

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

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ВыборкаДетальныеЗаписи.Картинка;    
    КонецЦикла;
    
    Возврат Неопределено;
    
КонецФункции


Аналогично результат 0. В отладчике смотрю - ссылка вроде возвращается - но все не то.
В чем может быть проблема? Спасибо.
Vofka
необходимо зарегистрироваться для просмотра ссылки смотрели?
Fabri
Да, смотрел. Там есть интересный код:
&НаСервере
Процедура ОбновитьКартинкуСервер()
    Если ЗначениеЗаполнено(Объект.ФайлКартинкиБлюда) Тогда
        КартинкаБлюда = ПолучитьНавигационнуюСсылку(Объект.ФайлКартинкиБлюда.Ссылка, "ФайлКартинки");
    КонецЕсли;
КонецПроцедуры


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

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


При этом у меня 1С Предприятие вообще зависает и вылетает. 09000000.gif
logist
Цитата(Fabri @ 22.11.13, 0:09) необходимо зарегистрироваться для просмотра ссылки
Объект.Картинка

Картинка должна отображаться в реквизите ФОРМЫ с типом строка. Не пытайтесь запихнуть ее в объект.
Fabri
Поставили параметр формы (Строка) и на форме поле капртинки, все равно результата - 0. Странно почему при получении ТекущиеДанные табличной части (в управляемом приложении) возвращаются просто ссылка Номенклатуры, без её реквизитов, т.е. если указать Номенклатура.Родитель или Номенклатура.ФайлКартинки - сразу ошибка.
Что интересно, обработку всю написал без проблем, это аналог моей обработки УстановкаИзображенийНоменклатуры (которая выставленна на данном форуме) только для УТ 11.1 (т.е. для управляемого приложения), все работает без проблем, втягиваются изображения, удаляются предыдущие по необходимости и т.д., а вот ерунда вывести картинку номенклатуры в поле картинки - нивкакую. sad.gif
logist
Цитата(Fabri @ 22.11.13, 21:11) необходимо зарегистрироваться для просмотра ссылки
Поставили параметр формы

Не параметр а Реквизит(!)

Цитата(Fabri @ 22.11.13, 21:11) необходимо зарегистрироваться для просмотра ссылки
Странно почему при получении ТекущиеДанные табличной части

Потому, что это управляемое приложение. Учите матчасть - НаКлиенте недоступны реквизиты ссылок.
Fabri
Да, сорри, реквизит формы.
Потому, что это управляемое приложение. Учите матчасть - НаКлиенте недоступны реквизиты ссылок.

Выше писал,
Цитата
Сделал аналогично у себя, т.е. просто вывел в процедуру &НаСервере
При этом у меня 1С Предприятие вообще зависает и вылетает.

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

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

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

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

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

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаДетальныеЗаписи.Картинка,ЭтаФорма).СсылкаНаДвоичныеДанныеФайла;    
    КонецЦикла;
    
    Возврат Неопределено;
    
КонецФункции


Т.е. Использовал стандартную функцию общего модуля ПрисоединенныеФайлы.ПолучитьДанныеФайла которая используется при выводе изображения в форме элемента справочника Номенклатура
P.S. Существует данная функция и модуль только в кофигурации УТ 11.1, в УТ11.0 - её нет.
logist
У вас в таблице номенклатура уже ссылка, зачем вы получаете ее еще раз...

&НаСервере
Функция ПолучитьКартинку(Номенклатура)
    Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(Номенклатура.ФайлКартинки,ЭтаФорма).СсылкаНаДвоичныеДанныеФайла;    
КонецФункции
Sharki
храните картинку в хранилище значений, получите картинку выборкой и получайте от хранилища значений. Поместите во временное хранилище и строку выводите как картинку
Например
&НаСервере
Процедура ВывестиКартинкуПечати()

    лОбъект = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Производители"));
    КартинкаПечати = лОбъект.Печать.Получить();
    Если ТипЗнч(КартинкаПечати) = Тип("Картинка") Тогда
        КартинкаАдрес = ПоместитьВоВременноеХранилище(КартинкаПечати, Новый УникальныйИдентификатор)
    КонецЕсли;

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

где КартинкаАдрес реквизит формы тип строка, Картинка печати - реквизит справочника с типом хранилище значений
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.