Имя: Пароль:
1C
1С v8
Значение поля дерева обработки не обновляется на форме
0 catzilla codzilkin
 
10.10.25
09:37
Всем здравствуйте.
Есть реквизит (не табличная часть) внешней обработки типа Дерево.
Инициализируется программно колонками и строками в обработчике формы "ПриСозданииНаСервере".
Одна из колонок признак развернутости строки дерева.
Есть дерево на форме с добавленными реквизитами, но не всеми что добавлены программно (этого признака нет).

Для дерева в форме есть обработчик "ПередРазворачиванием", в котором делается вызов серверной процедуры и по параметру обработчика "НомерСтроки" устанавливается признак развернутости для дерева из реквизита обработки.
Когда происходит закрытие формы по отладчику видно, что в строке которую развернули, колонка-признак строки дерева стоит ложь.
То есть дерево-реквизит обработки не поменялось, но строка дерева на форме развернулась.
Если после того, как устанавливается признак развернутости, вызывать процедуру ЗначениеВРеквизитФормы то дерево-реквизит обработки меняется. Но не раскрывается строка дерева на форме.
Как сделать чтобы либо дерево-реквизит обработки менялось, либо строка дерева на форме раскрывалась?
1 catzilla codzilkin
 
10.10.25
09:41
&НаСервере
// ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ОбъектНаСервере = РеквизитФормыВЗначение("Объект");
	ОбъектНаСервере.Инициализация();
	ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных");
	
КонецПроцедуры	// ПриСозданииНаСервере

************************************

&НаКлиенте
// ДеревоМетаданныхПередРазворачиванием(Элемент, Строка, Отказ)
//
Процедура ДеревоМетаданныхПередРазворачиванием(Элемент, Строка, Отказ)
	
	ДеревоМетаданныхПередРазворачиваниемИлиСворачиванием(Строка, Истина);
	
КонецПроцедуры	// ДеревоМетаданныхПередРазворачиванием

************************************

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

************************************

&НаСервереБезКонтекста

// ПолучитьСтрокуДереваПоНомеру(Дерево, НомерСтроки) Экспорт
//
Функция ПолучитьСтрокуДереваПоНомеру(Дерево, НомерСтроки) Экспорт
	
	Счетчик = 0;
	
	ПрерватьЦикл = Ложь;
	
	Результат = Неопределено;
	
	КоллекцияСтрок = Дерево.Строки;
	
	Если КоллекцияСтрок.Количество() <> 0 Тогда
		Пока Не ПрерватьЦикл Цикл
			Результат = ПеревыбратьСтроки(КоллекцияСтрок, Счетчик, НомерСтроки, ПрерватьЦикл);
		КонецЦикла;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции	// ПолучитьСтрокуДереваПоНомеру

&НаСервереБезКонтекста

// ПеревыбратьСтроки(КоллекцияСтрок, ТекущийНомер, ИскомыйНомер) Экспорт
//
Функция ПеревыбратьСтроки(КоллекцияСтрок, ТекущийНомер, ИскомыйНомер, ПрерватьЦикл) Экспорт
	
	Для Каждого Строка Из КоллекцияСтрок Цикл
		Если ТекущийНомер = ИскомыйНомер Тогда
			ПрерватьЦикл = Истина;
			
			Возврат Строка;
		Иначе
			ТекущийНомер = ТекущийНомер + 1;
			
			КоллекцияСтрок = Строка.Строки;
			
			Если КоллекцияСтрок.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			Строка = ПеревыбратьСтроки(КоллекцияСтрок, ТекущийНомер, ИскомыйНомер, ПрерватьЦикл);
			
			ПрерватьЦикл = Истина;
			
			Возврат Строка;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции	// ПолучитьСтрокуДереваПоНомеру
2 catzilla codzilkin
 
10.10.25
10:05
Задача стоит программно запоминать и восстанавливать свернутость строк дерева при закрытии/открытии обработки.
3 catzilla codzilkin
 
10.10.25
10:05
Когда жмешь плюсик для раскрытия строки, эта строка активной не становится.
AdBlock убивает бесплатный контент. 1Сергей