Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

УТ11 Свой поиск в форме списка партнеров

УТ11 Свой поиск в форме списка партнеров
Я
   ildary
 
22.11.17 - 16:26
Уважаемые специалисты, скажите пожалуйста, как правильно сделать: потребовалось в форме списка партнеров организовать свой поиск по ИНН, для этого в форме добавлены 2 процедуры:

Функция СписокПартнеровПоИНН( ИНН )
    
    лТекст = "
        |ВЫБРАТЬ
        |    Контрагенты.Партнер КАК Партнер
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ИНН ПОДОБНО &ИНН
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    Партнеры.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.Партнеры КАК Партнеры
        |ГДЕ
        |    Партнеры.Ссылка В ИЕРАРХИИ
        |            (ВЫБРАТЬ
        |                ВТ.Партнер
        |            ИЗ
        |                ВТ)
        |";

    лЗапрос = Новый Запрос(лТекст);
    лЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    лЗапрос.УстановитьПараметр("ИНН", "%" + ИНН + "%" );

    ТЗ = лЗапрос.Выполнить().Выгрузить();
    
    СписокПартнеров = Новый СписокЗначений;
    СписокПартнеров.ЗагрузитьЗначения( ТЗ.ВыгрузитьКолонку( "Ссылка") );
    
    Возврат СписокПартнеров;
    
КонецФункции

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

проблема в том, что все работает правильно, если партнёр не является подчиненным другому партнёру, а подчиненный партнер - просто не выводится (дин список вообще пустой). Пробовал разные варианты ВидСравненияКомпоновкиДанных - не помогло.
 
 
   vicof
 
1 - 22.11.17 - 16:38
"что все работает правильно"
Что значит?

Зачем везде писать ЭтаФорма?
   vicof
 
2 - 22.11.17 - 16:39
ВСпискеПоИерархии?
   ildary
 
3 - 22.11.17 - 16:41
(1) "Все работает правильно" - я ввожу ИНН и в динамическом списке вижу партнера, на которого ссылается контрагент с таким ИНН. Но только если партнер никому не подчинен (не заполнен реквизит Родитель).

(2) ВСпискеПоИерархии пробовал - не находит партнера, который подчинен другому.
   vicof
 
4 - 22.11.17 - 16:44
(2) Когда значение родителя заполнено - отбор по родителю, иначе по ссылке
   ildary
 
5 - 22.11.17 - 16:50
(4) а если поиск идет не по ИНН, а по куску ИНН - хочется вывести всех партнеров, кто попадает под данное условие.
   vicof
 
6 - 22.11.17 - 16:58
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( ЭтаФорма.Список, "Родитель", СписокПартнеров, ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии,, Истина );
   VinTrack
 
7 - 22.11.17 - 16:59
К чему изобретать велосипед?
В форме списка партнеров есть поле полнотекстового поиска...
Там хоть ИНН вводить, хоть наименование контрагента (если ведется раздельный учет), хоть партнера - все находится.
В том числе и "по куску"
Если конечно в общих настройках включить использование полнотекстового поиска.
   ildary
 
8 - 22.11.17 - 17:02
(7) Полнотекстовый поиск отключен. Он не нравится пользователям.
   VinTrack
 
9 - 22.11.17 - 17:05
Ребята знают толк в извращениях...
Чем поиск полнотекстовый не угодил?
Отлично работает...
   yzimin
 
10 - 22.11.17 - 17:18
(0) смотри как реализован поиск по ИНН в модуле менеджера справочника контрагентов
ОбработкаПолученияДанныхВыбора
        |    Справочник.Контрагенты КАК Контрагенты
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК ИерархияПартнеров
        |        ПО Контрагенты.Партнер = ИерархияПартнеров.Родитель
 
 Рекламное место пустует
   ildary
 
11 - 23.11.17 - 09:55
(10) спасибо за совет. В итоге я понял, что затея вообще не решаема в лоб - я попробовал сделать отбор через Все действия-Настроить список - и вижу, что для партнера второго уровня отбор не работает в режимах "Иерарх список" и "Дерево" ("Список" - работает). В итоге переделал заполнения списка для отбора вот так:

вместо

    СписокПартнеров = Новый СписокЗначений;
    СписокПартнеров.ЗагрузитьЗначения( ТЗ.ВыгрузитьКолонку( "Ссылка") );

сделал 

    СписокПартнеров = Новый СписокЗначений;
    Для Каждого Стр Из ТЗ Цикл
        
        ТекПартнер = Стр.Партнер;
        СписокПартнеров.Добавить( ТекПартнер );
        Если ЗначениеЗаполнено( ТекПартнер.Родитель ) Тогда// без родителя не найдет подчиненного партнера

            
            Пока ЗначениеЗаполнено( ТекПартнер.Родитель ) Цикл
                ТекПартнер = ТекПартнер.Родитель;
            КонецЦикла;
            
            СписокПартнеров.Добавить( ТекПартнер );
            
        КонецЕсли;
        
    КонецЦикла;

и теперь отбор работает не идеально, но хоть что-то - выводит корневого родителя.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует