Имя: Пароль:
1C
 
v8: Как обработать набор текста в поле ввода
0 Siberia
 
05.08.10
08:49
Есть поле ввода в табличном поле. В нем находится ссылка на справочник. Набираем первые буквы названия элемента справочника, нажимаем ентер. Если в справочнике несколько элементов с названием, которое начинается на эти первые буквы, то выпадает список выбора с этими элементами.
Подскажите, где, в какой процедуре можно найти этот список и обработать его?
1 Cheater
 
05.08.10
08:53
(0)АвтоПодборТекста (AutoCompleteText)
Синтаксис:
АвтоПодборТекста(<Текст>, <Текст авто-подбора>, <Стандартная обработка>)
Параметры:
<Текст>
Тип: Строка. Строка текста, введенная в поле ввода.
<Текст авто-подбора>
Тип: Строка. После завершения обработки события содержит текст для размещения в поле ввода.
<Стандартная обработка>
Тип: Булево. В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет.
Значение по умолчанию: Истина
Описание:
Возникает во время начала ожидания ввода текста (в процессе набора текста сделана пауза).
При стандартной отработке события происходит поиск в порядке полей, определенном при конфигурировании в свойстве объекта метаданных "Ввод по строке". Если найдено единственное значение, то производится автоподстановка полного текста.
Если введенному тексту соответствует несколько значений, то автоподстановки не происходит. Если в этот момент перейти на другой элемент управления, то возникает событие ОкончаниеВводаТекста.
2 Siberia
 
05.08.10
08:54
Как оперативно! Спасибо!
3 Siberia
 
05.08.10
09:19
Немного не получается. То есть обработка срабатывает при ожидании, но не срабатывает при нажатии ентер.
4 Cheater
 
05.08.10
09:31
(3) ОкончаниеВводаТекста() смотрела?
5 Cube
 
05.08.10
09:41
(3) Тебе нужно фотку в профиль добавить :)
6 Siberia
 
05.08.10
09:45
(5) Доделаю вот эту штуку и добавлю ))))

(4) Да, похоже то, что надо (торможу сегодня). Только еще такой момент. Как после нажатия на ентер вывести свой список? Что то типа ТекущиеДанные = СписокЗначений()??
7 Cheater
 
05.08.10
09:48
(6) ОкончаниеВводаТекста(<Текст>, <Значение>, <Стандартная обработка>)
СтандартнаяОбработка = Ложь и делай всё что хочешь
8 Cheater
 
05.08.10
10:00
+(7) только если меняешь, то и в АвтоПодборТекста() не забудь поменять
9 Siberia
 
05.08.10
10:15
(8) Это понятно. Не понятно как список значений вывести.
10 Siberia
 
05.08.10
10:20
То есть, после этой процедуры  в поле выбора должен вываливаться мой список значений.
Нашла Элемент.СписокВыбора = МойСписокЗначений. А как вывести его на экран?
11 Cube
 
05.08.10
10:22
Синтаксис помощник читать нужно :)

Процедура НоменклатураОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   Значение = Новый СписокЗначений;
   Значение.Добавить(Справочники.Номенклатура.НайтиПоКоду("0000007210"));
   Значение.Добавить(Справочники.Номенклатура.НайтиПоКоду("0000009837"));
   
КонецПроцедуры
12 Siberia
 
05.08.10
10:35
(11) Чукча не читатель ))))...
Тут другая проблема при подробном рассмотрении.
В процедуре АвтоПодборТекста при наборе букв и ожидании срабатывает правильно. То есть управление переходит перед выводом списка. А процедура ОкончаниеВводаТекста сначала выводит список, а потом передает управление. То есть, она мне не подходит получается.

Если подробнее:
Меня не устраивает список, который выпадает при выборе. Мне надо туда добавить колонки или значения в скобках. Вот, например, справочник улиц. Название может быть "Строителей", а тип улицы - "улица", "проезд" и пр. При стандатном выборе видно только название. А хотелось бы добавить тип.
13 Siberia
 
05.08.10
10:38
Может это можно другим способом сделать, а не мучить процедуры АвтоПодборТекста и ОкончаниеВводаТекста
14 Grusswelle
 
05.08.10
10:38
(0) Почему до сих пор нет фоты в личной карточке?! Немедленно исправить!
15 Siberia
 
05.08.10
10:39
(14)См (6)
Сначала надо сделать ))))
16 Grusswelle
 
05.08.10
10:41
(15) Ок. :-)
17 Siberia
 
05.08.10
10:48
(12)-(13) Способ неважен - лишь бы работало.
18 Cube
 
05.08.10
10:50
(12) Не правильно. Если пишешь

СтандартнаяОбработка = Ложь;

То список уже не выводится. Что мешает сделать так:

Процедура НоменклатураОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   
   Значение = Новый СписокЗначений;
   
   Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000007210");
   Значение.Добавить(Номенклатура, Номенклатура.Наименование + " (" + Номенклатура.Код + ")");
   
   Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000009837");
   Значение.Добавить(Номенклатура, Номенклатура.Наименование + " (" + Номенклатура.Код + ")");
   
КонецПроцедуры
19 stangen
 
05.08.10
11:08
или если не устраивает ОкончаниеВводаТекста, используй АвтоподборТекста, например, так

Процедура НоменклатураАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
  СтандартнаяОбработка = Ложь;
   
   СЗ = Новый СписокЗначений;
   
   Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000007210");
   СЗ.Добавить(Номенклатура, Номенклатура.Наименование + " (" + Номенклатура.Код + ")");
   
   Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000009837");
   СЗ.Добавить(Номенклатура, Номенклатура.Наименование + " (" + Номенклатура.Код + ")");
   
   ЭлементСЗ=ВыбратьИзСписка(СЗ,Элемент);
   Если ЭлементСЗ<>Неопределено Тогда
       Элемент.Значение =ЭлементСЗ.Значение;
   КонецЕсли;
   
КонецПроцедуры
20 Siberia
 
05.08.10
11:21
Спасибо! Все получилось. Фото прилагаю )))
21 Cube
 
05.08.10
11:33
(20) Кто там кто не понятно :)
22 Siberia
 
05.08.10
13:12
(21) Да все понятно. Я и дети. Правда, не все мои )))
Ошибка? Это не ошибка, это системная функция.