Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Автоподбор в поле выбора

Автоподбор в поле выбора
Я
   SpellKeeper
 
13.08.19 - 13:23
Добрый день.

В поле выбора мне нужно сделать ограничение на выбираемые значения при вводе текста.
Использую событие АвтоПодбор.

Вот моя процедура.
Процедура ДокументАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ПараметрыПолученияДанных = Неопределено;
    ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект), Текст);
КонецПроцедуры

Эта функция должна ограничить список выбора только теми значениями, которые есть в остатках.
Программа внутрь функции попадает. Функция ПолучитьСписокДокументовПоступления возвращает 2 значения.
На момент окончания процедуры в списке ДанныеВыбора сидит 2 значения.
По идее в списке выбора на форме должно появиться 2 строки.

На самом деле функция не работает. Ограничения не происходит. В список вываливаются все значения, соответствующие введенной строке.
Что любопытно, два моих отобранных значения отображаются без выделения (т.е. она все-таки отработала), а добавленные 1С с выделением подстроки зеленым цветом.

Я что-то не так сделал? Или это глюкавка релиза?

Релиз 8.3.12.1790
 
 
   Cyberhawk
 
1 - 13.08.19 - 13:24
Нельзя контекстные вызовы
   SpellKeeper
 
2 - 13.08.19 - 13:26
Функция ПолучитьСписокДокументовПоступления определена как &НаСервереБезКонтекста.
Там все норм.
   Cyberhawk
 
3 - 13.08.19 - 13:29
Параметры-реквизиты формы по значению тоже передавать надо, хотя это к твоему коду вроде не относится
   Cyberhawk
 
4 - 13.08.19 - 13:29
А нет, относится - передаешь Объект
   SpellKeeper
 
5 - 13.08.19 - 13:48
Не помогло.

Строку 
ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект), Текст);

заменил на ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект.Дата), Текст);

Результат тот же.

Я как-то не уверен, что передача объекта типа ДанныеФормыСтруктура на сервер это контекстный вызов.
   Cyberhawk
 
6 - 13.08.19 - 13:50
Остается проверить, заменив передачу реквизитов объекта на передачу свежесозданных переменных
   SpellKeeper
 
7 - 13.08.19 - 13:54
Не помогло.
   SpellKeeper
 
8 - 13.08.19 - 13:57
Я даже в функции ПолучитьСписокДокументовПоступления все параметры переделал на Знач....
Не помогает.
   Cyberhawk
 
9 - 13.08.19 - 14:00
Может в модуле менеджера ОбработкаПолученияДанныхВыбора для объектов из списка есть
   Cyberhawk
 
10 - 13.08.19 - 14:02
Ну и НачалоВыбора наверное тоже надо стандартную обработку отключить
   SpellKeeper
 
11 - 13.08.19 - 14:11
(9). Такой процедуры нет.
(10). Там все отключено. Изначально у меня уже был сделан выбор по этим же условиям. Но потребовался ручной ввод.

Я попробовал заполнять структуру ПараметрыПолученияДанных. Не рабоатет.

У меня такое ощущение, что это идеология такая. Сверху помещаются отобранные элементы, а все остальные - ниже. Типа, они в отбор не попадают, но выбрать можно.
   НадюшаЯ
 
12 - 13.08.19 - 14:26
в параметры выбора для поля можно загрузить список значений.
   SpellKeeper
 
13 - 13.08.19 - 14:30
(12) Я про это написал в 11.
Не работает.
   НадюшаЯ
 
14 - 13.08.19 - 14:36
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 2
    |    Организации.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.Организации КАК Организации";
    Результат = Запрос.Выполнить().Выгрузить();    
    Массив = Результат.ВыгрузитьКолонку("Ссылка");;  
    
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", Массив));
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
    Элементы.Организацияф.ПараметрыВыбора = НовыеПараметры;

КонецПроцедуры
   SpellKeeper
 
15 - 13.08.19 - 14:44
(14). Это, конечно, здорово. Только я пытаюсь сделать ограничение по вводу строки. Там после каждого символа свой набор данных возникает.
   НадюшаЯ
 
16 - 13.08.19 - 14:45
(15) т.е вы не попробовали да, но уверены что не работает на ввод по строке верно?
   НадюшаЯ
 
17 - 13.08.19 - 14:46
(15) Почему тогда организации только две по строке вводятся?
   НадюшаЯ
 
18 - 13.08.19 - 14:46
(15) Какие мы капризные еще и убедить надо.
   spiller26
 
19 - 13.08.19 - 15:03
У меня сделано так на реквизит

&НаКлиенте
Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    
    Если СтрДлина(Текст) > 2 Тогда
        СтандартнаяОбработка = Ложь;
        ДанныеВыбора = ПолучитьСписокВыбораКонтрагента(Текст);
    КонецЕсли;
    
КонецПроцедуры

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

    
    Если СтрДлина(пТекст) < 3 Тогда
        Возврат СписокВозврат;
    КонецЕсли;    

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20
    |    КонтрагентНайденные.Ссылка КАК КонтрагентСсылка,
    |    КонтрагентНайденные.ИНН КАК ИНН,
    |    КонтрагентНайденные.Наименование КАК Наименование,
    |    КонтрагентНайденные.НаименованиеПолное КАК НаименованиеПолное
    |ИЗ
    |    (ВЫБРАТЬ
    |        Контрагенты.Ссылка КАК Ссылка,
    |        Контрагенты.ИНН КАК ИНН,
    |        Контрагенты.Наименование КАК Наименование,
    |        Контрагенты.НаименованиеПолное КАК НаименованиеПолное
    |    ИЗ
    |        Справочник.Контрагенты КАК Контрагенты
    |    ГДЕ
    |        Контрагенты.ИНН ПОДОБНО &пТекстИНН
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        Контрагенты.Ссылка,
    |        Контрагенты.ИНН,
    |        Контрагенты.Наименование,
    |        Контрагенты.НаименованиеПолное
    |    ИЗ
    |        Справочник.Контрагенты КАК Контрагенты
    |    ГДЕ
    |        Контрагенты.Наименование ПОДОБНО &пТекст
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        Контрагенты.Ссылка,
    |        Контрагенты.ИНН,
    |        Контрагенты.Наименование,
    |        Контрагенты.НаименованиеПолное
    |    ИЗ
    |        Справочник.Контрагенты КАК Контрагенты
    |    ГДЕ
    |        Контрагенты.НаименованиеПолное ПОДОБНО &пТекст) КАК КонтрагентНайденные
    |
    |СГРУППИРОВАТЬ ПО
    |    КонтрагентНайденные.Ссылка,
    |    КонтрагентНайденные.ИНН,
    |    КонтрагентНайденные.Наименование,
    |    КонтрагентНайденные.НаименованиеПолное";
    Запрос.УстановитьПараметр("пТекст", "%"+ пТекст + "%");
    Запрос.УстановитьПараметр("пТекстИНН", пТекст + "%");
    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    Пока РезультатЗапроса.Следующий() Цикл
        тИНН = СокрЛП(РезультатЗапроса.ИНН);
        стрНаименование = СокрЛП(РезультатЗапроса.Наименование);
        стрНаименованиеПолное = СокрЛП(РезультатЗапроса.НаименованиеПолное);
        Если стрНаименование = стрНаименованиеПолное Тогда
            тНаименование = стрНаименование;
        Иначе
            тНаименование = стрНаименование + " " + стрНаименованиеПолное;
        КонецЕсли;    
        Если тИНН <> "" Тогда
            СписокВозврат.Добавить(РезультатЗапроса.КонтрагентСсылка, "(" + тИНН + ") " + тНаименование);
        Иначе
            СписокВозврат.Добавить(РезультатЗапроса.КонтрагентСсылка, тНаименование);
        КонецЕсли;    
    КонецЦикла;
    
    Возврат СписокВозврат;
    
КонецФункции

&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;

    ПараметрыФормы = Новый Структура;
    Если ТипЗнч(Объект.Контрагент) = Тип("СправочникСсылка.Контрагенты") И ЗначениеЗаполнено(Объект.Контрагент) Тогда
        ПараметрыФормы.Вставить("ТекущаяСтрока", Объект.Контрагент);
    КонецЕсли;

    ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы, Элемент);
    
КонецПроцедуры
   SpellKeeper
 
20 - 13.08.19 - 15:06
(16-18) Милочка, прежде чем флудить по чем зря, пояснения давать к коду надо.
Я так понял, что Вы предлагаете при создании формы на сервере заполнять список.
Только потом выцарапал нужный кусок. Да, работает.
   НадюшаЯ
 
21 - 13.08.19 - 15:12
(20) пф сделай за него, а он еще и носом воротит вместо спасибо. Трындец мужчины пошли ...
   НадюшаЯ
 
22 - 13.08.19 - 15:13
(20) да где хочешь его там и заполняй, чем ближе к началу выбора тем лучше.
   НадюшаЯ
 
23 - 13.08.19 - 15:14
(20) или я по вашему (0) не читала и от нефиг делать кусочек говнокода вам киданула?


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