Разберем ситуацию, когда в управляемой форме 1С используется реквизит с типом СписокЗначений (например, для выбора нескольких документов). Стандартная задача часто усложняется тем, что при открытии формы подбора необходимо применить специфический фильтр (по реквизиту документа, пометке удаления или статусу). Рассмотрим, как реализовать это грамотно, используя возможности платформы.
Этот способ является наиболее предпочтительным, так как он глубоко интегрирован в платформу 1С и корректно работает как при нажатии на кнопку «Добавить» внутри списка, так и при вызове подбора. Для этого выполним следующие шаги:
ДокументСсылка.РеализацияТоваровУслуг).ПриНачалеВыбора для этого элемента управления.ПараметрыВыбора элемента формы. Сюда необходимо передать ФиксированныйМассив, содержащий параметры отбора.Пример программной настройки отбора:
&НаКлиенте
Процедура МойЭлементПриНачалеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
МассивОтбора = Новый Массив;
МассивОтбора.Добавить(Новый ПараметрВыбора("Отбор.Проведен", Истина));
Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(МассивОтбора);
КонецПроцедуры
Использование этого подхода позволяет системе самостоятельно управлять фильтрацией, при этом все настройки применяются автоматически как к стандартной форме выбора, так и к механизмам подбора данных.
Если задача требует более сложной логики (например, отбор зависит от контекста нескольких реквизитов формы), целесообразно самостоятельно открыть форму выбора через ОткрытьФорму(). При этом крайне важно правильно организовать передачу данных, чтобы при повторном открытии списка пользователь видел уже выбранные значения.
Для реализации этого метода необходимо выполнить следующие действия:
НачалоВыбора) не доверяйте стандартному поведению системы, а вызовите форму явно.СписокЗначений в параметрах формы. Это позволит форме «узнать», какие документы уже были выбраны ранее.ПриСозданииНаСервере получите этот список из параметров и заполните им соответствующий реквизит формы.Пример вызова формы с передачей параметров:
&НаКлиенте
Процедура МойСписокПриНачалеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекущийСписок", Элемент.Значение);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Часто разработчики сталкиваются с тем, что после закрытия формы выбора и повторного нажатия на «три точки», список оказывается пустым. Это происходит из-за потери состояния данных. Чтобы этого избежать, проанализируем ситуацию:
ПриСозданииНаСервере целевой формы всегда проверяйте наличие ключа в Параметры и присваивайте значение реквизиту формы.ОписаниеОповещения для возврата выбранных значений из формы обратно в исходный список.Соблюдение этих правил позволит сделать интерфейс приложения интуитивно понятным и исключить потерю данных пользователя при редактировании списков. Помните, что для больших объемов данных предпочтительнее использовать ДинамическийСписок с программной настройкой фильтрации, так как СписокЗначений хранит данные в памяти и может замедлить работу при чрезмерном количестве элементов.