Имя: Пароль:
1C
1C 7.7
v7: Возможно-ли организовать контекстную подсказку с выбором значения
0 BalBess
 
15.01.14
08:54
Задача такая: (вроде где-то было, не смог найти)
На форме есть поле ввода. Нужно при нажатии каждой кнопки, чтобы появлялся список из строк содержащих введеную подстроку.
Например, вводишь букву "Б", появляется подсказчик Бельгия, Болгария, Беларусь, нажимаешь "Е", остается Бельгия, Беларусь
Причем можно мышкой выбрать значение (щелкнуть по нему), и это значение вставиться в поле
Примерно как в поисковиках
1 ЧеловекДуши
 
15.01.14
08:59
(0) Напиши своё ВК :)
2 BalBess
 
15.01.14
09:09
(1) - оно конечно хорошо, но..
мож как-то родным языком попробовать обойтись

что уже пробовал (с помощью FormEx), на форме поле ввода типа строка

//****************************************************************************
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl , Символ, ФСО)
    Перем СписокФорм, ВыбЗначение;

    Если Форма.АктивныйЭлемент() = "стрВвода" Тогда
//        Сообщить("Нажата кнопка клавиатуры. " + КодКлавиши +" "+ Alt +" "+ Shift +" "+ Ctrl +" "+ Символ );
        
        // как-то нужно получить введенное значение
        АтрФормы = СоздатьОбъект("АтрибутФормы");
        АтрФормы.УстановитьАтрибут(Форма,"стрВвода");
        ЗначениеАтр = АтрФормы.Значение;
        Сообщить(ЗначениеАтр);

        // формируем список, в соответствии с введенным значением
        СписокФорм    = СоздатьОбъект("СписокЗначений");
        // для простоты пока вручную заполним
        СписокФорм.ДобавитьЗначение(1, "Россия");
        СписокФорм.ДобавитьЗначение(2, "Китай");

        // открываем список в виде меню
        // теряется фокус с поля
        Если СписокФорм.ВыбратьЗначение(ВыбЗначение, , , , 1) = 1 Тогда
            // значение выбрано
            СимвПред = "";
            СписокФорм.ПолучитьЗначение(ВыбЗначение, СимвПред);
            Сообщить(СимвПред);
            АтрФормы = СоздатьОбъект("АтрибутФормы");
            АтрФормы.УстановитьАтрибут(Форма,"стрВвода");
            АтрФормы.Значение = СимвПред; // не заполняется

        КонецЕсли;

    КонецЕсли;
    ФСО=1;
КонецПроцедуры
3 Guk
 
15.01.14
09:10
тут две подзадачи. первая, поймать событие ввода буквы в поле ввода и вторая, вывести варианты в список значений, подстраиваемый по месту ввода. первая задача много раз обсуждалась на форумах и вполне решаема, вторая задача реализуется штатными средствами, но будет работать очень долго, в зависимости от того, откуда тянутся данные. в любом случае, вторая задача скорее всего потребует прямых запросов...
4 Mikeware
 
15.01.14
09:13
5 dedmoroz777
 
15.01.14
09:15
(3) ну если там список стран, нафига запросы?
6 Guk
 
15.01.14
09:16
(5) я переборы не люблю. субд, кстати, тоже...
7 BalBess
 
15.01.14
09:23
(4) да, типа того. Где посмотреть
Список небольшой, не более 100 стран, хотя область применения большая, для контрагентов скорее всего через прямые запросы, но это уже вторая задача
8 BalBess
 
15.01.14
09:30
(3) первая задача тоже не тривиально решается
событие поймать можно. проблема первая, при показе списка значений теряется фокус с этого элемента.
проблема вторая, штатная обработка срабатывает после процедуры "ПриНажатииКнопкиКлавиатуры" и заменяет все что в ней было. Либо отключать штатный обработчик и отслеживать все кнопки..
9 trad
 
15.01.14
09:34
Программист всегда исправляет последнюю ошибку.