База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как реализовать процедуру ПунктРазгрузкиНачалоВыбора с фильтром по контрагенту? › Ответ в теме: Как реализовать процедуру ПунктРазгрузкиНачалоВыбора с фильтром по контрагенту?
Процедура ПунктРазгрузкиНачалоВыбора реализована так, что при выборе пункта разгрузки из подчиненного справочника ПунктыРазгрузки будет учитываться текущий контрагент, выбранный в форме. Если контрагент не выбран, откроется форма выбора без фильтра. Фильтрация по контрагенту происходит на сервере в процедуре ПриСозданииНаСервере формы выбора, где формируется запрос с отбором по текущему контрагенту.
Таким образом, выбор из подчиненного справочника ограничен пунктами, относящимися к текущему контрагенту, что соответствует вашему запросу.
&НаКлиенте
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Процедура ПунктРазгрузкиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Контрагент = ЭтаФорма.Элементы.Контрагент.Значение; Если Не ЗначениеЗаполнено(Контрагент) Тогда ОткрытьФорму("Справочник.ПунктыРазгрузки.ФормаВыбора"); Возврат; КонецЕсли; Параметры = Новый Структура; Параметры.Вставить("Контрагент", Контрагент); ОткрытьФорму("Справочник.ПунктыРазгрузки.ФормаВыбора", Параметры, Элемент); КонецПроцедуры |
// В форме выбора справочника ПунктыРазгрузки в модуле формы на сервере в процедуре ПриСозданииНаСервере нужно добавить фильтр:
&НаСервере
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если ЗначениеЗаполнено(Параметры.Контрагент) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПунктыРазгрузки.Ссылка |ИЗ | Справочник.ПунктыРазгрузки КАК ПунктыРазгрузки |ГДЕ | ПунктыРазгрузки.Контрагент = &Контрагент"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПунктыРазгрузки.Ссылка", "ПунктыРазгрузки.Ссылка КАК СсылкаПункта", 1); Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент); Запрос.Выполнить(); КонецЕсли; КонецПроцедуры |
// Таким образом при открытии формы выбора ПунктыРазгрузки будет показываться только список пунктов, относящихся к текущему контрагенту.
// Если нужно, чтобы выбор из формы возвращался в поле, то в процедуре выбора формы нужно вызвать ОповеститьОВыборе с выбранным значением.
// Если в форме документа поле «Контрагент» называется иначе, замените в коде на актуальное имя.
// Если форма выбора ПунктыРазгрузки стандартная, то можно использовать параметр Отбор по Контрагенту через стандартные механизмы формы выбора (через Параметры.Отбор).