Имя: Пароль:
1C
1C 7.7
v7: Выбор из списка значений
0 Asakra
 
10.06.14
16:25
на форме есть кнопка. по нажатию кнопки выпадает список значений под кнопкой.

задача. вывалить список по горячей клавише.
проблема. текущий активный элемент может быть не кнопка. пользователь ждет, что список выпадет под кнопкой, а он выпадает где попало.

Автивизировать("МояКнопка") в процедуре, где и вызывается выпадание списка не помогает.

может FormEx умеет? я не нашел как.
у него ВыбратьЗначение либо по активному атрибуту, либо где курсор.

или как активизировать кнопку до вывода списка?
1 palpetrovich
 
10.06.14
16:28
Автивизировать надо в предоперделенной процедуре, классика - ПриЗакрытии
2 an-korot
 
10.06.14
16:31
сделать выпадающее окно?
3 Asakra
 
10.06.14
16:32
(1) дак, а зачем при закрытии? она ж отработает, только при закрытии формы.
4 Asakra
 
10.06.14
16:32
(2) как? чем?
5 an-korot
 
10.06.14
16:33
(2) поле со списком, имею ввиду.
6 an-korot
 
10.06.14
16:34
вариант:
при нажатии кнопки, делать активным элементом твою кнопку, по завершеннии выбора возвращать активным элементом то которое было до нажатия кнопки.
7 Asakra
 
10.06.14
16:34
(5) будет же тупо по центру экрана.
может еще варианты есть?
хотелось бы под кнопкой...
8 Asakra
 
10.06.14
16:35
(6) как?
пофиг, пусть кнопка активной останеться
9 palpetrovich
 
10.06.14
16:35
(4) как-то так:
Процедура ПриЗакрытии()
    
    Если МожноЗакрыть = Нет Тогда
        Активизировать("КакойТоРеквизит", 1);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
КонецПроцедуры

Процедура КакаяТоПроцедура()
    
    МожноЗакрыть = Нет;
    Форма.Закрыть();
    
КонецПроцедуры
10 Asakra
 
10.06.14
16:39
(9) не помогло!
11 Asakra
 
10.06.14
16:41
(9) то же самое, что просто Активизировать("мояКнопка")
кнопка становиться активной после закрытия списка
12 an-korot
 
10.06.14
16:45
Asakra, поле со списком точно не работает?
может ты путаешь это строка которая с треугольником справа, и выпадающим полем на указанную высоту.
13 Asakra
 
10.06.14
16:47
(12)
список = СоздатьОбъект("СписокЗначений");
список.ДобавитьЗначение("знч1");
список.ДобавитьЗначение("знч2");
Если список.ВыбратьЗначение(ВыбЗнач,,,,1) < 1 Тогда
    Возврат;
КонецЕсли;
14 palpetrovich
 
10.06.14
16:48
(13) т.е. списка на форме нет?
15 Asakra
 
10.06.14
16:48
(14) неа
16 an-korot
 
10.06.14
16:51
вот тут решение через фальшивое закрытие формы,
оно позволяет менять активизировать элемент на который нужен фокус:
смотри 21 ответ.
http://forum.infostart.ru/forum9/topic71098/

конечно хитропопое решение почему то просто обновить форму не помогает )))
17 palpetrovich
 
10.06.14
16:53
(15) вроде  все работает http://www.fayloobmennik.net/3873166
18 Asakra
 
10.06.14
16:56
(16) а (9) не оно?
19 Asakra
 
10.06.14
16:59
(17) вы кнопке назначьте горячую кнопку, например F7, и попробуйте нажать F7, активировав пред этим поле.
20 an-korot
 
10.06.14
16:59
(18) да да, тут базовый код указан.
21 Asakra
 
10.06.14
17:00
(20)  см. (10)
22 palpetrovich
 
10.06.14
17:02
(19) наконец-то понял, пробую... :)
23 Asakra
 
10.06.14
17:03
может svcsvc.dll поможет?
пример не могу найти.
24 palpetrovich
 
10.06.14
17:04
+22 да, подтверждаю, не работает ...думаю :)
25 an-korot
 
10.06.14
17:10
(21) у меня и мой совет не работает %(  по той ссылке что я давал
26 Ёпрст
 
гуру
10.06.14
17:10
Да ё...

учись, студент!

Перем МожноЗакрыть;
//*******************************************
Процедура ТвояПроцаНаКнопке()
    МожноЗакрыть = 1;
    Активизировать("ТвойРеквизит",1);
    Форма.Закрыть(0);
КонецПроцедуры
//======================================================================
Процедура ПриЗакрытии()
    Если МожноЗакрыть=1 Тогда
        СтатусВозврата(0);
        МожноЗакрыть=0;
        СЗ = СоздатьОбъект("СписокЗначений");
        Для к = 1 По 10 Цикл
            СЗ.ДобавитьЗначение("Вася_"+к);
        КонецЦикла;
        СЗ.ВыбратьЗначение(,,,60,2);        
    КонецЕсли;
КонецПроцедуры
27 an-korot
 
10.06.14
17:12
(26) да не работает
28 an-korot
 
10.06.14
17:13
(26) список выпадает у того элемента который активен
29 Asakra
 
10.06.14
17:13
(26) во! пасиб!
30 an-korot
 
10.06.14
17:14
Asakra, если использовать поле со списком то оно активизируется, правда список не выпадает :( но можно курсором выбирать по 1 строке.
31 Ёпрст
 
гуру
10.06.14
17:15
(28) еще подумай.
32 an-korot
 
10.06.14
17:15
(26) а нет работает я не в том месте активизировать ставил
33 an-korot
 
10.06.14
17:15
(31) да работает
34 Asakra
 
10.06.14
17:15
(30) см. (26) все работает! :)
35 an-korot
 
10.06.14
17:16
(34) да да увидел ))))
36 Asakra
 
10.06.14
17:16
(33) упс
37 Asakra
 
10.06.14
17:16
ВСЕМ СПАСИБО!
38 Ёпрст
 
гуру
10.06.14
17:17
39 palpetrovich
 
10.06.14
17:18
хе, а еще, наверное, можно "список" под "кнопку"  засунуть и не париться с всем этим :)
40 an-korot
 
10.06.14
17:19
(39) неа, попробуй, меняется активный объект только после фальшивого закрытия.
41 palpetrovich
 
10.06.14
17:21
(40) да не, я не о том, вообще телодвижения с "фальшивым закрытием" - не нужны
42 an-korot
 
10.06.14
17:22
(41) челу не нравится что список выбора выподает после нажатия хоткея у того элемента который сейчас активен, а не у той кнопки у которого этот список висит.
43 Asakra
 
10.06.14
17:28
О!
Атрибут = СоздатьОбъект("АтрибутФормы");
Атрибут.УстановитьАтрибут(Форма, "кнСоздатьДокумент");
    
СтрокаДляВыбора = СтрЗаменить("знч1,знч2", ",", РазделительСтрок);
    
СерверВыбора = СоздатьОбъект("Svcsvc.Service");
    
_Х = 0; _У = 0; Ширина = 0; Высота = 0;
Атрибут.ПолучитьКоординаты(_Х,_У,Ширина,Высота,1);
ЗначВозврата = СерверВыбора.FilterValue(СтрокаДляВыбора,25,,_Х,_У + Высота);
44 palpetrovich
 
10.06.14
17:29
(42) блин, внимание рассеяно, с поста (22) уже забыл :)
45 Asakra
 
10.06.14
18:20
может кому сгодится. так работает как надо:
СерверВыбора = СоздатьОбъект("Svcsvc.Service");
    
Атрибут = СоздатьОбъект("АтрибутФормы");
Атрибут.УстановитьАтрибут(Форма, "МояКнопка");
    
СтрокаДляВыбора = СтрЗаменить("Доставка ТМЦ, ,ДоставкаТМЦ,Поступление ТМЦ, ,ПоступлениеТМЦ", ",", РазделительСтрок); // и т.п.
    
_Х = 0; _У = 0;Высота = 0;
Атрибут.ПолучитьКоординаты(_Х,_У,,Высота,1);
ЗначВозврата = СерверВыбора.PopupMenu(СтрокаДляВыбора, 2, _Х, _У + Высота);

для работы нужна: svcsvc.dll
http://www.script-coding.com/svcsvc.html
46 Asakra
 
10.06.14
18:27
(45) там косяк. такот надо:
СтрокаДляВыбора = СтрЗаменить("Доставка ТМЦ| |ДоставкаТМЦ,Поступление ТМЦ| |ПоступлениеТМЦ", ",", РазделительСтрок); // и т.п.
Независимо от того, куда вы едете — это в гору и против ветра!