Капитально об программе 1С 8.0-8.3-8.4, 7.7

ИзменениеТекстаРедактирования не работает

В управляемом приложении в таблице формы поле с типом:  Справочник.Номенклатура, Строка(Составное поле)  не отрабатывает событие.

Ни очистка, ни вставка — как-будто вообще отключено, возможно связано с отключенным «Выбирать тип».

Решение

Воспользоваться событием «Автоподбор» — оно срабатывает не только на ссылочные типы.

Также имеет возможность сразу генерировать список выбора (что и требовалось в событии обработки выбора)

Получилось вот так:

&НаКлиенте
Процедура НазначенияНазначениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	Если Ожидание<>0 и Текст<>"" Тогда
		ДлинаТекста = СтрДлина(Текст);
		Если ДлинаТекста >3 Тогда
			РезультатПоиска = ПоискНоменклатуры(Текст,ВидЦены);
			АдресАвтоПоиска = ПоместитьВоВременноеХранилище(РезультатПоиска,?(АдресАвтоПоиска ="" или ЭтоАдресВременногоХранилища(АдресАвтоПоиска)= Ложь,Новый УникальныйИдентификатор,АдресАвтоПоиска));
	
			Если РезультатПоиска.Количество>0 тогда
				СтандартнаяОбработка = Ложь;
				ДанныеВыбора = Новый СписокЗначений;
					
					Для каждого Эл из РезультатПоиска.Цены Цикл
						ДанныеВыбора.Добавить(Эл.Наименование+" ",Эл.Наименование+" = "+Эл.Цена+" "+эл.Валюта);
						
					КонецЦикла;
				
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;	

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

Обрабатываются текст с длиной более 3 символов, вызывается служебная функция ПоискНоменклатуры(), которая возвращает структуру с номенклатурой и ценами.

Далее, в событии «ПриИзменении» устанавливается цена в этой же строке.

&НаКлиенте
Процедура НазначенияНазначениеПриИзменении(Элемент)
	тд = Элементы.Назначения.ТекущиеДанные;
        Если тд = Неопределено Тогда 
            Возврат
        КонецЕсли;
	Если ЭтоАдресВременногоХранилища(АдресАвтоПоиска) тогда 
		РезультатПоиска = ПолучитьИзВременногоХранилища(АдресАвтоПоиска);
		Для каждого Эл из РезультатПоиска.Цены Цикл
			Если тд.Назначение = (Эл.Наименование+" ") Тогда
				тд.Цена = Эл.Цена;
				//Не работает установка
				//Длина = СтрДлина(Эл.Наименование+" ");
				//Элемент.УстановитьГраницыВыделения(Длина,Длина);
				Прервать;
			КонецЕсли;	
		КонецЦикла;	
	КонецЕсли;
КонецПроцедуры