Имя: Пароль:
1C
 
v8: Как спозиционировать список значений на определенное значение перед выбором?
Ø
0 Андрюха1
 
03.11.05
08:43
Итак, как спозиционировать список значений на определенное значение перед выбором? Т.е. при открытии элемента справочника заполняю для реквизита Год список выбора:
  Для Сч = 1980 По 2030 Цикл
    СтрДата = Формат(Сч, "ЧГ=0"); // чтобы небыло пробела
    ЭлементыФормы.Год.СписокВыбора.Добавить(СтрДата);
  КонецЦикла;
По хорошему, после того как пользователь нажмет на кнопку списка выбора реквизита Год, надо бы спозиционировать список годов на текущий. Но как?
1 Macleod
 
03.11.05
09:25
ЭлементыФормы.Год.НайтиПоЗначению(2005);
Вроде так.
Или так: ЭлементыФормы.Год.СписокВыбора.НайтиПоЗначению(2005);
2 Андрюха1
 
03.11.05
09:30
(1) Не канает. НайтиПоЗначению() возвращает найденый элемент списка значений, а не позиционирует на нем :(
3 Macleod
 
03.11.05
09:34
Блин, чёта полистал ЖКК. Там не нашел ТекущаяСтрока() как в 7.7.
Щас еще покопаюсь. Где-то очень просто должно быть.
4 Fynjy
 
03.11.05
09:44
ПолеСписка (ListBox)
ТекущаяСтрока (CurrentRow)
Использование:
Чтение и запись.
Описание:
Тип: ЭлементСпискаЗначений. Содержит текущую строку поля списка.
См. также:
ЭлементСпискаЗначений
5 Winter
 
03.11.05
09:55
Ответ тут:
http://itland.ru/forum/index.php?showtopic=835&hl=Список+значений
6 Андрюха1
 
03.11.05
10:31
(4) Разговор идет не о ListBox, а о ChoiceBox, т.е. СписокВыбора.
(5) Данный пример позволяет установить значение для поля ввода, но не позиционирует список (т.е. список один фиг начинается с 1980 года)
7 A
 
03.11.05
10:33
А чем "ВыбратьЭлемент(<Заголовок>, <Элемент>)" не устраивает?
8 Андрюха1
 
03.11.05
10:34
(4) Извиняюсь, вопрос задан не корректно, в связи с тем, что я сам в процессе поиска понял что это не СписокЗначений, а СписокВыбора. Сорри.
9 Андрюха1
 
03.11.05
10:36
(7) Метод "ВыбратьЭлемент" показывает диалоговое окно выбора на экране, а выбор из СпискаВыбора - цивильной менюшкой под полем ввода.
10 A
 
03.11.05
10:42
(9) Если не секрет, а для чего всё это?.... Это реквизит формы или объекта?....
11 Андрюха1
 
03.11.05
10:48
(10) Конечно не серет. У справочника "АвтотранспортныеСредства" присутствует реквизит "ГодВыпуска", который представляет из себя на форме поле ввода с кнопочкой списка выбора, при нажатии на которую, должен выпадать список годов СПОЗИЦИОНИРОВАННЫЙ на текущем 2005 году.
12 Андрюха1
 
03.11.05
10:50
(10) Тут еще важно отметить, что пользователь после (или до) выбора года должен иметь возможность подкорректировать цифру ручками - по этому этот реквизит - поле ввода.
13 Filin
 
03.11.05
11:00
(11) А почему бы это поле сразу не заполнять нужным значением (и пользователь будет выбирать уже только если нужно другое значение)?
ЭлементыФормы.ГодВыпуска.Значение=ЭлементыФормы.ГодВыпуска.СписокВыбора.НайтиПоЗначению("2005").Значение;
14 Андрюха1
 
03.11.05
11:05
(13) Конечно можно, так я сейчас и делаю, но было бы ГОРАЗДО УДОБНЕЕ, если бы список при открытии был бы уже спозиционирован на текущем значении, а то приходится "крутить" его аж 1980 года. Во-первых неудобно, а во-вторых должно же быть решение. Как вариант можно открывать диалог через "ВыбратьЭлемент" - там и позиционируется без проблем, но ИМХО удобнее было бы поционировать <b>СписокВыбора</b>.
15 A
 
03.11.05
11:10
(14) А если просто число?........
16 Андрюха1
 
03.11.05
11:17
(15) Да можно и число, конечно, только тётки ошибок набьют - факт. Справочник большой. Или просто "98" вместо "1998", или еще чего...
 
Конечно можно обработку вставить для проверки набранного числа, но это уже не гуд. Еще один нюанс - если год не известен, то значение поля должно быть "не известно", т.е. тут уже кроме цифр еще и буквы допускаются, а значит оператор может по ошибке еще чего-нить напечатать.
 
Но мы уже обсуждаем как обойти проблему, а не решить ее. Я то может и обойдусь, а если еще кому-нибудь понадобится решить подобную проблему? В поиске напечатает человек вопрос, а ему - раз и готовое решение. Удобно!
17 Андрюха1
 
03.11.05
11:51
Господа! Решение найдено. Итак, кому интересно слушайте:
 
1. Объявляем в модуле переменную СписокГодВыпуска.
2. В методе формы ПриОткрытии инициализируем переменную и забиваем значениями годов:
  СписокГодаВыпуска = Новый СписокЗначений;
  Для Сч = 1980 По 2010 Цикл
    СтрДата = Формат(Сч, "ЧГ=0");
    СписокГодаВыпуска.Добавить(СтрДата);
  КонецЦикла;
3. Пишем процедуру для обработки события "Начало выбора из списка" поля ввода "ГодВыпуска":
Процедура ПриНачалеВыбора(Элемент, СтандартнаяОбработка)
  СтандартнаяОбработка = Ложь;
  Выбор = ВыбратьИзСписка(СписокГодаВыпуска, Элемент, СписокГодаВыпуска.НайтиПоЗначению(Элемент.Значение));
  Если Выбор <> Неопределено Тогда
    Элемент.Значение = Выбор.Значение;
  КонецЕсли;
КонецПроцедуры
Всем откликнувшимся большое спасибо!
18 mricoscom
 
03.11.05
12:23
Ну мне кажется здесь все просто, или я просто не понял вопроса:
ЭлементыФормы.ВидСортировки.СписокВыбора.Добавить("Теплоход","По теплоходам");
ЭлементыФормы.ВидСортировки.СписокВыбора.Добавить("Дата","По датам");
ВидСортировки="Теплоход";
19 Андрюха1
 
03.11.05
12:35
(18) Ну не знаю даже... Если ты думаешь что так будет правильно... А может ты действительно не понял вопроса? :0)
20 Filin
 
03.11.05
12:51
Хорошо, конечно, что решение найдено (хотя ВыбратьИзСписка немного не по теме озвученного в (0) и ниже).
:-))
21 mricoscom
 
03.11.05
13:07
(19) А ты попробуй. :-)
Перечитал вопрос. Кажется именно то, что нужно
22 Андрюха1
 
03.11.05
13:11
Пробую
23 Андрюха2
 
03.11.05
13:28
(21) Да не. Это не то. Видишь, получается что в реквизите (у нас - поле ввода) будет написано "Теплоход", но это список выбора на "Теплоход" не спозиционирует (хотя в твоём случае - да, т.к. у тебя "Теплоход" стоит первым).
 
Попробуй загнать в СписокВыбора года с 1980 по 2030 и увидишь, что что бы мы не присваивали полю ввода, а выпадающий список будет один фиг начинаться с "1980" (т.е. с первого значения). А вот в решении (17) с участием "ВыбратьИзСписка" (хоть это немного и не отвечает вопросу) результат такой, какой надо, т.е.:
1. Выпадающий список начинается с текущего значения.
2. Текущее значение можно подредактировать "ручками".
 
В любом случае, извини за сарказм. Я не хотел никого обидеть, просто подумал, что ты в другую тему хотел написать, просто окна перепутал.
24 Андрюха2
 
03.11.05
14:02
(21) А может быть я не так тебя понял? Ты напиши кусок кода.
25 Sheridan
 
03.11.05
16:14
Процедура ИсточникНачалоВыбора(Элемент, СтандартнаяОбработка)
  СтандартнаяОбработка=Ложь;
  СписокВыбора = Элемент.СписокВыбора;
  Выбор = ВыбратьИзСписка(СписокВыбора, Элемент, СписокВыбора.НайтиПоЗначению(Элемент.Значение));
  Если Выбор <> Неопределено Тогда
    Элемент.Значение = Выбор.Значение;
  КонецЕсли;
КонецПроцедуры
:)
26 Filin
 
03.11.05
17:20
(25) Пункт 3 поста 17 читаем внимательно!
и делаем вывод: читать надо внимательно!!!
:-)))
27 Андрюха1
 
04.11.05
05:27
(25) Но все-равно огромное спасибо. Чувствую, что без поддержки, в случае чего, не останусь!
 
Спасибо вам, люди!
28 Sheridan
 
04.11.05
18:04
Я посмотрел начало, дальше не стал смотреть и привел пример :)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.