Основное изображение в ФормеДокумента ЧекККМ

1. Jelbock 24.12.15 04:48 Сейчас в теме
Здравствуйте. Пытаюсь добавить в ФормуДокумента чека изображение номенклатуры. Т.е. чтобы когда кассир отпикал товар по штрих-коду, он мог увидеть изображение этого товара в каком-то окне. Чтобы сверять товар не по артикулу, а по картинке. Вроде того, что есть в справочнике номенклатуры.
Пытался сделать по аналогии со справочником номенклатуры
// Обновляет содержимое картинки
//
Процедура ПоказатьОсновноеИзображение()

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

КонецПроцедуры
Показать

и
Процедура ОсновноеИзображениеНажатие(Элемент)
	ТекущиеДанныеСписка = ЭлементыФормы.Товары.ТекущиеДанные;
	
	Если ТекущиеДанныеСписка = Неопределено Тогда
		Предупреждение("Укажите в списке элемент номенклатуры!");
		Возврат;
	КонецЕсли;
	
	Если ТекущиеДанныеСписка.ОсновноеИзображение.Пустая() Тогда
		Предупреждение("Основное изображение номенклатуры не задано!");
		Возврат;
	КонецЕсли;
	
	РаботаСФайлами.ОткрытьФормуИзображения(ЭтаФорма, ТекущиеДанныеСписка.ОсновноеИзображение, ТекущиеДанныеСписка.Ссылка);

КонецПроцедуры
Показать


Вылазит ошибка:
{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(1971)}: Поле объекта не обнаружено (ОсновноеИзображение)
РаботаСФайлами.ОткрытьФормуИзображения(ЭтаФорма, ТекущиеДанныеСписка.ОсновноеИзображение, ТекущиеДанныеСписка.Ссылка);


Может кто-то подскажет как связать изображение с Табличным полем с Данными Товары?

"Управление торговлей", редакция 10.3 (10.3.29.1)
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CaptainMorgan 24.12.15 08:27 Сейчас в теме
(1) Сообщение:
{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(1971)}: Поле объекта не обнаружено (ОсновноеИзображение)
РаботаСФайлами.ОткрытьФормуИзображения(ЭтаФорма, ТекущиеДанныеСписка.ОсновноеИзображение, ТекущиеДанныеСписка.Ссылка);

В отладчике поставь точку останова в строке 1971
И проанализируй ТекущиеДанныеСписка
Написано же нет поля ОсновноеИзображение
3. Jelbock 24.12.15 08:38 Сейчас в теме
(2) CaptainMorgan, Я вижу, что нет поля ОсновноеИзображение. Вопрос в том, как его корректно добавить...
4. x_under 13 24.12.15 09:20 Сейчас в теме
(3) Jelbock, в вашем случае ТекущиеДанныеСписка - это строка ТЧ "Товары". Через нее вам надо обратиться к номенклатуре, а потом уже к изображению
ТекущиеДанныеСписка.Номенклатура.ОсновноеИзображение
5. Jelbock 24.12.15 09:58 Сейчас в теме
(4) x_under, Большое спасибо!
Теперь получилась такая ситуация: окно с картинкой пустое, пока на него мышкой не нажмешь. После этого в новом окне открывается "форма данных об изображении" уже с нужной картинкой. Не подскажете, что нужно подправить, чтобы картинка сразу отображалась?
Т.е. в справочнике номенклатуры точно также, при нажатии на картинку появляется "форма данных об изображении", но там изображение выводится сразу (выделил номенклатуру и изображение показывается), а у меня это поле пустое
6. Jelbock 24.12.15 10:08 Сейчас в теме
Видимо что-то в этой части не правильно:

// Обновляет содержимое картинки
//
Процедура ПоказатьОсновноеИзображение()

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

КонецПроцедуры
Показать
7. AlexeyMalko 24.12.15 10:11 Сейчас в теме
может при открытии нудно что то делать с картинкой?
8. Jelbock 24.12.15 10:15 Сейчас в теме
(7) AlexeyMalko, При открытии, по идее, ничего. При выделении номенклатуры - показать картинку.
Видимо, не срабатывает эта строчка, но не пойму почему:
Тогда
            ЭлементыФормы.ОсновноеИзображение.Картинка = ТекущиеДанныеСписка.Номенклатура.ОсновноеИзображение.Хранилище.Получить();
9. Jelbock 24.12.15 10:46 Сейчас в теме
Пробовал через отладчик, в процедуру ПоказатьОсновноеИзображение() вообще не заходит. Попробовал добавить при открытии по аналогии со справочником номенклатуры, вылазит ошибка
{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(652)}: Поле объекта не обнаружено (Изображение)
Если ЭлементыФормы.ДействияФормы.Кнопки[0].Кнопки.Изображение.Пометка Тогда
10. Jelbock 26.12.15 06:03 Сейчас в теме
В общем, вроде бы работает. Делал первый раз, 1С не знаю. Времени потратил кучу, оказалось на 5 мин делов. Поправки и замечания приветствуются)
Оставлю тут, может таким, как я, пригодится.
1. В конфигураторе Документы - ЧекККМ - Формы - ФормаДокумента вставить поле Картинка (я скопировал данное поле, чтобы ничего не настраивать с Справочники - Номенклатура - Формы - Форма списка)
2. Документы - ЧекККМ - Формы - ФормаДокумента - перейти на вкладку Модуль.
Объявить переменную
Перем мПустаяКартинка;

3. Вставить процедуру
// Обновляет содержимое картинки

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

КонецПроцедуры
Показать

4. В конец процедуры ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) добавить строку
ПоказатьОсновноеИзображение();
. У меня получилось так:
// Производит заполнение документа переданными из формы подбора данными.
//
// Параметры:
//  ТабличнаяЧасть    - табличная часть, в которую надо добавлять подобранную позицию номенклатуры;
//  ЗначениеВыбора    - структура, содержащая параметры подбора.
//
Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт

	Перем СпособЗаполненияЦен, ВалютаЦены;
	Перем Номенклатура, ЕдиницаИзмерения, Количество, Цена, Характеристика, Серия;

	Если РаботаСДиалогами.ПроверитьЧтоКачествоВСтруктуреПодбораНеУдовлетворяетУсловиям­Подбора(ЗначениеВыбора,
	   Истина) Тогда
		Возврат;
	КонецЕсли;

	// Получим параметры подбора из структуры подбора.
	ЗначениеВыбора.Свойство("СпособЗаполненияЦен", СпособЗаполненияЦен);
	ЗначениеВыбора.Свойство("ВалютаЦены",          ВалютаЦены);
	ЗначениеВыбора.Свойство("Номенклатура",        Номенклатура);
	ЗначениеВыбора.Свойство("ЕдиницаИзмерения",    ЕдиницаИзмерения);
	ЗначениеВыбора.Свойство("Количество",          Количество);
	ЗначениеВыбора.Свойство("Цена",                Цена);
	ЗначениеВыбора.Свойство("Характеристика",      Характеристика);
	ЗначениеВыбора.Свойство("Серия",               Серия);

	// Пересчитаем цену в валюту регламентированного учета
	СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(мВалютаРегламентированногоУчета, Дата);
	Цена           = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, мВалютаРегламентированногоУчета, СтруктураКурса.Курс, СтруктураКурса.Кратность, Дата);

	// Ищем выбранную позицию в таблице подобранной номенклатуры.
	//  Если найдем - увеличим количество; не найдем - добавим новую строку.
	СтруктураОтбора = Новый Структура();
	СтруктураОтбора.Вставить("Номенклатура",               Номенклатура);
	СтруктураОтбора.Вставить("ЕдиницаИзмерения",           ЕдиницаИзмерения);
	СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", Характеристика);
	СтруктураОтбора.Вставить("СерияНоменклатуры"         , Серия);
	
	Если СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоРозничнымЦенам Тогда
		СтруктураОтбора.Вставить("Цена", Цена);
	КонецЕсли;
	
	СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора);
	СуммаСтроки = 0;
	Если СтрокаТабличнойЧасти <> Неопределено Тогда

		// Нашли, увеличиваем количество в первой найденной строке.
		СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;

		Если Не ПересчитатьАвтоматическиеСкидки() Тогда
			ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
		КонецЕсли;
	Иначе

		// Не нашли - добавляем новую строку.
		СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
		СтрокаТабличнойЧасти.Номенклатура               = Номенклатура;
		СтрокаТабличнойЧасти.Количество                 = Количество;
		СтрокаТабличнойЧасти.ЕдиницаИзмерения           = ЕдиницаИзмерения;
		СтрокаТабличнойЧасти.Коэффициент                = ЕдиницаИзмерения.Коэффициент;
		СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Характеристика;
		СтрокаТабличнойЧасти.СерияНоменклатуры          = Серия;
		СтрокаТабличнойЧасти.Цена                       = Цена;

		Если Не ПересчитатьАвтоматическиеСкидки() Тогда
			ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
		КонецЕсли;

		// Ввод состава набора
		СтрокаТабличнойЧасти.КлючСтроки = УправлениеЗапасами.ПолучитьНовыйКлючСтроки(ЭтотОбъект);
		УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);
	КонецЕсли;

	ТабличнаяЧастьИмя = "Товары";
	ЭлементыФормы[ТабличнаяЧастьИмя].ТекущаяСтрока = СтрокаТабличнойЧасти;
	ЭлементыФормы[ТабличнаяЧастьИмя].ТекущаяКолонка = ЭлементыФормы[ТабличнаяЧастьИмя].Колонки["Количество"];

	ПоказатьОсновноеИзображение();

КонецПроцедуры // ОбработкаПодбора()
Показать


5. В процедуру ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти) добавить в конец
ПоказатьОсновноеИзображение();


// Производит заполнение и установку необходимых полей при изменении товара в табличной части.
// Вызывается из:
//  ТоварыНоменклатураПриИзменении()
//  ВнешнееСобытие()
//
Процедура ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти)

	// Заполнение цены зависит от розничности операции.
	ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект,
	                                    мВалютаРегламентированногоУчета, мВалютаРегламентированногоУчета, , Истина);

	// Установим способ редактирования цены.
	УстановитьСвойстваПоляВводаЦены(СтрокаТабличнойЧасти.Номенклатура);

	ПоказатьОсновноеИзображение();
	
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот