Как установить нужную позицию в дереве на управляемой форме, если известен только критерий поиска этой позиции.
Имеется иерархическая структура организации с подразделениями. Имеем форму и дерево на ней, которое эту структуру представляет. Имеется конкретное Подразделение, переданное в форму в качестве параметра. Требуется спозиционировать дерево на это Подразделение.
1С 8.3. Конфигурация ЗУП 2.5 КОРП. Тонкий клиент, управляемая форма.
Найти нужную строку в представлении дерева на сервере - не проблема.
и вуаля, строка найдено, но!... получить её идентификатор не представляется возможным в силу отсутствия у СтрокаДереваЗначений соответствующего метода. А без него не получить идентификатор строки и не передать его на клиент, чтобы спозиционировать моё многострадальное дерево.
"Доктор, что я делаю не так?" (с) анек
Как спозиционировать дерево на нужный мне элемент?
Если что, НайтиПодразделениеВДереве - это самописная ркурсивная функция, которая существует на просторах разных форумов и прекрасно ищет то, что надо.
1С 8.3. Конфигурация ЗУП 2.5 КОРП. Тонкий клиент, управляемая форма.
Найти нужную строку в представлении дерева на сервере - не проблема.
&НаСервере
тДерево = РеквизитФормыВЗначение("Дерево");
ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,тДерево.Строки);
"Доктор, что я делаю не так?" (с) анек
Как спозиционировать дерево на нужный мне элемент?
Если что, НайтиПодразделениеВДереве - это самописная ркурсивная функция, которая существует на просторах разных форумов и прекрасно ищет то, что надо.
Текст функции |
---|
Показать |
Найденные решения
(2) С НайтиСтроки() для "ДеревоЗначений.Строки" - это замечательно, но результат таки не тот, хотя я это запомню на будущее. Спасибо.
За "адаптацию" двойное спасибо. Решение найдено.
За "адаптацию" двойное спасибо. Решение найдено.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПозицияПодразделения=Неопределено;
ПриОткрытииНаСервере(ПозицияПодразделения);
Если ПозицияПодразделения<>Неопределено Тогда
Элементы.Дерево.ТекущаяСтрока=ПозицияПодразделения;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриОткрытииНаСервере(ПозицияПодразделения)
тДерево = РеквизитФормыВЗначение("Дерево");
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПодразделенияОрганизаций.Код КАК Код,
| ПодразделенияОрганизаций.Наименование КАК Наименование,
| ПодразделенияОрганизаций.Ссылка КАК Подразделение
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|ГДЕ
| ПодразделенияОрганизаций.Владелец = &Организация
|
|УПОРЯДОЧИТЬ ПО
| ПодразделенияОрганизаций.Ссылка ИЕРАРХИЯ"
;
Запрос.УстановитьПараметр("Организация",Организация);
тДерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(тДерево,"Дерево");
ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,Дерево.ПолучитьЭлементы());
КонецПроцедуры
&НаСервере
Функция НайтиПодразделениеВДереве(ПодразделениеП,СтрокиДерева)
Для каждого Стр из СтрокиДерева Цикл
Если Стр.Подразделение=ПодразделениеП Тогда // нашлось подразделение
Возврат Стр.ПолучитьИдентификатор();
КонецЕсли;
КонецЦикла;
// на данном уровне нужного подразделения нет, ищем на нижних
Для каждого Стр из СтрокиДерева Цикл
НайденнаяСтрока=НайтиПодразделениеВДереве(ПодразделениеП,Стр.ПолучитьЭлементы());
Если НайденнаяСтрока<>Неопределено Тогда
Возврат НайденнаяСтрока.ПолучитьИдентификатор();
КонецЕсли;
КонецЦикла;
// не повезло, такого подразделения вообще нет
Возврат Неопределено;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) С НайтиСтроки() для "ДеревоЗначений.Строки" - это замечательно, но результат таки не тот, хотя я это запомню на будущее. Спасибо.
За "адаптацию" двойное спасибо. Решение найдено.
За "адаптацию" двойное спасибо. Решение найдено.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПозицияПодразделения=Неопределено;
ПриОткрытииНаСервере(ПозицияПодразделения);
Если ПозицияПодразделения<>Неопределено Тогда
Элементы.Дерево.ТекущаяСтрока=ПозицияПодразделения;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриОткрытииНаСервере(ПозицияПодразделения)
тДерево = РеквизитФормыВЗначение("Дерево");
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ПодразделенияОрганизаций.Код КАК Код,
| ПодразделенияОрганизаций.Наименование КАК Наименование,
| ПодразделенияОрганизаций.Ссылка КАК Подразделение
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|ГДЕ
| ПодразделенияОрганизаций.Владелец = &Организация
|
|УПОРЯДОЧИТЬ ПО
| ПодразделенияОрганизаций.Ссылка ИЕРАРХИЯ"
;
Запрос.УстановитьПараметр("Организация",Организация);
тДерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(тДерево,"Дерево");
ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,Дерево.ПолучитьЭлементы());
КонецПроцедуры
&НаСервере
Функция НайтиПодразделениеВДереве(ПодразделениеП,СтрокиДерева)
Для каждого Стр из СтрокиДерева Цикл
Если Стр.Подразделение=ПодразделениеП Тогда // нашлось подразделение
Возврат Стр.ПолучитьИдентификатор();
КонецЕсли;
КонецЦикла;
// на данном уровне нужного подразделения нет, ищем на нижних
Для каждого Стр из СтрокиДерева Цикл
НайденнаяСтрока=НайтиПодразделениеВДереве(ПодразделениеП,Стр.ПолучитьЭлементы());
Если НайденнаяСтрока<>Неопределено Тогда
Возврат НайденнаяСтрока.ПолучитьИдентификатор();
КонецЕсли;
КонецЦикла;
// не повезло, такого подразделения вообще нет
Возврат Неопределено;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот