Имя: Пароль:
1C
1С v8
Автоподбор в поле выбора
,
0 SpellKeeper
 
13.08.19
13:23
Добрый день.

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры
15 SpellKeeper
 
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) Какие мы капризные еще и убедить надо.
19 spiller26
 
13.08.19
15:03
У меня сделано так на реквизит

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

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

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

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

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

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

    ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы, Элемент);
    
КонецПроцедуры
20 SpellKeeper
 
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) не читала и от нефиг делать кусочек говнокода вам киданула?