Выпадающие списки и т.д…

Фирма "1С"

Из кино выходит мужчина и говорит
-Вот говорят: «фильм для дураков, филь для дураков».
А мне понравился!
Анекдот.

Не смотря на то, что 1С ругают, мне эта продукт нравится. Да возможно он убивает в человеке программиста. Код, который под него пишут, может быть (да почти всегда) просто ужасен.

То, что в языке 1С нет ООП убивает не меньше чем то что встроенный язык на «ридной мове».
И много чего еще «хорошего»… Но сама система мне нравится.
Возможно, потому что я работал и с более костными продуктами. Где по минимум документации. Где багги выявляешь только ты т.к. система не популярна. Где внутренний язык не похож ни на что до этого виденное, а его среда поражает новаторствами в юзабилити.
В общем любой человек после такого просто влюбится в 1С 🙂
1С на самом деле мне нравится и за то что ее очень легко приспособить под свои нужды. Легко модифицируется под изменяющиеся желания пользователей.

Ладно, хватит петь дифирамбы. Покажу пару приятных функций.

  • ВыбратьИзСписка
  • ВыбратьИзМеню

Функции позволят вам вывести выпадающий список или меню к любому контроллу на форме.

  1. Пример использования «Поля выбора»
  2. Как можно полю ввода сделать такой же выпадающий список, как и в поле выбора
  3. Как к кнопке добавить возможность выбирать через меню

Данные для выбора берутся из справочника «Контрагенты».
Для начала скриншот.

Обработка

Теперь код (в неповторимой манере форматирования от WordPress)

Процедура ПолучитьДанные запрашивает нужные данные в список значений. Этот список будет выводиться в выпадающем списке или меню:

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

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

«Поле выбора» уже имеет список для того что бы хранить данные для выбора.
Поэтому только запрашиваем данные в этот список:

Процедура ПолеВыбораНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ПолучитьДанные(Элемент.СписокВыбора);
КонецПроцедуры

А вот «полю ввода» надо «подсовывать» данные с помощью ф-ции ВыбратьИзСписка.
В реквизитах создается список для хранения данных (СписокКонтрагентов).
Затем на событие ПолеВводаНачалоВыбораИзСписка вешается код, который перекрывает стандартную обработку.


Процедура ПолеВводаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ПолучитьДанные(СписокКонтрагентов);	

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

Фактически тот же самый код, но для кнопки и для выпадающего меню.

Процедура ВыборЧерезМенюНажатие(Элемент)
	ПолучитьДанные(СписокКонтрагентов);
	Выбрано = ВыбратьИзМеню(СписокКонтрагентов,Элемент);
	Если Выбрано  Неопределено тогда
		РезультатВыбора = Выбрано.Значение;
	КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
	Фильтр = "ООО"; // фильтр по умолчанию
КонецПроцедуры

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *