Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Прямой ввод в перехваченую ТЗ (число прочтений - 2622 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Прямой ввод в перехваченую ТЗ
02. Сентября 2006 :: 06:48
Печать  
Почти все здесь получается, даже активизация реквизита подстановки, но:
Если не отключить родительское окно, то при нажатии на кнопку выбора подстановочного реквизита никакой реакции, мало того - не срабатывает процедура
"ПриНажатии ЛевойКнопки". Почему и если нужно - то как не отключая род.окно с этим бороться?
Аттач опять артачится, поэтому код:
Код
Выбрать все
Перем Подставка;
//_____________________________________________________________________________
Функция Атрибут(Атр)
	Возврат РасшФормы.ПолучитьАтрибут(Атр);
КонецФункции //Дерево
//*******************************************
Процедура Сформировать()

КонецПроцедуры  
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная
	ТЗ.НоваяКолонка("Уровень");
	ТЗ.НоваяКолонка("Пиктограмма");
	ТЗ.НоваяКолонка("Ветка",,,,"",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.Манипуляции с род.окном для этого примера.
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Прямой ввод в перехваченую ТЗ
Ответ #1 - 08. Сентября 2006 :: 11:12
Печать  
Перехваченная ТЗ - плохой родитель:
1. Если на подстановочном атрибуте есть кнопка выбора - она перестает работать.
2. Не возвращается измененое значение подстановочного атрибута.
Из этого выводы:
1. После вывода подстановочного атрибута отключать РодительскоеОкно.
2. Формулу ввода нового значения в ячейку ТЗ помещать на форму подстановочного атрибута.
3. Команды по выполнению из процедуры ПриНажатииКнопкиКлавиатуры() в процедуру ПослеНажатияКнопкиКлавиатуры().
В результате получилось. Изменил методику АльФа по прямому вводу значений в ТЗ с поправкой на перехваченную таблицу и результат:
  

STVeditor.zip ( 2 KB | Загрузки )

Константин
Наверх
 
IP записан
 
bsa
Junior Member
**
Отсутствует


Не профессионал но и не
любитель...

Сообщений: 27
Местоположение: Одесса
Зарегистрирован: 20. Июня 2006
Пол: Мужской
Re: Прямой ввод в перехваченую ТЗ
Ответ #2 - 18. Октября 2006 :: 12:49
Печать  
Интересно, что при работе с обычной ТЗ, получаем несколько иной результат:
1. Объект Атрибут объявлен как модульная переменная.
1.1. Если вообще не очищать свойство РодительскоеОкно для атрибута редактирования значений ТЗ, то имеет место БАГ: реквизит высвечивается всегда в той ячейке, в которой он появился первый раз.
1.2. Если вообще очищать свойство РодительскоеОкно сразу после активизации реквизита редактирования значений ТЗ, то этот реквизит не виден: имеет место активизация текущей ячейки.
1.3. Если же очищать свойство РодительскоеОкно в т.н. момент окончания редактирования (быть реализовано может по разному), то все работает нормально.
2. Объект Атрибут объявлен как локальная переменная метода.
п.1.1 не работает, т.к. Объект - локальная переменная. п.1.2,1.3. работают также.
Пример в пристегнутой обработке - попробуйте вводить строки в ТЗ с разными вариантыми предустановок на форме.
И еще, свойство Рамка объекта Атрибут должно быть установлено ДО установки свойства РодительскоеОкно, иначе оно просто не срабатывает. Возможно это касается и других подобных свойств объекта Атрибут.
  

EditTV_001.zip ( 12 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать