Имя: Пароль:
1C
1С v8
АвтоПодбор
,
0 NordMad
 
07.03.17
14:23
Хочу сделать свой автоподбор, платформа 8.3. нашел пример, написал такой текст:

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

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

КонецПроцедуры

Но во первых при вводе в поле ввода пишется один символ, потом поле очищается. Во вторых запрос возвращает какой то массив данных, однако в контекстном окне поля ввода пишется что ничего не найдено. поле ввода имеет тип строка. Задача заключается в том чтобы при вводе наименования нового элемента справочника пользователь мог видеть уже существующий список наименований. подскажите что добавить/исправить?
1 Мимохожий Однако
 
07.03.17
14:39
(0) Как соотносится приведенный запрос к объяснению? Отладчик пробовал?
2 NordMad
 
07.03.17
14:45
(1) запрос отбирает наименования по части введенного слова из справочника. пробовал. чистит поле видимо на строке:
ДанныеВыбора = ПолучитьСписокНаименований(текст);
3 NordMad
 
07.03.17
14:47
(1) возможно я вообще пошел не по тому пути. Просто мне показалось что АвтоПодбор это то что надо для решения данной задачи. Есть другой вариант?
4 Мимохожий Однако
 
07.03.17
14:54
Выбор из списка не пробовал?
5 NordMad
 
07.03.17
14:58
(4) нужен не выбор из списка. нужно чтобы при введении наименования для нового элемента пользователь видел имена уже существующих, похожих по написанию, чтобы предупредить его если имя будет совпадать. понятное дело что можно это проверять при записи, а если наименований много и часто при попытке добавить будет попадаться уже существующее наименование? проще же чтобы пользователь на этапе заполнения видел какие подобные наименования уже существуют
6 kochurovg
 
07.03.17
15:32
ДанныеВыбора - это СписокЗначений, а Тз.ВыгрузутьКолонку(...) - это массив. Может в этом все дело ?
7 NordMad
 
07.03.17
15:49
(6) Нет дело не в этом. ничего не меняется. Может быть есть какой то пример генерации списка в зависимости от вводимого текста в поле ввода?
8 NordMad
 
07.03.17
15:55
(6) хотя нет,так список вызывается, НО всё равно удаляется вводимый текст. т.е. получается что если я ввожу "А" то вываливается список наименований на "А" начинающийся. Но блин сама "А" удаляется! где это отловить?

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

    Возврат СЗ;
КонецФункции

&НаКлиенте
Процедура НаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
     СтандартнаяОбработка = ложь;
    ДанныеВыбора = ПолучитьСписокНаименований(текст);
    
КонецПроцедуры
9 NordMad
 
07.03.17
16:28
Сделал. работает
10 NordMad
 
07.03.17
16:30
просто автоПодбор не хочет работать с &наСервере. Собственно так и написано в СП, однако без контекста работает. т.е. не сам автоПодбор, а функция с запросом
Функция ПолучитьСписокНаименований(имя)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.