Как программно выделить все строки динамического списка?

Приветствую Вас, дорогие читатели.

В платформе «1с предприятие 8.2» появился такой замечательный объект как «динамический список«. Данный объект я часто использую в подборах, если не нужно делать сложные расчеты, а просто показать данные и выбрать.

Бывают такие ситуации, что список большой, более 10 позиций, и пользователю необходимо выбрать все строки. Стандартного способа как это сделать я не нашел.

Для решения это задачи я использовал объект «WSCript.Shell«.

В процессе реализации у меня получилось 2 варианта.

Вариант №1

Определим кнопку «Выделить все строки» и в модуль обработчика добавим код:

wsh = Новый COMОбъект(«WSCript.Shell»);
ЭтаФорма.ТекущийЭлемент = Элементы.ДинамическийСписок;
wsh.sendkeys(«^{A}»);

С помощью данного кода выполняется нажатие клавиш «Ctrl + A«, т.е. «выделить все».

Вариант №2

Вариант №1 не всегда срабатывал. Тогда данный код я переписал следующим образом:

  • Добавим реквизит формы «ПоследняяСтрокаСписка»
  • Для списка укажем свойство «Начальное отображение списка» = В конце списка
  • В процедуру «ПриОткрытии» добавим заполнение реквизита, определенного в пункте 1.

ПоследняяСтрокаСписка = Элементы.ДинамическийСписок.ВыделенныеСтроки[0];

  • Определим кнопку «Выделить все строки» и в модуль обработчика добавим код:

wsh = Новый COMОбъект(«WSCript.Shell»);
ЭтаФорма.ТекущийЭлемент = Элементы.ДинамическийСписок;
wsh.sendkeys(«{END}»);
ТекДанные = Элементы.ДинамическийСписок.ТекущиеДанные;
Если
ТекДанные <> Неопределено Тогда
  wsh.sendkeys(«+{UP » + ПоследняяСтрокаСписка + «}»);
КонецЕсли;

С помощью данного кода выполняется нажатие клавиш «Shift + кнопка вверх«.

Хочу обратить внимание. Данное решение не будет работать на клиентах, которые запускаются на Линукс.

Популярность: 10%

Запись опубликована в рубрике Особенности работы управляемого интерфейса с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *