1. Turon 10.01.19 11:57 Сейчас в теме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

КонецФункции
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 Сейчас в теме
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) а, тогда я не то предложил)
4. Fox-trot 95 10.01.19 12:09 Сейчас в теме
8. SedovSU@mail.ru 292 10.01.19 12:47 Сейчас в теме
Как вариант можно так написать в процедуре НачалоВыбораИзСписка

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

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

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

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

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

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

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

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

	Если ВыбранноеЗначение <> Неопределено Тогда 
   ВидТовара = ВыбранноеЗначение.Значение; 
	КонецЕсли;
	
КонецЕсли;
КонецПроцедуры
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день