По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) ну довай попорядку:
Q. Как можно пробежать элементы дерева?
A. Рекурсивно.
Q. Как можно пробежать все колонки элемента?
A. Для каждого Колонка ИЗ РеквизитНаФормеДерево.Колонки Цикл ... ЭлементДерева[Колонка.Имя]; ...
Q. У элемента есть еще элементы?
A. Могут быть.
Q. есть ещё элементы как я понял из окна отладчика.
A. По всей видимости поняли не правильно - это колонки, а не элементы дерева. Чтобы понять из окна отладчика, есть ли у элемента дерева подчиненные элементы, нужно в выражении написать "ТекущийЭлементДерева.ПолучитьЭлементы()". Этих элементов может быть и "0" штук.
Q. в цикле не получается. скрин приложил.
A. На скрине цикла нет, есть колонки, которые можно пробежать так, как указано во втором ответе настоящего сообщения.
Q. Как можно пробежать элементы дерева?
A. Рекурсивно.
Q. Как можно пробежать все колонки элемента?
A. Для каждого Колонка ИЗ РеквизитНаФормеДерево.Колонки Цикл ... ЭлементДерева[Колонка.Имя]; ...
Q. У элемента есть еще элементы?
A. Могут быть.
Q. есть ещё элементы как я понял из окна отладчика.
A. По всей видимости поняли не правильно - это колонки, а не элементы дерева. Чтобы понять из окна отладчика, есть ли у элемента дерева подчиненные элементы, нужно в выражении написать "ТекущийЭлементДерева.ПолучитьЭлементы()". Этих элементов может быть и "0" штук.
Q. в цикле не получается. скрин приложил.
A. На скрине цикла нет, есть колонки, которые можно пробежать так, как указано во втором ответе настоящего сообщения.
(24) в данном случае не надо ничего выгружать в ДеревоЗначений.
Там же, в модуле формы можно посмотреть, как работать с ДанныеФормыЭлементДерева.
Весь смысл сводится к тому, что вся информация о выбранных колонках сохраняется в ТЗ ВыбранныеЦены.
Потом, для заполнения/чтения значений строки ДанныеФормыЭлементДерева, имена колонок получеют из ТЗ.
Что-то в этом роде:
Там же, в модуле формы можно посмотреть, как работать с ДанныеФормыЭлементДерева.
Весь смысл сводится к тому, что вся информация о выбранных колонках сохраняется в ТЗ ВыбранныеЦены.
Потом, для заполнения/чтения значений строки ДанныеФормыЭлементДерева, имена колонок получеют из ТЗ.
Что-то в этом роде:
ВидыЦен = Новый Массив();
Для Каждого ТекСтрока Из ВыбранныеЦены Цикл
Если ТекСтрока.Выбрана Тогда
ВидыЦен.Добавить(ТекСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого ВидЦены Из ВидыЦен Цикл
ИмяКолонки = ВидЦены.ИмяКолонки;
ИмяКолонкиУпаковка = "Упаковка" + ИмяКолонки;
Если ЗначениеЗаполнено(ТекущаяСтрока[ИмяКолонки]) И РассчитатьЦены Тогда
ТекущаяСтрока[ИмяКолонки] = 0;
КонецЕсли;
Если ИспользоватьУпаковкиНоменклатуры И ЗначениеЗаполнено(ТекущаяСтрока[ИмяКолонкиУпаковка]) Тогда
ТекущаяСтрока[ИмяКолонкиУпаковка] = Справочники.УпаковкиНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Показать
(24) по всей видимости речь идет о документе изменения цен номенклатуры, который через такой вот "интерфейс", явно сделанный через одно место сертифицированными специалистами, работает, то имена колонок как правильно сказали выше приходится этим сертифицированным где-то хранить. В итоге если это какая-то таблица значений (или список значений - с них станется), то можно как-то так:
Но тут выпирает другая проблема - а как мы узнаем, за что эта колонка отвечает? Ведь цель пробежаться по всем колонкам элемента дерева не состоит в самой пробежке, как я понял, а состоит в том, чтобы с этими значениями что-то сделать (например, получить максимальную цену или проверить, на сколько максимальная цена больше минимальной). Фактически, пробежав по списку значений элемента, сама задача так решена и не будет, а появится новая задача - распознать, что за муть перед нами в этой конкретной колонке находится...
Поэтому лучше бы Вам определить сразу, что Вы такое хотите сделать, и, возможно, сделать это можно будет куда более простым способом, нежели пробегание по всем колонкам текущей строки...
Для каждого Колонка ИЗ ТаблицаКолонок Цикл
Значение = ТекущийДанные[Колонка.ПолеИмениКолонки];
КонецЦикла;
Но тут выпирает другая проблема - а как мы узнаем, за что эта колонка отвечает? Ведь цель пробежаться по всем колонкам элемента дерева не состоит в самой пробежке, как я понял, а состоит в том, чтобы с этими значениями что-то сделать (например, получить максимальную цену или проверить, на сколько максимальная цена больше минимальной). Фактически, пробежав по списку значений элемента, сама задача так решена и не будет, а появится новая задача - распознать, что за муть перед нами в этой конкретной колонке находится...
Поэтому лучше бы Вам определить сразу, что Вы такое хотите сделать, и, возможно, сделать это можно будет куда более простым способом, нежели пробегание по всем колонкам текущей строки...
(27) эту задачу можно миллионом разных способов сделать. Можно перед записью документа поправить цены в табличной части с ценами вместо того, чтобы пытаться сделать это в форме. Но, как я понимаю, пользователь должен при изменении цены получить изменение всех остальных цен в таблице - тогда придется реализовать тот самый обход всех свойств, поиск среди них цен, при этом только цен в магазинах, после чего произвести их подмену на введенную цену... Без конфигурации под руками тут подсказать не просто...
Процедура ОбходРекурсивно(СтрокаДерева)
ВложенныеЭлементы = СтрокаДерева.ПолучитьЭлементы();
Для каждого ВложенныйЭлемент Из ВложенныеЭлементы Цикл
// Здесь обработка строки
ОбходРекурсивно(ВложенныйЭлемент);
//или здесь...
КонецЦикла;
КонецПроцедуры
ПоказатьМассив = новый Массив;
Для Каждого элем из Дерево.ПолучитьЭлементы() Цикл
Массив.Добавить(элем);
КонецЦикла;
Пока Массив.Количество() > 0 Цикл
Для Каждого элем из Массив[0].ПолучитьЭлементы() Цикл
Массив.Добавить(элем);
КонецЦикла;
// тут обработка узла
Массив.Удалить(0);
КонецЦикла;
Показать
(13) Да, понятно, потому что например так "НашиСтроки[ТекущаяСтрока].ВидЦеныd88dea17d5fd11e58bb20cc47a0e0b1a" я могу вытащить нужное значение, но суть в том что в элементе может быть несколько полей ВидЦены, мне надо их все обойти. Не могу дойти до того, как это сделать...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот