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