Отбор в форме справочника "ссылка в группе"
Anonymous
16.04.2009 - 12:48
|
Задача такая: В форме справочника надо организовать несколько иное поведение, чем по умолчанию в 1С. Надо при выборе группы в СправочникДерево в основном СправочникСписок показывать все элементы (без групп), входящие в эту группу на любом уровне. Здесь устнавливается следующее: ЭлементыФормы.СправочникСписок.ПросмотрГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы; ЭлементыФормы.СправочникСписок.ИерархическийПросмотр=Ложь; СправочникСписок.Отбор.Ссылка.Значение=НужнаяГруппа; СправочникСписок.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВГруппе; СправочникСписок.Отбор.Ссылка.Использование=Истина; И сам отбор несколько тормозит (при переходе к новой группе), и уж совсем неприлично (неприемлемо) тормозит при этом штатный поиск (не понятно, почему?). А задача вполне жизненная: скажем, я заню, что какой-то контрагент входит в группу Покупатели, но более точную группу не знаю (там есть еще уровни). Открываю Покупатели и ищу... ищу... и вспоминаю старый анекдот: "Windows в переводе с языка американских индейцев означает "белый человек. сидящий перед монитором и смотрящий на песочные часы" )) Разбираясь с этим делом я докопался вот до чего. У меня есть кое-какие расчеты при выводе справочника (долги), плюс, там, раскраска строк, они заложены в процедуре ПриПолученииДанных(...). Так вот, если нет отбора по ссылке, то при поиске процедура вызывается дважды (не понятно, почему дважды, а не один раз, но бог с ним, немного). А вот при наличии отбора по ссылке, похоже, поиск идет так: прога берет очередную порцию данных (20 строк), выполняет для них ПриПолученииДанных(...), потом(!) проверяет на удовлетворение условиям поиска, убеждается, что нет, берет следующие 20 строчек и далее со всеми, идет линейно сверху вниз. Если список длинный, а искомое в конце, то получается, что она вызывает процедуру сотни раз зазря! Похоже на ляп программистов, и как его обойти (и можно ли) - не знаю. Может, кто знает глубже? |