Ограничение (отбор) выпадающего списка в форме элемента по значению реквизита
По теме из базы знаний
Найденные решения
Событие НачалоВыбора используй.
Простой пример:
Простой пример:
СтандартнаяОбработка = Ложь;
Элемент.СписокВыбора.Очистить();
СвойМассивЗначений = СформироватьСвойМассивЗначений();
Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
Если кому-то нужно, вот готовое решение:
Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлементыФормы.ВидТовара.СписокВыбора.Очистить();
Если СправочникОбъект.Услуга = истина Тогда; // если отмечена галочка реквизита "Услуга"
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт); // или (если не использовать предопределееные элементы справочника) Справочники.ВидыТоваров.НайтиПоНаименованию("Ремонт",Истина);
СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка);
ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара);
Если ВыбранноеЗначение <> Неопределено Тогда
ВидТовара = ВыбранноеЗначение.Значение;
КонецЕсли;
Иначе // если неотмечена галочка
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);
СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара);
Если ВыбранноеЗначение <> Неопределено Тогда
ВидТовара = ВыбранноеЗначение.Значение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Событие НачалоВыбора используй.
Простой пример:
Простой пример:
СтандартнаяОбработка = Ложь;
Элемент.СписокВыбора.Очистить();
СвойМассивЗначений = СформироватьСвойМассивЗначений();
Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
(9)
Что то я совсем запутался.
То что, Вы мне посоветовали работает, вот, что получилось:
Список не большой, поэтому добавил предопределенные значения справочника "вид товаров" и поименно их добавил в массив.
Но, при нажатии на поле "вид товара" выдается ошибка:
Что то я совсем запутался.
То что, Вы мне посоветовали работает, вот, что получилось:
Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлементыФормы.СписокВыбора.Очистить();
Если СправочникОбъект.Услуга = истина Тогда; // если отмечена галочка
СвойМассивЗначений = СформироватьСвойМассивЗначений();
Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
Иначе // если неотмечена галочка
СвойМассивЗначений = СформироватьСвойМассивЗначений2();
Элемент.СписокВыбора.ЗагрузитьЗначения(СвойМассивЗначений);
КонецЕсли;
КонецПроцедуры
Функция СформироватьСвойМассивЗначений ()
А = Новый Массив();
А.Добавить(Справочники.ВидыТоваров.Ремонт);
А.Добавить(Справочники.ВидыТоваров.Установка);
КонецФункции
Функция СформироватьСвойМассивЗначений2()
Б = Новый Массив();
Б.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
Б.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);
КонецФункции
ПоказатьСписок не большой, поэтому добавил предопределенные значения справочника "вид товаров" и поименно их добавил в массив.
Но, при нажатии на поле "вид товара" выдается ошибка:
{Справочник.Товары.Форма.ФормаЭлемента.Форма(7)}: Поле объекта не обнаружено (СписокВыбора)
ЭлементыФормы.СписокВыбора.Очистить();
ЭлементыФормы.СписокВыбора.Очистить();
(10)
Сделал еще проще:
Но по прежнему, ни чего не понимаю.
Ошибка та же.
Видимо проблема со списком.
Сделал еще проще:
Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлементыФормы.СписокВыбора.Очистить();
Если СправочникОбъект.Услуга = истина Тогда; // если отмечена галочка
ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт);
ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка);
Иначе // если неотмечена галочка
ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
ЭлементыФормы.ВидТовара.СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);
КонецЕсли;
КонецПроцедуры
ПоказатьНо по прежнему, ни чего не понимаю.
Ошибка та же.
Видимо проблема со списком.
(14)
Как думаете такой пример, списка сработает в форме элемента?
https://its.1c.ru/db/metod8dev/content/2454/hdoc
Как думаете такой пример, списка сработает в форме элемента?
(15) В общем, я запутался. У тебя форма элемента справочника и тебе надо в зависимости от реквизита этого элемента ограничивать список выбора? Тогда связи параметров выбора. Показывай, что ты там сначала сделал и не получилось, скриншот давай (нажимай на три точки в связяхпараметровыбора и показывай что там).
(3)
Что то не выходит.
Что делаю:
Выбираю в связях параметра выбора реквизита (который является ссылкой на другой справочник), реквизит (булево), который присутствует в обоих справочниках (и который по задумке и должен фильтровать что показывать). То есть стоит галочка на форме элемента справочника и в этой же форме в выпадающем списке предлагаются одни варианты, не стоит галочка - другие.
Но что то делаю не так.
Что то не выходит.
Что делаю:
Выбираю в связях параметра выбора реквизита (который является ссылкой на другой справочник), реквизит (булево), который присутствует в обоих справочниках (и который по задумке и должен фильтровать что показывать). То есть стоит галочка на форме элемента справочника и в этой же форме в выпадающем списке предлагаются одни варианты, не стоит галочка - другие.
Но что то делаю не так.
Как вариант можно так написать в процедуре НачалоВыбораИзСписка
Запрос = Новый Запрос;
Если СтоитГалочка Тогда
Запрос.Текст = "Выбрать Спр.Реквизит Из Справочники.Справочник КАК Спр ГДЕ Спр.РеквизитСтоитГалочка = Истина";
Иначе
Запрос.Текст = "Выбрать Спр.Реквизит Из Справочники.Справочник КАК Спр ГДЕ Спр.РеквизитСтоитГалочка = Ложь";
КонецЕсли;
Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Реквизит");
Элемент.СписокВыбора.Очистить();
Элемент.СписокВыбора.ЗагрузитьЗначения(Массив);
Показать
Если кому-то нужно, вот готовое решение:
Процедура ВидТовараНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлементыФормы.ВидТовара.СписокВыбора.Очистить();
Если СправочникОбъект.Услуга = истина Тогда; // если отмечена галочка реквизита "Услуга"
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(Справочники.ВидыТоваров.Ремонт); // или (если не использовать предопределееные элементы справочника) Справочники.ВидыТоваров.НайтиПоНаименованию("Ремонт",Истина);
СписокВыбора.Добавить(Справочники.ВидыТоваров.Установка);
ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара);
Если ВыбранноеЗначение <> Неопределено Тогда
ВидТовара = ВыбранноеЗначение.Значение;
КонецЕсли;
Иначе // если неотмечена галочка
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(Справочники.ВидыТоваров.ЗапасныеЧасти);
СписокВыбора.Добавить(Справочники.ВидыТоваров.БытоваяТехника);
ВыбранноеЗначение = ВыбратьИзСписка(СписокВыбора, ЭлементыФормы.ВидТовара);
Если ВыбранноеЗначение <> Неопределено Тогда
ВидТовара = ВыбранноеЗначение.Значение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот