Имя: Пароль:
1C
 
Оптимизация иерархии номенклатуры | УТ
0 Lepexa207
 
13.05.24
12:53
1С:УТ

Здравствуйте, есть такая задача: сделать в "Номенклатуре" так, чтобы поиск отрабатывал не только по группе, в которой находимся, но и по дочерним группам. Я выполнил так, что просто поменял в общем модуле "ПодборТоваровКлиентСервер" с Равно на ВИерархии:

&Вместо("УстановитьОтборПоИерархииНоменклатуры")
Процедура Расш1_УстановитьОтборПоИерархииНоменклатуры(Форма)
	Если Не Форма.ИспользоватьФильтры Тогда
		Возврат;
	КонецЕсли;
	
	Если Не Форма.ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии") Тогда
		Возврат;
	КонецЕсли;
	
	ОтборПоИерархииНоменклатуры = Форма.ТекущаяИерархияНоменклатуры;
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Форма.СписокНоменклатура,
		"Родитель",
		ОтборПоИерархииНоменклатуры,
		ВидСравненияКомпоновкиДанных.ВИерархии,
		"Родитель",
		Истина);
КонецПроцедуры


При проверке, работа поиска сильно замедлилась. Есть какой-то более оптимальный, универсальный вариант?
1 maxab72
 
13.05.24
12:16
Попробуй сперва выбрать по иерерхии только вложенные группы, а условие поставь "группыВСписке"
2 АгентБезопасной Нацио
 
13.05.24
12:25
(1) можно и все товары по иерархии выбрать, и условие по "в списке"
3 Lepexa207
 
13.05.24
12:50
(1) Не особо понял как это сделать, можете прояснить?
4 Волшебник
 
13.05.24
12:54
(1) Тогда условие должно быть "Родитель-Равно-СписокГрупп"

(2) Тогда отбор должен быть по полю "Ссылка-ВСписке-СписокСсылок"

Автору можно заменить отбор на Ссылка-ВИерархии-Группа, должно стать быстрее
5 maxab72
 
13.05.24
13:28
(2) Не, так плохо. так надо сперва запросом выбрать элементы. А групп гораздо меньше и поэтому отбирать по Ссылка - ГруппыВСписке - СписокГрупп или Родитель - ВСписке - СписокГрупп будет быстрее чем Ссылка - ВСписке - СписокСсылок.
6 Lepexa207
 
13.05.24
13:57
(5) То есть мне надо найти в "ПодборТоваровКлиентовСервер" запрос, где обрабатывается поиск по номенклатуре? Или саморучно написать его?
Я просто понимаю, что вы хотите предложить, я не понимаю где это надо реализовать(
7 maxab72
 
13.05.24
15:03
(6) Перед этим: "ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка" воткнуть свой запрос с формированием списка групп, а потом в эту функцию все и засунуть.
8 Sochinec
 
14.05.24
08:06
Показывать номенклатуру вложенных групп - не то (не помню есть ли такое в УТ но в УНФ точно есть)
9 Lepexa207
 
14.05.24
08:30
(8) в УТ как раз такой функции нет, поэтому и появилась потребность в ней
10 Lepexa207
 
14.05.24
09:34
(7) Я так и не понял как это в конечном итоге должно выглядеть. Я столкнулся с рядом противоречий, я должен при открытии Номенклатуры менять запрос динамического списка, чтобы он отрабатывал по группе и её иерархии. Если в самой форме менять, то там уже нельзя использовать запрос, и на это ссылается ошибка несуществующего поля "ТекстЗапроса".

Проверить на свойство ТекстЗапроса я не могу, так как работаю с формой, а не объектом элемента.

То есть я не могу сделать так:
Если Форма.СписокНоменклатура.Свойство("ТекстЗапроса") Тогда


Я полностью запутался в реализации задачи D;
11 Волшебник
 
14.05.24
09:36
(10) Тогда заявление на стол.
12 Lepexa207
 
14.05.24
09:37
(11) ахах, забавно👍)
13 Мультук
 
14.05.24
09:52
(0)

0) Вы определились с термином "медленно" и "быстро", в миллисекундах, например

1) Так (я понимаю) уже пробовали "вот так" и всё-равно медленно?


ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Форма.СписокНоменклатура,
        "Ссылка",
        ОтборПоИерархииНоменклатуры,
        ВидСравненияКомпоновкиДанных.ВИерархии,
        "Ссылка",
        Истина);


2) Сколько всего элементов и групп в справочнике номенклатура, а групп? А максимальный уровень вложенности?

3) В зависимости от пункта 2 вы можете почитать вот это и вообще погуглить инфостарт

Тогда читаем про транзитивные замыкания
https://infostart.ru/1c/articles/158512/

В 99% ваша проблема уже кем-то решалась.
14 Lepexa207
 
14.05.24
10:13
(13)

(0, 2) Проблема в том, что при заходе в группу, которая наполнена группам, вход занимает около 4-7 секунд, даже с заранее ведённым поиском. У нас 3 группы:
[1] Не выгружать - то, что уже не актуально/не нужно на сайте
[2] Новые товары - создали номенклатуру - попало сюда
[3] Товары - всё, что есть на сайте
Их объединяет группа [0] Номенклатура

В товарах на данный момент всего 19 групп

(1) Поиск работает как надо, зачастую оперативно. Но если можно как-то дать время на написание текста в 1 секунду бездействия, чтобы отработать результат, то было бы славно. Иначе он его с каждой секундой пытается отработать и поиск может зависнуть на первых 4 ведённых символах
15 Волшебник
 
14.05.24
10:19
(14) Сделайте поиск по кнопке