Обойти дерево значений одним циклом

Обход дерева значений на клиенте

Подскажите, пожалуйста, как обойти дерево значений на клиенте.

У меня в серверной процедуре обсчитываются итоги. После этого я используя метод ЗначениеВРеквизитФормы(Дерево, «ДеревоЗначений») заполняю дерево на форме. При этом оно становится свернутым.

А я не хочу, чтоб оно сворачивалось. Я пробывал обойти его на клиенте после это и развернуть, но так не получается(нет подходящих методов)

ЭлементыДерева = Дерево.ПолучитьЭлементы(); Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Элементы.Дерево.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); КонецЦикла;

Спасибо, но это не то. У меня многоуровненовое дерево.

То есть .получитьэлементы() возвращает только корневую коллекцию строк. А в дочерние я попасть не могу.

ЭлементыДерева = Дерево.ПолучитьЭлементы(); Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Элементы.Дерево.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); ЭлементыУр2 = ЭлементДерева.ПолучитьЭлементы(); Для Каждого ЭлементУр2 Из ЭлементыУр2 Цикл Элементы.Дерево.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); ЭлементыУр3 = ЭлементДерева.ПолучитьЭлементы(); . КонецЦикла; КонецЦикла;

Спасибо большое. Получилось, написал в итоге рекурсивные процедуры. Одна запоминает какие развернуты были узлы, потом на сервере процедура пересчитывает итоги, и третья раскрывает узлы, какие были раскрыты до пересчета. Может кому пригодится код:

&НаКлиенте Процедура ДеревоЗначенийСуммаПриИзменении(Элемент) соотвКолонок = Новый Соответствие; соотвКолонок.Вставить("Сумма"); РазвернутыеСтроки = Новый Соответствие(); КоличествоСтрок = 0; ПроверитьСвернутостьДерева(ДеревоЗначений, РазвернутыеСтроки, КоличествоСтрок); ПосчитатьНаСервере(соотвКолонок); УстановитьРазвернутостьДерева(ДеревоЗначений, РазвернутыеСтроки, КоличествоСтрок); КонецПроцедуры &НаКлиенте Процедура ПроверитьСвернутостьДерева(пДеревоЗначений, РазвернутыеСтроки, КоличествоСтрок) ЭлементыДерева = пДеревоЗначений.ПолучитьЭлементы(); КоличествоСтрок = КоличествоСтрок + 1; Если ЭлементыДерева.Количество() = 0 Тогда Возврат КонецЕсли; Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Идентификатор = ЭлементДерева.ПолучитьИдентификатор(); РазвернутыеСтроки.Вставить(Идентификатор, Элементы.ДеревоЗначений.Развернут(Идентификатор)); ПроверитьСвернутостьДерева(ЭлементДерева, РазвернутыеСтроки, КоличествоСтрок); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура УстановитьРазвернутостьДерева(пДеревоЗначений, РазвернутыеСтроки, КоличествоСтрок) ЭлементыДерева = пДеревоЗначений.ПолучитьЭлементы(); Если ЭлементыДерева.Количество() = 0 Тогда Возврат КонецЕсли; Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Идентификатор = ЭлементДерева.ПолучитьИдентификатор(); Если РазвернутыеСтроки.Получить(Идентификатор - КоличествоСтрок + 1) = Истина Тогда Элементы.ДеревоЗначений.Развернуть(Идентификатор); КонецЕсли; УстановитьРазвернутостьДерева(ЭлементДерева, РазвернутыеСтроки, КоличествоСтрок); КонецЦикла; КонецПроцедуры

Однако если вы хотите, что бы состояние развернутости запоминалось до пересчета итогов, и восстанавливалось после, то это уже совсем другая задача, которую можно решить примерно так, как вы написали в (5). Но только не совсем так, потому что так как вы написали, будет работать не всегда. Например, если пользователь будет сначала интерактивно заполнять дерево в хаотичном порядке, т.е. добавлять элементы, то в одну группу то в другую, а потом запустится процедура пересчета итогов, то дерево у вас раскроется не правильно, т.е. не так как было до пересчета. Произойдет это потому, что при хаотичном порядке заполнения дерева, идентификаторы строк будут присвоены в порядке их добавления, а после того, как будет выполнен метод ЗначениеВРеквизитФормы, идентификаторы строк присвоятся заново. И помимо того, что их нумерация увеличится на количество элементов в дереве, она еще будет заново упорядочена. И в этом случае никакое «Идентификатор — КоличествоСтрок + 1», уже не поможет. Т.к. например, строке с идентификатором «3» при количестве строк равным 10, не обязательно будет присвоен идентификатор «12», ей вполне может быть присвоен идентификатор с другим номером, например «15». Можете проверить.
Конечно, если у вас не происходит интерактивной работы пользователя с деревом, к примеру, если оно у вас заполняется программно и всегда по порядку, или изначально заполняется методом ЗначениеВРеквизитФормы, то тогда описанный вами способ будет работать.

Читайте также:  Из дерева заготовить древесину

(7) VBod, да все верно. Я тоже заметил такую особенность, поэтому и пришлось говнокодить как «Идентификатор — КоличествоСтрок + 1». Но другого способа не нашел.

а что делать в этом случае?

Например, если пользователь будет сначала интерактивно заполнять дерево в хаотичном порядке, т.е. добавлять элементы, то в одну группу то в другую, а потом запустится процедура пересчета итогов, то дерево у вас раскроется не правильно, т.е. не так как было до пересчета

Пользователи захотели сами править дерево 🙂

(9) mr_virtus, придется запоминать все развернутые строки, но только делать это не по идентификатору т.к. он меняется, а по значениям каких-либо ключевых полей (уникальных для каждой строки дерева). Потом выполняем процедуру на сервере, а затем снова разворачиваем строки. Для этого после загрузки дерева обратно на клиента, ищем нужную строку в дереве на сервере, и получаем ее индекс (не идентификатор). Затем по этому индексу, т.к. они одинаковые и на сервере и на клиенте, через метод

ДеревоНаКлиенте.Получить(ИндексСтрокиНаСервере)

получаем строку в дереве на клиенте, и разворачиваем ее. Только не забудьте, что индекс уникален только в пределах одного уровня дерева, поэтому получение строки на клиенте по индексу, нужно производить, находясь на соответствующем уровне дерева.

Источник

1С 8.x : Как обойти, перебрать дерево значений?

Распечатать

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=» D:ВашаБаза1с77″ ; Пользователь= Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» . https://helpf.pro/uploads/img Google maps : вывод точек на карту и режим панорамы 8
В отличие от яндекс карт в GMaps можно использовать панорамы — за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих

Читайте также:  Маски из дерева для начинающих

Еще в этой же категории

Примеры работы с Деревом значений в УП 11
Так как работа с ДеревомЗначений и ТаблицейЗначений в данном контексте практически не отличается, в примере будет использоваться ДеревоЗначений, все тоже самое за исключением иерархии применимо и к ТаблицеЗначений. Как известно, в платформе 1С 8.1 н Преобразование дерева значений в таблицу значений и обратно 6
Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно. Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее Как в дереве значений строку перекинуть в другой родитель? 5
Процедура ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НовыйРодитель, Уровень = 0) Если Уровень = 0 Тогда НоваяСтрока = НовыйРодитель.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока); ПереместитьСтрокуДерева(Де Как Свернуть, Развернуть узлы Дерева значений на форме? 4
Как программно свернуть/развернуть дерево значений на управляемой форме? Желательно НаКлиенте. КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы(); //Свернуть дерево Для Каждого Строка Из КоллекцияЭлементовДерева Цикл ИдентификаторСт ДеревоЗначений в ТекстовыйДокумент 3
// Выводит данные ДереваЗначений в ТекстовыйДокумент, пригодный к рассмотрению в отладчике, окне сообщений и показу. // // Параметры: // рВетка — дерево значений, подлежащее выводу. Может иметь почти любую глубину иерархии, количество и тип ко Посмотреть все в категории Работа с Деревом Значений

Источник

Как обойти, перебрать дерево значений?

Распечатать

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 — получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=» D:ВашаБаза1с77″ ; Пользователь= Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Посмотреть все результаты поиска похожих

Читайте также:  Плоды рожкового дерева кэроб kurtes

Еще в этой же категории

Примеры работы с Деревом значений в УП 11
Так как работа с ДеревомЗначений и ТаблицейЗначений в данном контексте практически не отличается, в примере будет использоваться ДеревоЗначений, все тоже самое за исключением иерархии применимо и к ТаблицеЗначений. Как известно, в платформе 1С 8.1 н Дерево значений в таблицу значений или в табличную часть и обратно 9
Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранени Преобразование дерева значений в таблицу значений и обратно 6
Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно. Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее Как в дереве значений строку перекинуть в другой родитель? 5
Процедура ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НовыйРодитель, Уровень = 0) Если Уровень = 0 Тогда НоваяСтрока = НовыйРодитель.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока); ПереместитьСтрокуДерева(Де Как Свернуть, Развернуть узлы Дерева значений на форме? 4
Как программно свернуть/развернуть дерево значений на управляемой форме? Желательно НаКлиенте. КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы(); //Свернуть дерево Для Каждого Строка Из КоллекцияЭлементовДерева Цикл ИдентификаторСт Посмотреть все в категории Работа с Деревом Значений

Источник

Оцените статью