И чего не сделаешь ради клиента!
Говоришь: "Нельзя этого! Не предусмотрели разрабы 1С!"
А он: "Хоцца!"
И ведь не приемлют отказа... А может, это только тогда, когда со мной работают? Умеют же другие говорить "нет", и им охотно верят! Помнится, какой-то новый клиент на полном серьезе уверял меня, что нельзя в отчет 1С вывести одновременно сумму из шапки и из табличной части одного документа по строкам, чтобы сумма в шапке не умножилась на количество строк. Так программист сказал... И сделал поэтому дублирующий табличную часть и шапку регистр, чтобы данные в отчеты выводить. Разумеется, взял за свою работу оплату...
Но в моем случае, ситуация хуже, хотя проблему начинаешь понимать только в процессе реализации. На первый взгляд, кажется, что все просто, ведь выпадающий список заполнить по вхождению не сложно. Используем ПОДОБНО и - вуаля: список есть!
З=Новый Запрос(
"ВЫБРАТЬ
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Наименование
| И НЕ Контрагенты.ПометкаУдаления
| И НЕ Контрагенты.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Наименование");
З.УстановитьПараметр("Наименование","%"+Текст+"%");
Рез=З.Выполнить().Выгрузить();
СписокКА.ЗагрузитьЗначения(Рез.ВыгрузитьКолонку("Наименование"));
Осталось решить вопрос, как присоединенный к полю ввода список открыть. Казалось бы, простая функция: изменить программно видимость существующего списка, привязанного к элементу формы. А нету!
Но решение вроде как дает метод "ВыбратьИзСписка". Он позволяет открыть сформированный список и что-то из него выбрать. Правда, список в этом случае уже не будет списком поля ввода, а должен быть создан программно. Но разве это проблема?
...
СписокКА = Новый СписокЗначений;
СписокКА.ЗагрузитьЗначения(Рез.ВыгрузитьКолонку("Наименование"));
ВыбратьИзСписка(СписокКА, ЭлементыФормы.ПолеКА);
Проблема появляется, когда мы это решим опробовать в работе: открывающийся список подло перехватывает фокус ввода и ждет, чтобы мы что-нибудь из него выбрали. А если мы хотим продолжить ввод слова, как тогда?
Похоже, и это решение не подходит, ведь во всех нормальных средах разработки имеется возможность продолжать ввод в поле ввода, а список найденных значений, не перехватывая фокус ввода, снизу сам по себе обновляется, дружелюбно ожидая, пока на него обратят внимание. Или не обратят. И тогда он сам закроется, как только мы перестанем вводить нужную нам информацию и займемся чем-то еще...
Похоже, придется делать все самим. Но тому, кто столкнулся с проблемой впервые, придется потратить пару часов на поиск решения в сети, ведь хочется же верить, что большой брат заботится о нас и предусмотрел программное открытие списка выбора. И пару часов точно придется потратить, чтобы себя убедить в обратном. Потому и публикую.
И так, решение:
- - Делаем список на форме, видимость = false
- - Заполнение вешаем на обработчик автоподбора текста
- - Заполнили - делаем видимым
И - фишка! Привязываем к форме обработчик ожидания: если список выбора открыт и фокус на поле ввода или этом списке - все ок. Как только фокус ушел на что-то еще - список закрываем.
Работает! Можно скачать в прилагаемом архиве и использовать.