Открыть форму выбора с отбором по доп. свойству

1. kiberiq 121 05.06.21 11:32 Сейчас в теме
Добрый день!
Кто-нибудь знает как открыть форму выбора справочника с отбором по дополнительному свойству?
Система на БСП, например БП. Через типовой механизм доп. реквизитов и свойств добавлено свойство договору с типом булево. В документе есть ссылка на договор. Можно ли добавить ПараметрыВыбора в документ (через палитру свойств или программно) так, чтобы список выбора фильтровался по нужному значению?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. EVKash 14 05.06.21 13:22 Сейчас в теме
(1) Доп. реквизиты не для этого. Это то, что может использоваться в режиме предприятия. В конфигураторе с доп. реквизитами работать в несколько раз сложнее. Добавить реквизит в конфигурацию и вывести его на форму расширением - выходит в разы легче по сопровождению.
Лично я на доп. реквизитах в программировании поставил крест. В отчетах с отборами по доп. реквизитам тоже веселуха.
3. kiberiq 121 06.06.21 14:25 Сейчас в теме
(2)Вопрос совсем не в том, что легче или сложнее. Доп. реквизит создавался НЕ именно для этой задачи. Механизм доп.реквизитов уже используется, причем уже в разных механизмах БД. Сейчас нужно доработать тот, который я обозначил.
4. independ 1526 06.06.21 16:27 Сейчас в теме
(3) Предварительно получить список нужных значений (запросом и проч), программно сформировать отбор (фиск.настройки) с видом сравнения в списке
https://1s-portal.ru/index.php/stati/configuration/3-form/87-kak-ustanovit-otbor-v-otkryvaemoj-forme.html
MaximusLee; +1 Ответить
5. BomjBandit 06.06.21 18:25 Сейчас в теме
Попробуй вот так:
В поле где ты выбираешь добавь обработчик события "НачалоВыбора", в нем пропиши:
&НаКлиенте
Процедура ТвойРеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка=Ложь;
	
	ЗначениеДопРеквизита = ПолучитьЗначениеДопРеквизита(ДоговорСсылка, ИмяСвойства); // тут твое имя свойства (имя доп реквизита из базы)
	
	Параметры = Новый Структура("ЗначениеДопРеквизита", ЗначениеДопРеквизита);
	
	ОткрытьФорму("Справочник.ТвойСправочник.ФормаВыбора",Параметры,Элемент);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЗначениеДопРеквизита(ДоговорСсылка, ИмяСвойства)
	
	ЗначениеДопРеквизита = Неопределено;
	
	// получаем список доп реквизитов договора
	СписокСвойств = УправлениеСвойствами.СвойстваОбъекта(ДоговорСсылка,Истина);
	Свойство = Неопределено;
	// перебираем все свойства и ищем нужное по наименованию
	Для Каждого Элемент из СписокСвойств Цикл
		Если Элемент.Наименование = ИмяСвойства Тогда
			Свойство = Элемент;
		КонецЕсли;
	КонецЦикла;
	
	// если нужное свойство нашлось, то получаем значение
	Если ЗначениеЗаполнено(Свойство) Тогда
		ЗначениеДопРеквизита = ЗначениУправлениеСвойствами.ЗначениеСвойства(ДоговорСсылка, Свойство);
	КонецЕсли;
	
	Возврат ЗначениеДопРеквизита;
	
КонецФункции
Показать


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

Не претендую на самое изящное решение
6. SlavaKron 07.06.21 13:59 Сейчас в теме
(1) Могу предложить примерно то же, что и в (4), только не переопределять начало выбора, а просто задать ПараметрВыбора элемента. Установка параметров выбора также позволит не допустить ввод по строке или из истории выбора элементов, неудовлетворяющих отбору.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	Ссылка
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты
	|ГДЕ
	|	Свойство.Имя = ""ИмяДопРеквизита""
	|	И Значение = ИСТИНА");
	
	МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);	
	НовыйПараметр = Новый ПараметрВыбора("Отбор.Ссылка", МассивСсылок);
	
	Массив = Новый Массив;
	Массив.Добавить(НовыйПараметр);
	
	Элементы.Договор.ПараметрыВыбора = Новый ФиксированныйМассив(Массив);
	
КонецПроцедуры
Показать
independ; +1 Ответить
7. KrimoZ 08.06.21 08:42 Сейчас в теме
Думаю надо
- доработать динамический список (добавив значение доп свойства)
- добавить значение доп свойства на форму списка (если доработка динамического списка программная, то программно)
- добавить поле для отбора на форму и установить отбор динамического списка
8. blockcode 40 09.06.21 14:14 Сейчас в теме
Я, для таких ситуаций, использую Форму выбора по запросу. https://infostart.ru/public/1385148/
Достаточно подготовить Запрос и передать необходимые параметры.
Оставьте свое сообщение

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