Отбор дерево значений 1с управляемая форма

Отборы в Дереве значений

ФОРМЫ обычные.
Итак, есть 4-х уровневое дерево значений на форме (табличное поле) расчет значений в этом дереве (расстановка правильно строк в основном) очень сложная, очень большой и тяжелый алгоритм. Есть возможностью добавлять строки, изменять и удалять. (это оптимизация производства)

стандартными средствами, платформа не поддерживает отборы в дереве значений. (да и понятно почему, на каком уровне отбирать то?)
Задачка на смекалку, как проще всего реализовать отборы в дереве значений (ну типа как в форме списка документов — (равно, в списке, в группе и т.д.))?
Желательно не создавая копии дерева, иначе теряется возможность редактировать дерево с установленным отбором.

Принимаю все варианты. Теории, рассуждения — приветствуются.

Добавлено через 3 часа 59 минут
Уточнение
дерево выглядит так:

+Организация +Подразделение +Номенклатура +Контрагент

Для упрощения задачи, представим что все значения разных уровней находятся в разных колонках

Что необходимо получить при установке отбора:
Например
Если отбор по номенклатуре «Ручка синяя»

+ООО Ромашка + Цех 1 + Ручка синяя + Контрагент1 + Контрагент2 +ООО Букашка + Цех 10 + Ручка синяя +Контрагент1 +Контрагент5
+ООО Ромашка + Цех 1 + Ручка синяя + Контрагент1 +ООО Букашка + Цех 10 + Ручка синяя +Контрагент1
+ООО Букашка + Цех 10 + Ручка синяя +Контрагент1 +Контрагент5
+ООО Ромашка + Цех 1 + Ручка синяя + Контрагент2

Отборы в скд
Добрый день! Вопрос наверное избитый. но не могу сделать. имеется отчет на скд. как программно.

Отборы в журналах
77 торговля Есть задача. Нужно в журналах (во всех) организовать отбор документов по определенному.

Как лучше сделать? (отборы, связанные документы и т.д.) 8.2 УФ
Доброго времени! Подскажите пожалуйста как сделать следующее. Есть документ Заказ, в нем.

Отбор/Фильтр в дереве значений
Всем привет! Итак вопрос: 1. Можно ли (или как) сделать отбор (или установить фильтр) в.

Dethmontt, если надо могу скачать 🙂

Phil, ну если только посмотреть на реализацию

Dethmontt, смотри личку

Сообщение от Dethmontt

А речь об управляемых или неуправляемых формах? В управляемых платформа поддерживает отборы в динамических списках и их группировку, что сразу же решает задачу.

2. Я не понял, почему при создании копии дерева теряется возможность редактирования, честно не понял. При любой записи строки в дереве на форме находить эту строку в основной копии и перезаписывать, либо же добавлять-удалять. Для идентификации можно использовать скрытую колонку id, куда вписывать номера строк по порядку.

Читайте также:  Выгода от одного дерева

Причем если мы имеем строго 4 уровня, то в копии можно даже держать плоскую таблицу значений, дерево — всего лишь визуальная группировки данных ТЗ. И делать к ней запросы через построитель с отбором и итогами, после чего получать на выходе готовое дерево Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).

Очень просто и эффективно.

Если без создания копии, то не очень понятно, а как можно скрыть строки табличного поля, если это не табличная часть?

3) Если все же по каким-то религиозным причинам создавать копию неохота, тогда извращаемся по полной:делаем обработку с табличной частью, в которой имитируем дерево значений: отступами или как-то еще. Здесь нам нужен будет скрытый реквизит ВидимостьСтроки, по которому и будем делать визуальный отбор через отборСтрок.ВидимостьКолонки.Установить(Истина). Писать код заполнения этой колонки Истиной или Ложью нужно будет самим.

Добавлено через 7 минут
PS Ах, формы обычные, жирный шрифт как раз почему-то в мозгу не прочитался. Сорри за невнимательность.

проще всего.
разделить дерево на то что отобрано и что не отобрано,
сверху остается — что попало в отбор, снизу добавляется строка пятого уровня и в нее копируется все непопавшее.
если строки дерева однозначено связаны и синхронизированы с ТЗ, то очень хорошо, правда долго наверное

Сообщение от renat_dmitriev

А речь об управляемых или неуправляемых формах? В управляемых платформа поддерживает отборы в динамических списках и их группировку, что сразу же решает задачу.

SonicQ, Да, мне наверное надо перестать делать вид, будто я разбираюсь в управляемых формах, с которыми работал два раза в жизни =)

Сообщение от renat_dmitriev

+ видимость строки для дерева которое выводиться в данный момент.

Добавлено через 9 минут

Сообщение от SonicQ

тупым перебором, и делиться то нечем

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Процедура УстановитьФлагПоДвойнымОтборам(Дерево) Если ЕстьОтборы() Тогда Для каждого СтрокаДерева Из Дерево.Строки Цикл Для каждого Отбор Из УстановленныеОтборы Цикл Если Отбор.Значение.Использование = Ложь Тогда Продолжить; КонецЕсли; ПолеОтбора = Отбор.Ключ; Если СоответствиеПолеОтборов[ПолеОтбора] <> Неопределено Тогда ПолеОтбора = СоответствиеПолеОтборов[ПолеОтбора]; КонецЕсли; Если СтрокаДерева.Уровень() = УровниОтбора[Отбор.Ключ] Тогда Если Отбор.Значение.ВидСравнения = ВидСравнения.Равно Тогда ВидимостьЯчеек = СтрокаДерева[ПолеОтбора] = Отбор.Значение.Значение; ИначеЕсли Отбор.Значение.ВидСравнения = ВидСравнения.НеРавно Тогда ВидимостьЯчеек = СтрокаДерева[ПолеОтбора] <> Отбор.Значение.Значение; ИначеЕсли Отбор.Значение.ВидСравнения = ВидСравнения.ВСписке Тогда ВидимостьЯчеек = Отбор.Значение.Значение.НайтиПоЗначению(СтрокаДерева[ПолеОтбора]) <> Неопределено; ИначеЕсли Отбор.Значение.ВидСравнения = ВидСравнения.ВИерархии Тогда ВидимостьЯчеек = СтрокаДерева[ПолеОтбора].ПринадлежитЭлементу(Отбор.Значение.Значение); Иначе ВидимостьЯчеек = Истина; КонецЕсли; СтрокаДерева.ФлагВидимости = ВидимостьЯчеек; КонецЕсли; КонецЦикла; УстановитьФлагПоДвойнымОтборам(СтрокаДерева); КонецЦикла; КонецЕсли; КонецПроцедуры

Добавлено через 4 минуты
но думаю вариант с ТЗ будет более гибким.

Читайте также:  Деревья различных пород карандашом

Пока не решил как лучше, думаю.

Проблема в том, что редактирование нужно на всех уровнях и есть взаимосвязи между разными уровнями и разными значениями одного уровня.

Добавлено через 1 минуту
Пока дынный подход отбора показывает очень хорошую производительность на 500+ строках

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

Добавлено через 8 минут
ну или применять отборы сразу к исходным данным к регистру или чему- то в чем они находятся.
задача типовая, и довольно частая, в логистике по крайней мере

Источник

8.3 Отбор в дереве значений

Подскажите как осуществить отбор в уже выведенном на форму дереве значений?
Подумываю попробовать НайтиСтроки() но не уверен что это то что нужно.

(2) это не метод, но походу он для только таблицы значений; тогда +1 к условному оформлению, или есть еще вариант с переформированием дерева с уже отобранными данными

(0) А как ты себе вообще это представляешь?
Вот есть у тебя дерево — 3 уровня. Наложил отбор, ему соответствует только самая нижняя строка. Куда бежать, как отображать?

(9) Мне (и платформе, кстати, тоже) мало интересно, какое у тебя «там» дерево. В (8) конкретный пример — опиши, как должно выглядеть дерево после наложения отбора.
Ну и если дерево одноуровневое — может пора перестать стесняться и сделать его таблицей?

(11) Не стесняюсь, тупо лень)))
Там весь док переписывать прийдётся(
А выглядеть после наложения отбора так же могло бы)))
Но конечно случай единичный и годиться только для одноуровневого дерева.

Читайте также:  Межкомнатные двери дерево италия

(10) (7)
Добавляешь элемент условного оформления,
Оформление — Видимость = Ложь, Отображать = Ложь
Условие — при котором нужно скрыть неугодные строки,
Оформляемые поля — элементы формы — сама таблица и все ее колонки.

Однако возможна беда — иногда у вертикального скроллера срывает кукушку и он дико колбасится при скроллинге (по-моему появилась в 8.3).
Поэтому завести два дерева будет более стабильным решением.
Но смотри чтобы форму не порвало.

(15) Что то ругается «Недоступен в данных формах»
Это же реквизит дерева с типом «УсловноеОформление» или не туда полез?

(21) Как в СКД отчета.
— находишь элемент условного оформления через свойство управляемой формы УсловноеОформление.Элементы.
— в найденном элементе корячишь отборы через его свойство .Отбор.Элементы

(35) Док по типу установки цен в УТ 11
С возможностью добавления любого количества периодов (в виде колонок)
Вот теперь надо сделать ещё одну ТЧ (само собйо тупо на форме) в которой будут выводится сгруппированные контрагенты.
и при выделении нужного контрагента в левой части в правой показывается товар выписанный на него.

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

Сделаю либо запоминание удаленных и добавленных строк, с переделкой механизма записи данных дерева в ТЧ либо все перепишу на таблицу и буду юзать отборы.
Посмотрю что менее трудозатратно.

Хотя таблица значений разумеется будет работать быстрее — всегда когда есть возможность лучше использовать таблицу вместо дерева.

(39) Элементарно!
При заполнении дерева вычисляется флажок Булево — скрывать или показывать ли эту строку дерева.
Соответственно строчка верхнего уровня скрывается если скрыты все подчиненные.

Источник

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