Отборы в Дереве значений
ФОРМЫ обычные.
Итак, есть 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, смотри личку
А речь об управляемых или неуправляемых формах? В управляемых платформа поддерживает отборы в динамических списках и их группировку, что сразу же решает задачу.
2. Я не понял, почему при создании копии дерева теряется возможность редактирования, честно не понял. При любой записи строки в дереве на форме находить эту строку в основной копии и перезаписывать, либо же добавлять-удалять. Для идентификации можно использовать скрытую колонку id, куда вписывать номера строк по порядку.
Причем если мы имеем строго 4 уровня, то в копии можно даже держать плоскую таблицу значений, дерево — всего лишь визуальная группировки данных ТЗ. И делать к ней запросы через построитель с отбором и итогами, после чего получать на выходе готовое дерево Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).
Очень просто и эффективно.
Если без создания копии, то не очень понятно, а как можно скрыть строки табличного поля, если это не табличная часть?
3) Если все же по каким-то религиозным причинам создавать копию неохота, тогда извращаемся по полной:делаем обработку с табличной частью, в которой имитируем дерево значений: отступами или как-то еще. Здесь нам нужен будет скрытый реквизит ВидимостьСтроки, по которому и будем делать визуальный отбор через отборСтрок.ВидимостьКолонки.Установить(Истина). Писать код заполнения этой колонки Истиной или Ложью нужно будет самим.
Добавлено через 7 минут
PS Ах, формы обычные, жирный шрифт как раз почему-то в мозгу не прочитался. Сорри за невнимательность.
проще всего.
разделить дерево на то что отобрано и что не отобрано,
сверху остается — что попало в отбор, снизу добавляется строка пятого уровня и в нее копируется все непопавшее.
если строки дерева однозначено связаны и синхронизированы с ТЗ, то очень хорошо, правда долго наверное
А речь об управляемых или неуправляемых формах? В управляемых платформа поддерживает отборы в динамических списках и их группировку, что сразу же решает задачу.
SonicQ, Да, мне наверное надо перестать делать вид, будто я разбираюсь в управляемых формах, с которыми работал два раза в жизни =)
+ видимость строки для дерева которое выводиться в данный момент.
Добавлено через 9 минут
тупым перебором, и делиться то нечем
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) Элементарно!
При заполнении дерева вычисляется флажок Булево — скрывать или показывать ли эту строку дерева.
Соответственно строчка верхнего уровня скрывается если скрыты все подчиненные.
Источник