Хорошего времени суток всем. Столкнулся с такой проблемой (может где-то было на форуме, но не нашел ответ именно на такой вопрос).
Имеется обработка, в ней табличная часть с реквизитом - Номенклатура - тип Номенклатура.Ссылка.И
Есть реквизит (Строка) на форме - Поле картинки.
Необходимо при активизации строки выводить в поле картинки основное изображение номенклатуры.
Вот код:
&НаКлиенте
Процедура СписокИзмененийПриАктивизацииСтроки(Элемент)
Если Объект.СписокИзменений.Количество()>0 Тогда //СписокИзменений - табличная часть
ТекущиеДанныеСписка = Элементы.СписокИзменений.ТекущиеДанные;
Объект.Картинка = ПолучитьНавигационнуюСсылку(ТекущиеДанныеСписка.Номенклатура.ФайлКартинки); //Где файл картинки - элемент справочника НоменклатураПрисоединенныеФайлы
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокИзмененийПриАктивизацииСтроки(Элемент)
Если Объект.СписокИзменений.Количество()>0 Тогда
ТекущиеДанныеСписка = Элементы.СписокИзменений.ТекущиеДанные;
Объект.Картинка = ПолучитьНавигационнуюСсылку(ПолучитьКартинку(ТекущиеДанныеСписка.Номенклатура));
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьКартинку(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ФайлКартинки КАК Картинка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Номенклатура);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.Картинка;
КонецЦикла;
Возврат Неопределено;
КонецФункции
http://pro1c.org.ua/index.php?showtopic=15489 смотрели?
Да, смотрел. Там есть интересный код:
&НаСервере
Процедура ОбновитьКартинкуСервер()
Если ЗначениеЗаполнено(Объект.ФайлКартинкиБлюда) Тогда
КартинкаБлюда = ПолучитьНавигационнуюСсылку(Объект.ФайлКартинкиБлюда.Ссылка, "ФайлКартинки");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокИзмененийПриАктивизацииСтроки(Элемент)
Если Объект.СписокИзменений.Количество()>0 Тогда
//ТекущиеДанныеСписка = Элементы.СписокИзменений.ТекущиеДанные;
//Объект.Картинка = ПолучитьНавигационнуюСсылку(ПолучитьКартинку(ТекущиеДанныеСписка.Номенклатура));
ПолучитьКартинкуСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьКартинкуСервер()
ТекущиеДанныеСписка = Элементы.СписокИзменений.ТекущиеДанные;
Объект.Картинка = ПолучитьНавигационнуюСсылку(ТекущиеДанныеСписка.Номенклатура.Ссылка,"ФайлКартинки");
КонецПроцедуры
Поставили параметр формы (Строка) и на форме поле капртинки, все равно результата - 0. Странно почему при получении ТекущиеДанные табличной части (в управляемом приложении) возвращаются просто ссылка Номенклатуры, без её реквизитов, т.е. если указать Номенклатура.Родитель или Номенклатура.ФайлКартинки - сразу ошибка.
Что интересно, обработку всю написал без проблем, это аналог моей обработки УстановкаИзображенийНоменклатуры (которая выставленна на данном форуме) только для УТ 11.1 (т.е. для управляемого приложения), все работает без проблем, втягиваются изображения, удаляются предыдущие по необходимости и т.д., а вот ерунда вывести картинку номенклатуры в поле картинки - нивкакую.
Да, сорри, реквизит формы.
Потому, что это управляемое приложение. Учите матчасть - НаКлиенте недоступны реквизиты ссылок.
Нет никаких идей по поводу решения вопроса?
Решил вопрос таким спобосом:
&НаКлиенте
Процедура СписокИзмененийПриАктивизацииСтроки(Элемент)
Если Объект.СписокИзменений.Количество()>0 Тогда
ТекДанные=Элементы.СписокИзменений.ТекущиеДанные;
ЭтаФорма.Изображение = ПолучитьКартинку(ТекДанные.Номенклатура);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьКартинку(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ФайлКартинки КАК Картинка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Номенклатура);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаДетальныеЗаписи.Картинка,ЭтаФорма).СсылкаНаДвоичныеДанныеФайла;
КонецЦикла;
Возврат Неопределено;
КонецФункции
У вас в таблице номенклатура уже ссылка, зачем вы получаете ее еще раз...
&НаСервере
Функция ПолучитьКартинку(Номенклатура)
Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(Номенклатура.ФайлКартинки,ЭтаФорма).СсылкаНаДвоичныеДанныеФайла;
КонецФункции
храните картинку в хранилище значений, получите картинку выборкой и получайте от хранилища значений. Поместите во временное хранилище и строку выводите как картинку
Например
&НаСервере
Процедура ВывестиКартинкуПечати()
лОбъект = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Производители"));
КартинкаПечати = лОбъект.Печать.Получить();
Если ТипЗнч(КартинкаПечати) = Тип("Картинка") Тогда
КартинкаАдрес = ПоместитьВоВременноеХранилище(КартинкаПечати, Новый УникальныйИдентификатор)
КонецЕсли;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua