Множественный выбор в 1С 8.3: мышью, через подбор, в отборах и в коде

· 10 мин

Содержание

Выбрать несколько значений в 1С 8.3 можно четырьмя путями. В списке справочника или журнала — щелчками с зажатым Ctrl (по одной строке) или Shift (диапазон). В документ — кнопкой Подбор над табличной частью. В отчёт или отбор списка — условием «В списке». В своей доработке — параметром МножественныйВыбор формы выбора или методом ПоказатьОтметкуЭлементов() у списка значений.

Выбор зависит от задачи. Удалить или изменить пачку элементов — хватит мыши. Заполнить документ двадцатью позициями — подбор. Построить отчёт по пяти контрагентам — отбор «В списке». Всё ниже работает на платформе 8.3 с интерфейсом «Такси» и одинаково в БП 3.0, ЗУП 3.1 и УТ 11, если не сказано иное.

Выделение нескольких строк мышью и клавиатурой

Это базовый приём платформы, он не зависит от конфигурации. Работает в любом списке: справочник, журнал документов , регистр, табличная часть открытого документа.

ДействиеЧто выделяется
Ctrl + щелчок по строкеСтрока добавляется к выделению или снимается с него
Щелчок, затем Shift + щелчокВсе строки между первой и второй
Shift + ↑ / ↓Выделение расширяется на соседнюю строку
Shift + PgUp / PgDnВыделение расширяется на экран вверх или вниз
Ctrl + AВсе строки списка

Комбинировать можно: выделите диапазон через Shift, а потом Ctrl-щелчками исключите лишние строки.

Что делать с выделенными строками

После выделения команды из панели и меню Ещё применяются ко всем отмеченным строкам сразу:

  • 🗑️ пометка на удаление — Delete или команда в меню Ещё;
  • 📄 проведение и отмена проведения пачки документов в журнале;
  • 📋 копирование строк табличной части в буфер (Ctrl+C) и вставка в другой документ того же вида;
  • ✏️ групповое изменение реквизитов — команда Изменить выделенные в меню Ещё (есть в типовых конфигурациях на БСП).

В иерархическом справочнике выделение группы не означает выделение её содержимого. Команда применится к самой группе. Если нужны все элементы внутри, переключите список в режим без иерархии (кнопка вида списка на панели) и выделяйте уже плоский список.

Где множественное выделение не сработает

Если строки не выделяются по Ctrl, значит у таблицы на форме задан одиночный режим выделения. Так бывает в формах выбора и в нетиповых доработках. Обойти это мышью нельзя — нужен подбор или правка формы (о ней ниже).

Подбор: несколько значений в табличную часть документа

Кнопка Подбор есть над табличной частью почти всех документов с товарами и услугами: «Поступление (акты, накладные, УПД)», «Реализация (акты, накладные, УПД)», «Счёт покупателю», «Заказ клиента » и других.

Порядок работы:

  1. Откройте документ и перейдите на вкладку с таблицей, например Товары.
  2. Нажмите Подбор. Откроется форма со списком номенклатуры.
  3. Найдите позицию поиском (Ctrl+F или строка поиска над списком).
  4. Дважды щёлкните по строке. Если включён запрос количества и цены, укажите их.
  5. Позиция попадает в нижнюю часть формы — корзину подобранных. Повторите для остальных.
  6. Нажмите Перенести в документ.

Форма подбора не закрывается после каждого выбора — в этом её смысл. Можно набрать 30 строк за один проход и перенести разом.

Если позицию дважды выбрать в подборе, в документ попадут две строки или увеличится количество в одной — зависит от конфигурации. Перед переносом проверьте корзину.

Подбор в справочниках и регистрах

В формах, где кнопки Подбор нет, есть простой обходной путь. Откройте список нужного справочника отдельным окном, выделите строки через Ctrl, скопируйте Ctrl+C. Затем встаньте в табличную часть и нажмите Ctrl+V. Платформа вставит ссылки, если тип колонки совпадает.

Работает не везде: в табличную часть документа вставляется только то, что подходит по типу. Если колонка ждёт номенклатуру, контрагенты туда не вставятся.

Отбор «В списке» в отчётах и списках

Когда нужно не заполнить документ, а ограничить данные — например, построить оборотно-сальдовую ведомость по трём контрагентам, — используют вид сравнения В списке.

В отчёте

  1. Откройте отчёт и нажмите Настройки.
  2. На вкладке Отборы добавьте поле, например Контрагент.
  3. В колонке условия выберите В списке.
  4. В колонке значения нажмите на поле — откроется форма списка значений.
  5. Нажмите Подбор, выделите нужных контрагентов через Ctrl и нажмите Выбрать. Либо добавляйте по одному кнопкой Добавить.
  6. Нажмите ОК, затем Закрыть и сформировать.

Обратное условие — Не в списке. Оно нужно, когда проще перечислить исключения: «все контрагенты, кроме двух внутригрупповых».

Для иерархических справочников есть ещё В группе из списка. Оно берёт выбранные группы вместе со всем содержимым.

В списке документов или справочника

То же доступно в любом динамическом списке через меню Ещё → Настроить список (вкладка Отбор). Поле, условие В списке, значения через подбор. Отбор сохраняется для пользователя до сброса — это удобно для ежедневной работы с одной группой контрагентов, но легко забыть, что он стоит.

Активный отбор виден над списком. Если в журнале вдруг «пропали» документы, первым делом проверьте строку отбора.

УсловиеКогда брать
РавноОдно значение
В спискеНесколько конкретных значений
Не в спискеВсё, кроме перечисленных
В группеОдна папка справочника с содержимым
В группе из спискаНесколько папок с содержимым

Множественный выбор в форме: параметры и свойства элементов

Этот раздел — для тех, кто дорабатывает конфигурацию или пишет расширение.

Свойство таблицы «Режим выделения»

У элемента формы Таблица есть свойство РежимВыделения. Значение Множественный разрешает выделять несколько строк по Ctrl и Shift. Значение Одиночный — только одну. Если пользователи жалуются, что в вашей форме не работает Ctrl, начните с этого свойства.

Выделенные строки читают через Элементы.ИмяТаблицы.ВыделенныеСтроки. Для динамического списка это массив ссылок. Для табличной части — массив идентификаторов строк:

&НаКлиенте
Процедура ОбработатьВыделенные(Команда)
	Для Каждого Идентификатор Из Элементы.Товары.ВыделенныеСтроки Цикл
		Строка = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
		Строка.Скидка = 5;
	КонецЦикла;
КонецПроцедуры

Форма выбора с параметром МножественныйВыбор

Стандартная форма выбора справочника принимает параметр МножественныйВыбор. Если передать Истина, пользователь может выделить несколько строк и нажать Выбрать. В обработку выбора придёт массив.

Второй полезный параметр — ЗакрыватьПриВыборе. Со значением Ложь форма остаётся открытой, и каждый выбор вызывает обработчик отдельно. Так устроен простейший самописный подбор.

&НаКлиенте
Процедура ПодобратьНоменклатуру(Команда)
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
	ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
	ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Товары);
КонецПроцедуры

&НаКлиенте
Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
		Значения = ВыбранноеЗначение;
	Иначе
		Значения = Новый Массив;
		Значения.Добавить(ВыбранноеЗначение);
	КонецЕсли;
	Для Каждого Значение Из Значения Цикл
		Если Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Значение)).Количество() = 0 Тогда
			НоваяСтрока = Объект.Товары.Добавить();
			НоваяСтрока.Номенклатура = Значение;
			НоваяСтрока.Количество = 1;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Проверка через НайтиСтроки не даёт задвоить позицию, если пользователь выбрал её повторно. Владельцем формы выбора здесь передана таблица Элементы.Товары, поэтому срабатывает её событие ОбработкаВыбора.

Список значений с флажками

Когда вариантов немного и они известны заранее — например, пять видов операций, — проще показать список значений с отметками:

&НаКлиенте
Процедура ВыбратьВиды(Команда)
	Список = Новый СписокЗначений;
	Список.Добавить("Продажа", "Продажа", Истина);
	Список.Добавить("Возврат", "Возврат");
	Список.Добавить("Перемещение", "Перемещение");
	Оповещение = Новый ОписаниеОповещения("ПослеОтметки", ЭтотОбъект);
	Список.ПоказатьОтметкуЭлементов(Оповещение, "Отметьте виды операций");
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтметки(Список, ДополнительныеПараметры) Экспорт
	Если Список = Неопределено Тогда
		Возврат; // пользователь нажал «Отмена»
	КонецЕсли;
	Для Каждого Элемент Из Список Цикл
		Если Элемент.Пометка Тогда
			Сообщить(Элемент.Значение);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Третий параметр Добавить — пометка по умолчанию. Метод асинхронный, поэтому результат приходит в процедуру оповещения. Модальный аналог ОтметитьЭлементы() в новых конфигурациях не используют: в них модальность обычно отключена.

Если список нужен прямо на форме, создайте реквизит формы типа СписокЗначений и выведите его таблицей. Колонка Пометка даст флажки без всякого кода.

Несколько значений в запросе и СКД

Выбранные значения почти всегда нужно потом использовать в запросе. Для этого есть оператор В:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Остатки.Номенклатура,
|	Остатки.КоличествоОстаток
|ИЗ
|	РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад В (&Склады)) КАК Остатки";
Запрос.УстановитьПараметр("Склады", МассивСкладов);
Результат = Запрос.Выполнить().Выгрузить();

В параметр можно передать массив или список значений. Условие внесено в параметры виртуальной таблицы, а не в ГДЕ — так остатки считаются только по нужным складам, и запрос быстрее.

Ещё три приёма:

  • 🌳 В ИЕРАРХИИ (&Группы) — элементы выбранных групп вместе с подчинёнными;
  • 🚫 НЕ Номенклатура В (&Исключения) — всё, кроме перечисленного;
  • 📦 при сотнях значений — выгрузить их в таблицу значений, поместить во временную таблицу через ПОМЕСТИТЬ и соединить с основной таблицей. На больших объёмах это стабильнее длинного списка в В.

В схеме компоновки данных у параметра есть флажок Доступен список значений. С ним пользователь в настройках отчёта сможет выбрать несколько значений параметра, а в тексте запроса параметр используют через В (&Параметр).

Если в В (&Склады) передать пустой массив, запрос не упадёт, а вернёт пустой результат. Когда пустое значение должно означать «все склады», проверьте массив до запроса и уберите условие.

Веб-клиент, тонкий клиент на планшете и мобильный клиент

В веб-клиенте выделение Ctrl- и Shift-щелчками, Ctrl+A, подбор и отбор «В списке» работают так же, как в тонком клиенте. Отличие одно: часть сочетаний браузер может перехватить сам. Если Ctrl+A выделяет текст страницы, сначала щёлкните по любой строке списка, чтобы фокус ушёл в таблицу.

На сенсорном экране клавиш Ctrl и Shift нет. Поэтому для планшетов и мобильного клиента надёжнее те способы, где выбор не зависит от модификаторов:

  • ✅ подбор с корзиной — каждое касание добавляет позицию;
  • ✅ список значений с флажками;
  • ✅ отбор «В списке» с добавлением значений по одному.

Если форму пишете вы и знаете, что ей пользуются с планшета, добавьте в таблицу колонку-флажок. Отмечать строки касанием проще, чем пытаться выделять их.

Внешние обработки для работы с пачкой объектов

Когда выбранные объекты нужно не просто изменить, а обработать по своему алгоритму, пригодится внешняя обработка. В типовых конфигурациях на БСП её подключают в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

Удобнее всего назначаемая обработка. Её привязывают к конкретному справочнику или документу, и команда появляется прямо в форме списка. Пользователь выделяет строки через Ctrl, нажимает команду, а обработка получает массив выделенных ссылок в параметре ОбъектыНазначения процедуры ВыполнитьКоманду.

Так решают типичные задачи:

  • 🏷️ проставить свойство или категорию сотне номенклатурных позиций;
  • 📧 отправить счета выбранным контрагентам одним действием;
  • 🔁 перезаполнить выбранные документы и провести их заново.

Для простого изменения одного реквизита писать обработку не нужно. Хватит типовой команды Изменить выделенные или обработки «Групповое изменение реквизитов» в разделе Администрирование → Обслуживание (в группе корректировки данных).

Групповое изменение и перепроведение пачки документов меняют данные необратимо. Перед массовой операцией в рабочей базе сделайте резервную копию. Проверьте результат на 2-3 объектах, прежде чем запускать на всех.

Диагностика: выберите симптом

Частые вопросы

Сколько строк можно выделить в списке за раз?
Жёсткого ограничения в интерфейсе нет. Но групповые команды над тысячами строк выполняются долго и держат блокировки, поэтому большие пачки лучше обрабатывать частями или фоновым заданием.
Можно ли выделить строки по условию, а не вручную?
Мышью — нет. Сначала наложите отбор, чтобы в списке остались только нужные строки, затем нажмите Ctrl+A.
Сохраняется ли выделение после обновления списка?
Нет. После обновления (F5) или повторного открытия формы выделение сбрасывается. Отбор, в отличие от выделения, сохраняется.
Как передать несколько значений в параметр отчёта, а не в отбор?
В схеме компоновки данных включите у параметра флажок «Доступен список значений». После этого в настройках отчёта у параметра появится выбор нескольких значений.
Чем «В группе из списка» отличается от «В списке»?
«В списке» проверяет точное совпадение со значениями. «В группе из списка» берёт выбранные группы со всем их содержимым на любой глубине.