Добавление картинки товара в РМК. Розница 3.0

Клиент хочет, чтобы в РМК показывалась картинка текущего товара.

В форме списка картинка уже показывается, поэтому нужно просто грамотно перенести в расширение формы РМК.

При создании формы создаю реквизит и элемент для картинки:

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

		//Картинка		
		Привязка = Элементы.ГруппаСдача;   
		Элемент = ЭтаФорма.Элементы.Добавить("дор_АдресКартинки", Тип("ПолеФормы"), Привязка.Родитель);
		Элемент.Вид = ВидПоляФормы.ПолеКартинки;
		Элемент.ПутьКДанным = "дор_АдресКартинки";
		Элемент.АвтоМаксимальнаяШирина = ложь;
		Элемент.АвтоМаксимальнаяВысота = ложь;
		Элемент.Высота = 10;
		Элемент.РазмерКартинки = РазмерКартинки.Пропорционально;
		Элемент.ПоложениеЗаголовка =ПоложениеЗаголовкаЭлементаФормы.Нет;
		
КонецПроцедуры

Функцию получения изображения копирую из процедуры ОбновитьИзображение формы списка номенклатуры, только вывожу не галерею картинок, а одну основную картинку.

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

Ну и само отображение картинки происходит при активизации строки. Важно отметить, что из активизации строки нельзя вызывать сервер, поэтому используется обработчик ожидания.

&НаКлиенте
Процедура M_ТоварыПриАктивизацииСтрокиПосле(Элемент)
	ПодключитьОбработчикОжидания("дор_ТоварыПриАктивизацииСтрокиПослеОбработчикОжидания", 0.1, Истина);
КонецПроцедуры

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

Выглядит это примерно так:

Конечно, было бы неплохо еще убирать картинку после пробития или отмены чека, но это потом.

Среда: Розница 3.0.3.147 Объем: 1 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *