Выпадающий список и ручной ввод у элемента формы

1. user1226970 17.12.20 03:51 Сейчас в теме
Привет всем)Подскажите как установить в УФ ,что поле ввода дб выпадающим списком и должен быть еще ручной ввод?
Программно установила список значений выпадающего списка,а как сделать еще возможность ручного ввода значений не пойму.
По теме из базы знаний
Найденные решения
14. user705522_constantin_h 35 17.12.20 10:39 Сейчас в теме
(10)У меня так сделано. Поле ввода Строка, кнопка выбора Да.
Событие Начало выбора:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ПараметрыФормы = Новый Структура("ТекущаяСтрока", ПолучитьТеплоход(СокрЛП(Объект.ПодкарантинныйОбъектУточнение)));
	ОткрытьФорму("Справочник.РФО_Теплоходы.Форма.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьТеплоход(Наименование)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	РФО_Теплоходы.Ссылка
	               |ИЗ
	               |	Справочник.РФО_Теплоходы КАК РФО_Теплоходы
	               |ГДЕ
	               |	РФО_Теплоходы.Наименование = &Наименование
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	РФО_Теплоходы.Наименование";
	Запрос.УстановитьПараметр("Наименование", Наименование);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Справочники.РФО_Теплоходы.ПустаяСсылка();
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Возврат Выборка.Ссылка;
	КонецЕсли;
КонецФункции
Показать

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

Событие При изменении:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеПриИзменении(Элемент)
	Если ЗначениеЗаполнено(СокрЛП(Объект.ПодкарантинныйОбъектУточнение)) Тогда
		ПодкарантинныйОбъектУточнениеПриИзмененииНаСервере();
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПодкарантинныйОбъектУточнениеПриИзмененииНаСервере()
	Объект.ПодкарантинныйОбъектУточнение = СокрЛП(Объект.ПодкарантинныйОбъектУточнение);
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	РФО_Теплоходы.Ссылка
	               |ИЗ
	               |	Справочник.РФО_Теплоходы КАК РФО_Теплоходы
	               |ГДЕ
	               |	РФО_Теплоходы.Наименование = &Наименование";
	Запрос.УстановитьПараметр("Наименование", Объект.ПодкарантинныйОбъектУточнение);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		НовыйТеплоход = Справочники.РФО_Теплоходы.СоздатьЭлемент();
		НовыйТеплоход.Наименование = Объект.ПодкарантинныйОбъектУточнение;
		НовыйТеплоход.Записать();
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Объект.ПодкарантинныйОбъектУточнение = Выборка.Ссылка;
	КонецЕсли;
КонецПроцедуры
Показать

Если введено значение, которого не было в списке, введённое значение добавляется в справочник.
Egovigor; user1226970; +2 Ответить
17. user705522_constantin_h 35 17.12.20 11:48 Сейчас в теме
(16)
А по АвтоПодбору это не все? там наверное есть на клиенте?

Да, есть НаКлиенте:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ПодкарантинныйОбъектУточнениеАвтоПодборНаСервере(Текст, ДанныеВыбора);
	СтандартнаяОбработка = Ложь
КонецПроцедуры
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. unknow_user 17.12.20 04:59 Сейчас в теме
(1) Добавить реквизит объекта с типом строка, вынести на форму, заполнить список выбора и поставить галку редактирование текста
3. user1226970 17.12.20 05:56 Сейчас в теме
(2)Редактирование текста стоит галка, список я заполняю программно из запроса,тип реквизита с выпадающим списком -строка,все равно нет возможности ручного ввода
5. unknow_user 17.12.20 07:05 Сейчас в теме
(3) Верно,элемента списка с типом строка. Но получается, что редактируешь элемент списка, так не получится, как строку его редактировать. Если нужно строкой редактировать, то и тип элемента должен быть строка, а не сз с типом строка. Как вариант в 1 можно
6. user1226970 17.12.20 08:42 Сейчас в теме
(5)не поняла,у меня тип элемента итак строка!просто выбор идет из списка значений
12. unknow_user 17.12.20 10:11 Сейчас в теме
(6) "выбор идет из списка значений" . Редактировать строкой можно только строку!
Проще посмотрите в поисковике СписокВыбора 1С
4. user1226970 17.12.20 05:58 Сейчас в теме
(2)у меня стоит галка-режим выбора из списка
7. SlavaKron 17.12.20 08:51 Сейчас в теме
(4) Если вы хотите чтобы была возможность вводить значения не из списка выбора, отключите режим выбора из списка и включите свойство поля КнопкаВыпадающегоСписка.
Andrey_R91; vladislav.ivanovsky; triviumfan; +3 Ответить
8. user1226970 17.12.20 09:18 Сейчас в теме
(7)Хорошо,а как тогда заполнить выпадающий список ?
9. SlavaKron 17.12.20 09:18 Сейчас в теме
(8) Выпадающий список формируется из списка выбора элемента.
10. user1226970 17.12.20 10:02 Сейчас в теме
(9)а как программно его заполнить?Он должен заполняться выборкой
11. SlavaKron 17.12.20 10:10 Сейчас в теме
(10)
СписокВыбора = Элементы.Реквизит1.СписокВыбора;
Пока Выборка.Следующий() Цикл
	СписокВыбора.Добавить(Выборка.Значение);
КонецЦикла;
13. user1226970 17.12.20 10:34 Сейчас в теме
(12)
(11)Ребят,спасибо)Сейчас попробую
14. user705522_constantin_h 35 17.12.20 10:39 Сейчас в теме
(10)У меня так сделано. Поле ввода Строка, кнопка выбора Да.
Событие Начало выбора:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ПараметрыФормы = Новый Структура("ТекущаяСтрока", ПолучитьТеплоход(СокрЛП(Объект.ПодкарантинныйОбъектУточнение)));
	ОткрытьФорму("Справочник.РФО_Теплоходы.Форма.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьТеплоход(Наименование)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	РФО_Теплоходы.Ссылка
	               |ИЗ
	               |	Справочник.РФО_Теплоходы КАК РФО_Теплоходы
	               |ГДЕ
	               |	РФО_Теплоходы.Наименование = &Наименование
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	РФО_Теплоходы.Наименование";
	Запрос.УстановитьПараметр("Наименование", Наименование);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Справочники.РФО_Теплоходы.ПустаяСсылка();
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Возврат Выборка.Ссылка;
	КонецЕсли;
КонецФункции
Показать

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

Событие При изменении:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеПриИзменении(Элемент)
	Если ЗначениеЗаполнено(СокрЛП(Объект.ПодкарантинныйОбъектУточнение)) Тогда
		ПодкарантинныйОбъектУточнениеПриИзмененииНаСервере();
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПодкарантинныйОбъектУточнениеПриИзмененииНаСервере()
	Объект.ПодкарантинныйОбъектУточнение = СокрЛП(Объект.ПодкарантинныйОбъектУточнение);
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	РФО_Теплоходы.Ссылка
	               |ИЗ
	               |	Справочник.РФО_Теплоходы КАК РФО_Теплоходы
	               |ГДЕ
	               |	РФО_Теплоходы.Наименование = &Наименование";
	Запрос.УстановитьПараметр("Наименование", Объект.ПодкарантинныйОбъектУточнение);
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		НовыйТеплоход = Справочники.РФО_Теплоходы.СоздатьЭлемент();
		НовыйТеплоход.Наименование = Объект.ПодкарантинныйОбъектУточнение;
		НовыйТеплоход.Записать();
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		Объект.ПодкарантинныйОбъектУточнение = Выборка.Ссылка;
	КонецЕсли;
КонецПроцедуры
Показать

Если введено значение, которого не было в списке, введённое значение добавляется в справочник.
Egovigor; user1226970; +2 Ответить
15. user705522_constantin_h 35 17.12.20 11:23 Сейчас в теме
(10)Ещё забыл событие Автоподбор:
&НаСервереБезКонтекста
Процедура ПодкарантинныйОбъектУточнениеАвтоПодборНаСервере(Текст, ДанныеВыбора)
	Запрос = Новый Запрос; 
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	РФО_Теплоходы.Ссылка
	|ИЗ
	|	Справочник.РФО_Теплоходы КАК РФО_Теплоходы
	|ГДЕ
	|	РФО_Теплоходы.Наименование ПОДОБНО &Наименование
	|	И НЕ РФО_Теплоходы.ПометкаУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	РФО_Теплоходы.Наименование"; 
	Запрос.УстановитьПараметр("Наименование",СокрЛП(Текст)+"%"); 
	ТЗ = Запрос.Выполнить().Выгрузить(); 
	Если ТЗ.Количество()>0 Тогда 
		СтандартнаяОбработка = Ложь; 
		Массив = ТЗ.ВыгрузитьКолонку("Ссылка"); 
		СписокЗначений = Новый СписокЗначений; 
		СписокЗначений.ЗагрузитьЗначения(Массив); 
		ДанныеВыбора = СписокЗначений; 
	КонецЕсли; 
КонецПроцедуры
Показать
16. user1226970 17.12.20 11:41 Сейчас в теме
(11)сделала
(15)
&НаСервереБезКонтекста
Процедура ПодкарантинныйОбъектУточнениеАвтоПодборНаСервере(Текст, ДанныеВыбора)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РФО_Теплоходы.Ссылка
|ИЗ
| Справочник.РФО_Теплоходы КАК РФО_Теплоходы
|ГДЕ
| РФО_Теплоходы.Наименование ПОДОБНО &Наименование
| И НЕ РФО_Теплоходы.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| РФО_Теплоходы.Наименование";
Запрос.УстановитьПараметр("Наименование",СокрЛП(Текст)+"%");
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество()>0 Тогда
СтандартнаяОбработка = Ложь;
Массив = ТЗ.ВыгрузитьКолонку("Ссылка");
СписокЗначений = Новый СписокЗначений;
СписокЗначений.ЗагрузитьЗначения(Массив);
ДанныеВыбора = СписокЗначений;
КонецЕсли;
КонецПроцедуры
Показать


А по АвтоПодбору это не все? там наверное есть на клиенте?
17. user705522_constantin_h 35 17.12.20 11:48 Сейчас в теме
(16)
А по АвтоПодбору это не все? там наверное есть на клиенте?

Да, есть НаКлиенте:
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ПодкарантинныйОбъектУточнениеАвтоПодборНаСервере(Текст, ДанныеВыбора);
	СтандартнаяОбработка = Ложь
КонецПроцедуры
18. user1226970 17.12.20 11:51 Сейчас в теме
(17)
&НаКлиенте
Процедура ПодкарантинныйОбъектУточнениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ПодкарантинныйОбъектУточнениеАвтоПодборНаСервере(Текст, ДанныеВыбора);
СтандартнаяО


Спасибо)
20. user1226970 17.12.20 12:27 Сейчас в теме
(18)
&НаКлиенте
Процедура НаградыФизическихЛицНомерПриказаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ТЧНаграда =Элементы.НаградыФизическихЛиц.ТекущиеДанные;
    ПараметрыФормы = Новый Структура("ТекущаяСтрока", ПолучитьНаграду(ТЧНаграда.Награда));
    ОткрытьФорму("Справочник.Награды.Форма.ФормаЭлемента", ПараметрыФормы, Элемент);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьНаграду(Награда)
   Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НаградыНомераИДатыПриказов.НомерПриказа КАК НомерПриказа
		|ИЗ
		|	Справочник.Награды.НомераИДатыПриказов КАК НаградыНомераИДатыПриказов
		|ГДЕ
		|	НаградыНомераИДатыПриказов.Ссылка = &Ссылка";

	Запрос.УстановитьПараметр("Ссылка", Награда);	
    РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		НомерПриказа="";
        Возврат НомерПриказа;
    Иначе
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.НомерПриказа;
    КонецЕсли;
КонецФункции



&НаКлиенте
Процедура  НаградыФизическихЛицНомерПриказаПриИзменении(Элемент)
	 ТЧНаграда =Элементы.НаградыФизическихЛиц.ТекущиеДанные;
    Если ЗначениеЗаполнено(ТЧНаграда.Награда) Тогда
        НаградыФизическихЛицНомерПриказаПриИзмененииНаСервере(ТЧНаграда.Награда,ТЧНаграда.НомерПриказа);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура  НаградыФизическихЛицНомерПриказаПриИзмененииНаСервере(Награда,НомерПриказа)
   
    Запрос = Новый Запрос;
    Запрос.Текст = 
	"ВЫБРАТЬ
		|	НаградыНомераИДатыПриказов.НомерПриказа КАК НомерПриказа
		|ИЗ
		|	Справочник.Награды.НомераИДатыПриказов КАК НаградыНомераИДатыПриказов
		|ГДЕ
		|	НаградыНомераИДатыПриказов.Ссылка = &Ссылка";

	Запрос.УстановитьПараметр("Ссылка", Награда);	
    РезультатЗапроса = Запрос.Выполнить();
	Если Не  РезультатЗапроса.Пустой() Тогда
		Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий() ;
		НомерПриказа = Выборка.НомерПриказа;
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура НаградыФизическихЛицНомерПриказаАвтоПодборНаСервере(Текст, ДанныеВыбора,Награда)
	Запрос = Новый Запрос; 
	Запрос.Текст = 
	"ВЫБРАТЬ
		|	НаградыНомераИДатыПриказов.НомерПриказа КАК НомерПриказа
		|ИЗ
		|	Справочник.Награды.НомераИДатыПриказов КАК НаградыНомераИДатыПриказов
		|ГДЕ
		|	НаградыНомераИДатыПриказов.Ссылка = &Ссылка";

	Запрос.УстановитьПараметр("Ссылка", Награда);	
	ТЗ = Запрос.Выполнить().Выгрузить(); 
	Если ТЗ.Количество()>0 Тогда 
		СтандартнаяОбработка = Ложь; 
		Массив = ТЗ.ВыгрузитьКолонку("НомерПриказа"); 
		СписокЗначений = Новый СписокЗначений; 
		СписокЗначений.ЗагрузитьЗначения(Массив); 
		ДанныеВыбора = СписокЗначений; 
	КонецЕсли; 
КонецПроцедуры

&НаКлиенте
Процедура НаградыФизическихЛицНомерПриказаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ТЧНаграда = Элементы.НаградыФизическихЛиц.ТекущиеДанные;

	НаградыФизическихЛицНомерПриказаАвтоПодборНаСервере(Текст, ДанныеВыбора,ТЧНаграда.Награда);
    СтандартнаяОбработка = Ложь
КонецПроцедуры
Показать
19. user1226970 17.12.20 12:27 Сейчас в теме
(17)На основании вашего написала код,первый раз выбираешь значение,все норм,второй раз из списка выбираешь,оно не сохраняется(
21. user1226970 17.12.20 12:30 Сейчас в теме
(17) И почему то автоПодбор не работает( то есть Если я выбираю определенное значение, соответствующее значению из выпадающего списка, оно и должно остаться при автоподборе
23. user705522_constantin_h 35 17.12.20 13:08 Сейчас в теме
(21)У меня при начале ввода подбираются в список выбора подходящие значения. Если выбрать из предложенного списка, а затем нажать кнопку Выбора, то будет активна строка с выбранным значением. Если ввести новое значение, то оно добавится в справочник и при следующем нажатии на кнопку выбора будет активна добавленная строка.
Прикрепленные файлы:
user1226970; +1 Ответить
24. user1226970 17.12.20 13:14 Сейчас в теме
(23)Да,я что то затупила))все работает))Спасибо еще раз)
22. user705522_constantin_h 35 17.12.20 12:51 Сейчас в теме
(19)У вас же в запросе:
    Запрос.Текст = 
    "ВЫБРАТЬ
        |    НаградыНомераИДатыПриказов.НомерПриказа КАК НомерПриказа
        |ИЗ
        |    Справочник.Награды.НомераИДатыПриказов КАК НаградыНомераИДатыПриказов
        |ГДЕ
        |    НаградыНомераИДатыПриказов.Ссылка = &Ссылка";

То есть вы отбираете по ссылке.

А передаёте вы в поле:
    Если Не  РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий() ;
        НомерПриказа = Выборка.НомерПриказа;
    КонецЕсли;

Естественно НомерПриказа в Ссылке не найдётся.
25. Serg2000mr 321 23.08.23 20:42 Сейчас в теме
(0) Чтобы сделать выпадающий список одновременно с ручным вводом у элемента формы нужно:

В свойствах элемента - поля ввода указать:
● КнопкаВыпадающегоСписка = Да
● РежимВыбораИзСписка = Нет
● СписокВыбора - пусто

Указать обработчик события АвтоПодбор:

&НаКлиенте
Процедура НоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	Если Ожидание = 0 Тогда
		
		ДанныеВыбора = Новый СписокЗначений;
		ДанныеВыбора.Добавить("Яблоки");
		ДанныеВыбора.Добавить("Помидоры");
		СтандартнаяОбработка = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры
Показать


Это все, можно и редактировать текст, и выбирать его из списка
Прикрепленные файлы:
NotFree; mrm1212; ErshovAlex; +3 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот