Ограничение (отбор) выпадающего списка в форме элемента по значению реквизита

1. Turon 10.01.19 11:57 Сейчас в теме
Здравствуйте.
Подскажите как провести отбор в выпадающем списке (быстрый выбор), на форме элемента справочника в зависимости от значения реквизита (булево) в (этой же) форме элемента справочника.
8.3
Обычная форма.
Спасибо.
+
По теме из базы знаний
Найденные решения
2. alex.msk 34 10.01.19 12:06 Сейчас в теме
Событие НачалоВыбора используй.

Простой пример:

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

Элемент.СписокВыбора.Очистить();
	
СвойМассивЗначений = СформироватьСвойМассивЗначений();	

Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
SergeiSalaga; maksa2005; user619273_alevtina; Turon; +4
12. antz 11.01.19 11:26 Сейчас в теме
(11)
ЭлементыФормы.ВидТовара.СписокВыбора.Очистить()
user619273_alevtina; Turon; +2
18. Turon 17.01.19 11:38 Сейчас в теме
Если кому-то нужно, вот готовое решение:

Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;

	ЭлементыФормы.ВидТовара.СписокВыбора.Очистить();
	
	
	
Если СправочникОбъект.Услуга = истина Тогда;   	                  // если отмечена галочка реквизита "Услуга"  
	
	СписокВыбора = Новый СписокЗначений; 

	СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт);        // или (если не использовать предопределееные элементы справочника) Справочники.ВидыТоваров.НайтиПоНаименованию("Ремонт",Истина);
	СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка); 

	ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара); 

	Если ВыбранноеЗначение <> Неопределено Тогда 
   ВидТовара = ВыбранноеЗначение.Значение;
	КонецЕсли;
	
Иначе  	                                                            // если неотмечена галочка
	
	СписокВыбора = Новый СписокЗначений; 

	СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти); 
	СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника); 

	ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара); 

	Если ВыбранноеЗначение <> Неопределено Тогда 
   ВидТовара = ВыбранноеЗначение.Значение; 
	КонецЕсли;
	
КонецЕсли;
КонецПроцедуры
Показать
Redhatych; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex.msk 34 10.01.19 12:06 Сейчас в теме
Событие НачалоВыбора используй.

Простой пример:

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

Элемент.СписокВыбора.Очистить();
	
СвойМассивЗначений = СформироватьСвойМассивЗначений();	

Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
SergeiSalaga; maksa2005; user619273_alevtina; Turon; +4
6. Turon 10.01.19 12:34 Сейчас в теме
(2)
Спасибо.
Подскажите как прописать по какому критерию проводить отбор?
+
9. alex.msk 34 10.01.19 12:54 Сейчас в теме
(6)
какому критерию проводить отбор?


Функция СформироватьСвойМассивЗначений()

    //Здесь пиши запрос с отбором по любому критерию и выгружай результат в массив

КонецФункции
Turon; +1
10. Turon 11.01.19 09:05 Сейчас в теме
(9)
Что то я совсем запутался.

То что, Вы мне посоветовали работает, вот, что получилось:

Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;

	ЭлементыФормы.СписокВыбора.Очистить();
	
	
	
Если СправочникОбъект.Услуга = истина Тогда;   	                  // если отмечена галочка
			
	СвойМассивЗначений = СформироватьСвойМассивЗначений();    

	Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
	
Иначе  	                                                            // если неотмечена галочка
	
	СвойМассивЗначений = СформироватьСвойМассивЗначений2();    
	
	Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);

	
КонецЕсли;
КонецПроцедуры





Функция  СформироватьСвойМассивЗначений ()                             

	А = Новый Массив();	
	А.Добавить(Справочники.ВидыТоваров.Ремонт);
	А.Добавить(Справочники.ВидыТоваров.Установка);
		
	
КонецФункции

Функция	СформироватьСвойМассивЗначений2()
	                                                                   
	Б = Новый Массив();	
	Б.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
	Б.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);
	
	
КонецФункции
	
	
Показать


Список не большой, поэтому добавил предопределенные значения справочника "вид товаров" и поименно их добавил в массив.
Но, при нажатии на поле "вид товара" выдается ошибка:



{Справочник.Товары.Форма.ФормаЭлемента.Форма(7)}: Поле объекта не обнаружено (СписокВыбора)
ЭлементыФормы.СписокВыбора.Очистить();
+
11. Turon 11.01.19 09:22 Сейчас в теме
(10)
Сделал еще проще:


Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;

	ЭлементыФормы.СписокВыбора.Очистить();
	
	
	
Если СправочникОбъект.Услуга = истина Тогда;   	                  // если отмечена галочка   

	ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт);
	ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка);
	
Иначе  	                                                            // если неотмечена галочка
	
	ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
	ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);	

	
КонецЕсли;
КонецПроцедуры
Показать



Но по прежнему, ни чего не понимаю.
Ошибка та же.
Видимо проблема со списком.
+
12. antz 11.01.19 11:26 Сейчас в теме
(11)
ЭлементыФормы.ВидТовара.СписокВыбора.Очистить()
user619273_alevtina; Turon; +2
13. Turon 11.01.19 15:35 Сейчас в теме
(12)
Спасибо.
Теперь ошибки нет.
Но и списка тоже(.
Буду изучать как сделать правильно.
У Вас случайно нет ссылки на простой (для новичка) "рукописный" список выбора?
+
14. antz 11.01.19 15:37 Сейчас в теме
(13) Да, можно и так.
Turon; +1
15. Turon 11.01.19 15:42 Сейчас в теме
(14)
Как думаете такой пример, списка сработает в форме элемента?
https://its.1c.ru/db/metod8dev/content/2454/hdoc
+
16. antz 11.01.19 16:04 Сейчас в теме
(15) В общем, я запутался. У тебя форма элемента справочника и тебе надо в зависимости от реквизита этого элемента ограничивать список выбора? Тогда связи параметров выбора. Показывай, что ты там сначала сделал и не получилось, скриншот давай (нажимай на три точки в связяхпараметровыбора и показывай что там).
+
17. Turon 11.01.19 16:42 Сейчас в теме
(16)
Все получилось, спасибо большое написал рабочий кусочек.
Выложу (кусочек) позже.

P.s. Возможно я пошел сложным путем (писать руками), но научился новому.
+
3. antz 10.01.19 12:08 Сейчас в теме
СвязиПараметровВыбора устроят?
singlych; Turon; +2
5. Turon 10.01.19 12:23 Сейчас в теме
(3)
Что то не выходит.
Что делаю:
Выбираю в связях параметра выбора реквизита (который является ссылкой на другой справочник), реквизит (булево), который присутствует в обоих справочниках (и который по задумке и должен фильтровать что показывать). То есть стоит галочка на форме элемента справочника и в этой же форме в выпадающем списке предлагаются одни варианты, не стоит галочка - другие.
Но что то делаю не так.
+
7. antz 10.01.19 12:35 Сейчас в теме
(5) а, тогда я не то предложил)
Turon; +1
4. Fox-trot 158 10.01.19 12:09 Сейчас в теме
8. SedovSU@mail.ru 297 10.01.19 12:47 Сейчас в теме
Как вариант можно так написать в процедуре НачалоВыбораИзСписка

Запрос = Новый Запрос;
Если СтоитГалочка Тогда
	Запрос.Текст = "Выбрать Спр.Реквизит Из Справочники.Справочник КАК Спр ГДЕ Спр.РеквизитСтоитГалочка = Истина";
Иначе 
	Запрос.Текст = "Выбрать Спр.Реквизит Из Справочники.Справочник КАК Спр ГДЕ Спр.РеквизитСтоитГалочка = Ложь";	
КонецЕсли;
Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Реквизит");
	
Элемент.СписокВыбора.Очистить();
Элемент.СписокВыбора.ЗагрузитьЗначения(Массив);
Показать
user619273_alevtina; Turon; +2
18. Turon 17.01.19 11:38 Сейчас в теме
Если кому-то нужно, вот готовое решение:

Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;

	ЭлементыФормы.ВидТовара.СписокВыбора.Очистить();
	
	
	
Если СправочникОбъект.Услуга = истина Тогда;   	                  // если отмечена галочка реквизита "Услуга"  
	
	СписокВыбора = Новый СписокЗначений; 

	СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт);        // или (если не использовать предопределееные элементы справочника) Справочники.ВидыТоваров.НайтиПоНаименованию("Ремонт",Истина);
	СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка); 

	ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара); 

	Если ВыбранноеЗначение <> Неопределено Тогда 
   ВидТовара = ВыбранноеЗначение.Значение;
	КонецЕсли;
	
Иначе  	                                                            // если неотмечена галочка
	
	СписокВыбора = Новый СписокЗначений; 

	СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти); 
	СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника); 

	ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара); 

	Если ВыбранноеЗначение <> Неопределено Тогда 
   ВидТовара = ВыбранноеЗначение.Значение; 
	КонецЕсли;
	
КонецЕсли;
КонецПроцедуры
Показать
Redhatych; +1
Внимание! Тема сдана в архив

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