Перебрать в цикле дерево значений на сервере УФ #684708


#0 by nushenka
Здравствуйте! Возникла проблема, во внешней обработке на форме есть дерево значений. Оно заполнено данными и есть колонка с типом "Булево" для выбора некоторых элементов. Задача записать выбранные элементы дерева в справочник. Не получается перебрать все строки дерева. Попытка: ТЗ = Контрагенты.ПолучитьЭлементы; находит элементы верхнего уровня дерева и вне зависимости от того, выбрана эта строка или нет записывает наименования групп в справочник
#1 by nushenka
строка Сообщить(НоваяСтрока); написана для теста, чтобы не удалять потом ненужные строки из реального справочника
#2 by Гефест
Зачем ты проверяешь заполненность реквизита, а не его значение? И где перебор вложенных строк?
#3 by nushenka
Я проверяю стоит ли галочка в строке и если да, тогда мне нужно записать строку в справочник. А строки я и не могу перебрать все. в этом и суть проблемы
#4 by 1dvd
Выбрать - это что, реквизит???
#5 by 1dvd
Если он булево, то:
#7 by nushenka
Выбрать- это колонка в дереве значений
#8 by nushenka
главная проблема не в проверке условия, а том, что перебираются только группы в дереве, а подчиненные элементы не видно. нужно, чтобы перебиралось все дерево и уже потом по условию выбранные элементы писались в справочник
#9 by 1dvd
Подчиненные строки находятся в СтрКонтрагенты.Строки
#10 by Гефест
Есть такое страшное слово - рекурсия
#11 by ДемонМаксвелла
два способа навскидку. рекурсия и перебор по уровням
#12 by nushenka
Спасибо, условие заработало ) это уже хорошо
#13 by nushenka
{Форма.Форма.Форма}: Поле объекта не обнаружено (Строки) Для каждого Строка из СтрКонтрагенты.Строки цикл
#14 by nushenka
у меня не доступны стоки и колонки. дерево находится на форме и мне его нужно в процедуре на сервере перебрать
#15 by nushenka
можете привести пример предложенных способов?
#16 by nushenka
слово действительно страшное, я с рекурсией не дружу
#17 by 1dvd
а... у тебя УФ.
#18 by nushenka
СПАСИБО ОГРОМНЕЙШЕЕ!!! такое простое решение и все получилось ))))
#19 by nushenka
А теперь еще хочу спросить, как сделать так, чтобы при выборе группы выбирались все элементы группы в дереве?
#20 by andreymongol82
Делаешь обход по подчиненным уровням и добавляешь их в параметр выбора
#21 by nushenka
Т.е. если СтрКонтрагенты.Выбрать Тогда КонецЕсли что-то типа этого?
#22 by 1dvd
да
#23 by 1dvd
сколько там уровней?
#24 by nushenka
2. группы и элементы в них
#25 by nushenka
а это нужно вызывать в событии при изменении? тогда как понять какая именно группа выбрана? можно как то получить текущую строку?
#26 by 1dvd
тогда так и делай. Рекурсия тут нафиг не нужна
#27 by 1dvd
смотри параметры функции (события) Выбор(...)
#28 by Infsams654
а вдруг группу контрагентов еще разобьют на группы ?
#29 by nushenka
давайте пока не будем усложнять. пусть так и будет. это для меня учебная задача и пока там столь замутно не требуют. а если потребуют, тогда разберемся и с рекурсией
#30 by nushenka
Это событие выбора строки?
#31 by andreymongol82
При двойном щелчке мыши или нажатии Enter Выбор, Selection, - событие таблицы на форме
#32 by andreymongol82
Далее "ОбработкаВыбора"
#33 by nushenka
то же самое хотела написать ) ну так мне не подходит это событие. я же отмечаю галочками в строке, а это видимо событие при изменении
#34 by 1dvd
нет. тебе нужно именно это событие. В ПриИзменении нет ссылки на текущую строку
#35 by nushenka
#36 by nushenka
так все получилось. правда это корявый вариант, но все же работает исправно
#37 by nushenka
Всем спасибо )
#38 by andreymongol82
Так-то правильнее было бы вызвать форму, у нее установить признак МножественныйВыбор, там выбрать все что нужно (хотя бы и с помощью галочек), затем обработать полученный массив в обработке выбора формы или таблицы, смотря с каким владельцем открывали форму выбора
#39 by nushenka
Появился еще вопрос в эту же тему. Делаю вот такую процедуру при изменении: Можно ли как-то проверить строку на изменение: Если СтрТабГрупп.Изменен = Истина Тогда - так ведь нельзя. А вообще есть такой способ или нет?
#40 by 1dvd
Что значит "Изменен" в данном контексте?
#41 by nushenka
да ничего. просто от балды написано, чтобы передать смысл того, что я хочу добиться. Эта процедура в общем выделяет все элементы в группе при выделении группы и снимает, если снять галочку с группы. а просто выборочно поставить галочки на элементы не дает. Вот я и хочу вставить проверку на то что изменена группа или просто элемент
#42 by nushenka
вопрос еще актуален
#43 by andreymongol82
#44 by nushenka
а зачем нам количество? оно не будет нулем, если в группе есть хоть один элемент и не важно выбран он или нет
#45 by nushenka
есть еще варианты решения проблемы?
#46 by andreymongol82
Я так понял, нужно проверить  - элемент это или группа? разве не так?
#47 by nushenka
правильно поняли. нужно проверить: если изменили группу, тогда нужно провести действия и над элементами, а если изменили элемент, тогда дополнительных действий не нужно. Может я не правильно поняла Вашу мысль. Как количество элементов в группе проверяет строку на группу или элемент?
#48 by nushenka
andreymongol82 ваша версия не работает, т.к. ТабЭлементы = СтрТабГрупп.ПолучитьЭлементы; получает просто элементы в группе, а они там есть всегда и по-этому количество никогда не равно 0
#49 by nushenka
ладно, рабочий день закончен. зайду сюда завтра. буду рада новым идеям )
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям