Версия для печати темы (https://pro1c.org.ua/index.php?s=9e31d42fbe9885087557196629ae58f3&showtopic=15641)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Вывод изображения в поле картинки

Автор: Fabri 21.11.13, 22:01

Хорошего времени суток всем. Столкнулся с такой проблемой (может где-то было на форуме, но не нашел ответ именно на такой вопрос).
Имеется обработка, в ней табличная часть с реквизитом - Номенклатура - тип Номенклатура.Ссылка.И
Есть реквизит (Строка) на форме - Поле картинки.
Необходимо при активизации строки выводить в поле картинки основное изображение номенклатуры.

Вот код:

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


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

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

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

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

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

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

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


Аналогично результат 0. В отладчике смотрю - ссылка вроде возвращается - но все не то.
В чем может быть проблема? Спасибо.

Автор: Vofka 21.11.13, 22:19

http://pro1c.org.ua/index.php?showtopic=15489 смотрели?

Автор: Fabri 21.11.13, 23:09

Да, смотрел. Там есть интересный код:

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


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

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


При этом у меня 1С Предприятие вообще зависает и вылетает. 09000000.gif

Автор: logist 22.11.13, 8:50

Цитата(Fabri @ 22.11.13, 0:09) *
Объект.Картинка

Картинка должна отображаться в реквизите ФОРМЫ с типом строка. Не пытайтесь запихнуть ее в объект.

Автор: Fabri 22.11.13, 20:11

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

Автор: logist 22.11.13, 20:22

Цитата(Fabri @ 22.11.13, 21:11) http://pro1c.org.ua/index.php?act=findpost&pid=78279
Странно почему при получении ТекущиеДанные табличной части

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

Автор: Fabri 22.11.13, 20:28

Да, сорри, реквизит формы.

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

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


Автор: Fabri 23.11.13, 11:07

Нет никаких идей по поводу решения вопроса?

Автор: Fabri 24.11.13, 9:49

Решил вопрос таким спобосом:

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

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

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

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

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

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

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


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

Автор: logist 25.11.13, 8:59

У вас в таблице номенклатура уже ссылка, зачем вы получаете ее еще раз...

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

Автор: Sharki 24.12.13, 14:33

храните картинку в хранилище значений, получите картинку выборкой и получайте от хранилища значений. Поместите во временное хранилище и строку выводите как картинку
Например

&НаСервере
Процедура ВывестиКартинкуПечати()

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

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

где КартинкаАдрес реквизит формы тип строка, Картинка печати - реквизит справочника с типом хранилище значений

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua