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