|
УТ11 Свой поиск в форме списка партнеров | ☑ | ||
---|---|---|---|---|
0
ildary
22.11.17
✎
16:26
|
Уважаемые специалисты, скажите пожалуйста, как правильно сделать: потребовалось в форме списка партнеров организовать свой поиск по ИНН, для этого в форме добавлены 2 процедуры:
Функция СписокПартнеровПоИНН( ИНН ) лТекст = " |ВЫБРАТЬ | Контрагенты.Партнер КАК Партнер |ПОМЕСТИТЬ ВТ |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ИНН ПОДОБНО &ИНН |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Партнеры.Ссылка КАК Ссылка |ИЗ | Справочник.Партнеры КАК Партнеры |ГДЕ | Партнеры.Ссылка В ИЕРАРХИИ | (ВЫБРАТЬ | ВТ.Партнер | ИЗ | ВТ) |"; лЗапрос = Новый Запрос(лТекст); лЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; лЗапрос.УстановитьПараметр("ИНН", "%" + ИНН + "%" ); ТЗ = лЗапрос.Выполнить().Выгрузить(); СписокПартнеров = Новый СписокЗначений; СписокПартнеров.ЗагрузитьЗначения( ТЗ.ВыгрузитьКолонку( "Ссылка") ); Возврат СписокПартнеров; КонецФункции &НаКлиенте Процедура ИННПоискаПриИзменении(Элемент) Если Не ЗначениеЗаполнено( ЭтаФорма.ИННПоиска ) Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ЭтаФорма.Список, "Ссылка", 0, ВидСравненияКомпоновкиДанных.Равно,, Ложь ); Возврат; КонецЕсли; СписокПартнеров = СписокПартнеровПоИНН( СокрЛП( ЭтаФорма.ИННПоиска ) ); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ЭтаФорма.Список, "Ссылка", СписокПартнеров, ВидСравненияКомпоновкиДанных.ВСписке,, Истина ); КонецПроцедуры проблема в том, что все работает правильно, если партнёр не является подчиненным другому партнёру, а подчиненный партнер - просто не выводится (дин список вообще пустой). Пробовал разные варианты ВидСравненияКомпоновкиДанных - не помогло. |
|||
1
vicof
22.11.17
✎
16:38
|
"что все работает правильно"
Что значит? Зачем везде писать ЭтаФорма? |
|||
2
vicof
22.11.17
✎
16:39
|
ВСпискеПоИерархии?
|
|||
3
ildary
22.11.17
✎
16:41
|
(1) "Все работает правильно" - я ввожу ИНН и в динамическом списке вижу партнера, на которого ссылается контрагент с таким ИНН. Но только если партнер никому не подчинен (не заполнен реквизит Родитель).
(2) ВСпискеПоИерархии пробовал - не находит партнера, который подчинен другому. |
|||
4
vicof
22.11.17
✎
16:44
|
(2) Когда значение родителя заполнено - отбор по родителю, иначе по ссылке
|
|||
5
ildary
22.11.17
✎
16:50
|
(4) а если поиск идет не по ИНН, а по куску ИНН - хочется вывести всех партнеров, кто попадает под данное условие.
|
|||
6
vicof
22.11.17
✎
16:58
|
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ЭтаФорма.Список, "Родитель", СписокПартнеров, ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии,, Истина );
|
|||
7
VinTrack
22.11.17
✎
16:59
|
К чему изобретать велосипед?
В форме списка партнеров есть поле полнотекстового поиска... Там хоть ИНН вводить, хоть наименование контрагента (если ведется раздельный учет), хоть партнера - все находится. В том числе и "по куску" Если конечно в общих настройках включить использование полнотекстового поиска. |
|||
8
ildary
22.11.17
✎
17:02
|
(7) Полнотекстовый поиск отключен. Он не нравится пользователям.
|
|||
9
VinTrack
22.11.17
✎
17:05
|
Ребята знают толк в извращениях...
Чем поиск полнотекстовый не угодил? Отлично работает... |
|||
10
yzimin
22.11.17
✎
17:18
|
(0) смотри как реализован поиск по ИНН в модуле менеджера справочника контрагентов
ОбработкаПолученияДанныхВыбора | Справочник.Контрагенты КАК Контрагенты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК ИерархияПартнеров | ПО Контрагенты.Партнер = ИерархияПартнеров.Родитель |
|||
11
ildary
23.11.17
✎
09:55
|
(10) спасибо за совет. В итоге я понял, что затея вообще не решаема в лоб - я попробовал сделать отбор через Все действия-Настроить список - и вижу, что для партнера второго уровня отбор не работает в режимах "Иерарх список" и "Дерево" ("Список" - работает). В итоге переделал заполнения списка для отбора вот так:
вместо СписокПартнеров = Новый СписокЗначений; СписокПартнеров.ЗагрузитьЗначения( ТЗ.ВыгрузитьКолонку( "Ссылка") ); сделал СписокПартнеров = Новый СписокЗначений; Для Каждого Стр Из ТЗ Цикл ТекПартнер = Стр.Партнер; СписокПартнеров.Добавить( ТекПартнер ); Если ЗначениеЗаполнено( ТекПартнер.Родитель ) Тогда // без родителя не найдет подчиненного партнера Пока ЗначениеЗаполнено( ТекПартнер.Родитель ) Цикл ТекПартнер = ТекПартнер.Родитель; КонецЦикла; СписокПартнеров.Добавить( ТекПартнер ); КонецЕсли; КонецЦикла; и теперь отбор работает не идеально, но хоть что-то - выводит корневого родителя. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |