Почти все здесь получается, даже активизация реквизита подстановки, но:
Если не отключить родительское окно, то при нажатии на кнопку выбора подстановочного реквизита никакой реакции, мало того - не срабатывает процедура
"ПриНажатии ЛевойКнопки". Почему и если нужно - то как не отключая род.окно с этим бороться?
Аттач опять артачится, поэтому код:
Перем Подставка;
//_____________________________________________________________________________
Функция Атрибут(Атр)
Возврат РасшФормы.ПолучитьАтрибут(Атр);
КонецФункции //Дерево
//*******************************************
Процедура Сформировать()
КонецПроцедуры
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная
ТЗ.НоваяКолонка("Уровень");
ТЗ.НоваяКолонка("Пиктограмма");
ТЗ.НоваяКолонка("Ветка",,,,"",6);
ТЗ.ВыводитьПиктограммы("Пиктограмма",);
ТЗ.НоваяКолонка("Наименование","Строка",50);
ТЗ.НоваяКолонка("Цена","Число",12,2,,12);
ТЗ.НоваяКолонка("Срок","Дата",,,,9);
Для А = 1 По 7 Цикл
ТЗ.НоваяСтрока();
ТЗ.Наименование = "Товар "+Строка(А);
ТЗ.Цена = 100*А;
ТЗ.Срок = ДобавитьМесяц('01.01.2001',А);
КонецЦикла;
Форма.ТипаСтрока.Видимость(0);
Форма.ТипаЧисло.Видимость(0);
РасшФормы.УстановитьФорму(Форма);
КонецПроцедуры //ПриОткрытии
//_____________________________________________________________________________
Процедура ПослеОткрытия() //предопределенная 1С++
Атрибут("ТЗ").ПерехватитьТаблицуЗначений();
ТЗ.УстановитьПараметрыКолонки("Цена",,,,,,"Ч012.2");
ТЗ.УстановитьПараметрыКолонки("Срок",,,,,9);
Атрибут("ТЗ").ОбновитьДерево();
КонецПроцедуры //ПослеОткрытия
//_____________________________________________________________________________
Процедура ПоТЗ()
тс = Атрибут("ТЗ").ТекущаяСтрокаДерева();
Если тс = 0
Тогда
Возврат;
КонецЕсли;
_тк = Атрибут("ТЗ").ТекущаяКолонкаДерева();
тк = Атрибут("ТЗ").ПолучитьНомерКолонкиТаблицыЗначений(_ТК);
ТекЗнач = Атрибут("ТЗ").ЗначениеИзДерева(тс,тк);
Тип = "";
ТЗ.ПолучитьПараметрыКолонки(тк,Тип);
Подставка = "Типа" + Тип;
Попытка
Атр = РасшФормы.ПолучитьАтрибут(Подставка);
Исключение
Возврат;
КонецПопытки;
в = ""; л = ""; н = ""; п = "";
РасшФормы.ПолучитьКоординатыТекущейЯчейки("ТЗ",в,л,н,п);
Атр.УстановитьКоординаты(л,в,п-л,н-в);
Атр.Рамка = 0;
Атр.РодительскоеОкно = Форма.ТЗ;
Форма.ПолучитьАтрибут(Подставка).Видимость(1);
Атр.Значение = ?(Подставка="ТипаСтрока","***",100)+ТекЗнач;//для контроля
Сервис.ЭмулироватьКлавиатуру("{TAB}");
Атр.РодительскоеОкно = 0;
КонецПроцедуры //ПоТЗ
//_____________________________________________________________________________
Процедура ПриНажатииКнопкиКлавиатуры(КК,А,Ш,К,С,ФСО)
Если КК = 27
Тогда
ФСО=0;
КонецЕсли;
Акт = Форма.АктивныйЭлемент();
Если Акт = "ТЗ"
Тогда
ИначеЕсли Акт = Подставка
Тогда
Если (КК = 13)
Или (КК = 27)
Тогда
Атр = РасшФормы.ПолучитьАтрибут(Подставка);
Атр.РодительскоеОкно = 0;
Форма.ПолучитьАтрибут(Подставка).Видимость(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры //ПриНажатииКнопкиКлавиатуры(КК,А,Ш,К,С,ФСО)
//_____________________________________________________________________________
Процедура ПриНажатииЛевойКнопки(сост,х,у,фсо)
сообщить("Что нибудь");
КонецПроцедуры //ПриНажатииЛевойКнопки(сост,х,у,фсо)
Подстановочные реквизиты: "ТипаСтрока", "ТипаЧисло" и "ТипаДата". Порядок обхода должен быть немного настроен - сначала ТЗ, потом подряд подставки
P.S.Манипуляции с род.окном для этого примера.