Множественный выбор в 1С 8.3: мышью, через подбор, в отборах и в коде
Содержание
Выбрать несколько значений в 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, значит у таблицы на форме задан одиночный режим выделения. Так бывает в формах выбора и в нетиповых доработках. Обойти это мышью нельзя — нужен подбор или правка формы (о ней ниже).
Подбор: несколько значений в табличную часть документа
Кнопка Подбор есть над табличной частью почти всех документов с товарами и услугами: «Поступление (акты, накладные, УПД)», «Реализация (акты, накладные, УПД)», «Счёт покупателю», «Заказ клиента » и других.
Порядок работы:
- Откройте документ и перейдите на вкладку с таблицей, например Товары.
- Нажмите Подбор. Откроется форма со списком номенклатуры.
- Найдите позицию поиском (
Ctrl+Fили строка поиска над списком). - Дважды щёлкните по строке. Если включён запрос количества и цены, укажите их.
- Позиция попадает в нижнюю часть формы — корзину подобранных. Повторите для остальных.
- Нажмите Перенести в документ.
Форма подбора не закрывается после каждого выбора — в этом её смысл. Можно набрать 30 строк за один проход и перенести разом.
Если позицию дважды выбрать в подборе, в документ попадут две строки или увеличится количество в одной — зависит от конфигурации. Перед переносом проверьте корзину.
Подбор в справочниках и регистрах
В формах, где кнопки Подбор нет, есть простой обходной путь. Откройте список нужного справочника отдельным окном, выделите строки через Ctrl, скопируйте Ctrl+C. Затем встаньте в табличную часть и нажмите Ctrl+V. Платформа вставит ссылки, если тип колонки совпадает.
Работает не везде: в табличную часть документа вставляется только то, что подходит по типу. Если колонка ждёт номенклатуру, контрагенты туда не вставятся.
Отбор «В списке» в отчётах и списках
Когда нужно не заполнить документ, а ограничить данные — например, построить оборотно-сальдовую ведомость по трём контрагентам, — используют вид сравнения В списке.
В отчёте
- Откройте отчёт и нажмите Настройки.
- На вкладке Отборы добавьте поле, например Контрагент.
- В колонке условия выберите В списке.
- В колонке значения нажмите на поле — откроется форма списка значений.
- Нажмите Подбор, выделите нужных контрагентов через
Ctrlи нажмите Выбрать. Либо добавляйте по одному кнопкой Добавить. - Нажмите ОК, затем Закрыть и сформировать.
Обратное условие — Не в списке. Оно нужно, когда проще перечислить исключения: «все контрагенты, кроме двух внутригрупповых».
Для иерархических справочников есть ещё В группе из списка. Оно берёт выбранные группы вместе со всем содержимым.
В списке документов или справочника
То же доступно в любом динамическом списке через меню Ещё → Настроить список (вкладка Отбор). Поле, условие В списке, значения через подбор. Отбор сохраняется для пользователя до сброса — это удобно для ежедневной работы с одной группой контрагентов, но легко забыть, что он стоит.
Активный отбор виден над списком. Если в журнале вдруг «пропали» документы, первым делом проверьте строку отбора.
| Условие | Когда брать |
|---|---|
| Равно | Одно значение |
| В списке | Несколько конкретных значений |
| Не в списке | Всё, кроме перечисленных |
| В группе | Одна папка справочника с содержимым |
| В группе из списка | Несколько папок с содержимым |
Множественный выбор в форме: параметры и свойства элементов
Этот раздел — для тех, кто дорабатывает конфигурацию или пишет расширение.
Свойство таблицы «Режим выделения»
У элемента формы Таблица есть свойство РежимВыделения. Значение Множественный разрешает выделять несколько строк по Ctrl и Shift. Значение Одиночный — только одну. Если пользователи жалуются, что в вашей форме не работает
Ctrl, начните с этого свойства.
Выделенные строки читают через Элементы.ИмяТаблицы.ВыделенныеСтроки. Для динамического списка это массив ссылок. Для табличной части — массив идентификаторов строк:
&НаКлиенте
Процедура ОбработатьВыделенные(Команда)
Для Каждого Идентификатор Из Элементы.Товары.ВыделенныеСтроки Цикл
Строка = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
Строка.Скидка = 5;
КонецЦикла;
КонецПроцедуры
Форма выбора с параметром МножественныйВыбор
Стандартная форма выбора справочника принимает параметр МножественныйВыбор. Если передать Истина, пользователь может выделить несколько строк
и нажать Выбрать. В обработку выбора придёт массив.
Второй полезный параметр — ЗакрыватьПриВыборе. Со значением Ложь форма остаётся открытой, и каждый выбор вызывает обработчик отдельно. Так устроен простейший самописный подбор.
&НаКлиенте
Процедура ПодобратьНоменклатуру(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Товары);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
Значения = ВыбранноеЗначение;
Иначе
Значения = Новый Массив;
Значения.Добавить(ВыбранноеЗначение);
КонецЕсли;
Для Каждого Значение Из Значения Цикл
Если Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Значение)).Количество() = 0 Тогда
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Значение;
НоваяСтрока.Количество = 1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Проверка через НайтиСтроки не даёт задвоить позицию, если пользователь выбрал её повторно. Владельцем формы выбора здесь передана таблица Элементы.Товары, поэтому срабатывает её событие ОбработкаВыбора.
Список значений с флажками
Когда вариантов немного и они известны заранее — например, пять видов операций, — проще показать список значений с отметками:
&НаКлиенте
Процедура ВыбратьВиды(Команда)
Список = Новый СписокЗначений;
Список.Добавить("Продажа", "Продажа", Истина);
Список.Добавить("Возврат", "Возврат");
Список.Добавить("Перемещение", "Перемещение");
Оповещение = Новый ОписаниеОповещения("ПослеОтметки", ЭтотОбъект);
Список.ПоказатьОтметкуЭлементов(Оповещение, "Отметьте виды операций");
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтметки(Список, ДополнительныеПараметры) Экспорт
Если Список = Неопределено Тогда
Возврат; // пользователь нажал «Отмена»
КонецЕсли;
Для Каждого Элемент Из Список Цикл
Если Элемент.Пометка Тогда
Сообщить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Третий параметр Добавить — пометка по умолчанию. Метод асинхронный, поэтому результат приходит в процедуру оповещения. Модальный аналог ОтметитьЭлементы() в новых конфигурациях не используют: в них модальность обычно отключена.
Если список нужен прямо на форме, создайте реквизит формы типа СписокЗначений и выведите его таблицей. Колонка Пометка даст флажки без всякого кода.
Несколько значений в запросе и СКД
Выбранные значения почти всегда нужно потом использовать в запросе. Для этого есть оператор В:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад В (&Склады)) КАК Остатки";
Запрос.УстановитьПараметр("Склады", МассивСкладов);
Результат = Запрос.Выполнить().Выгрузить();
В параметр можно передать массив или список значений. Условие внесено в параметры виртуальной таблицы, а не в ГДЕ — так остатки считаются только по нужным складам, и запрос быстрее.
Ещё три приёма:
- 🌳
В ИЕРАРХИИ (&Группы)— элементы выбранных групп вместе с подчинёнными; - 🚫
НЕ Номенклатура В (&Исключения)— всё, кроме перечисленного; - 📦 при сотнях значений — выгрузить их в таблицу значений, поместить во временную таблицу через
ПОМЕСТИТЬи соединить с основной таблицей. На больших объёмах это стабильнее длинного списка вВ.
В схеме компоновки данных у параметра есть флажок Доступен список значений. С ним пользователь в настройках отчёта сможет выбрать несколько значений параметра, а в тексте запроса параметр используют через В (&Параметр).
Если в В (&Склады) передать пустой массив, запрос не упадёт, а вернёт пустой результат. Когда пустое значение должно означать «все склады», проверьте массив до запроса и уберите условие.
Веб-клиент, тонкий клиент на планшете и мобильный клиент
В веб-клиенте выделение Ctrl- и Shift-щелчками, Ctrl+A, подбор и отбор «В списке» работают так же, как в тонком клиенте. Отличие одно: часть сочетаний браузер может перехватить сам. Если Ctrl+A выделяет текст страницы, сначала щёлкните по любой строке списка, чтобы фокус ушёл в таблицу.
На сенсорном экране клавиш Ctrl и Shift нет. Поэтому для планшетов и мобильного клиента надёжнее те способы, где выбор не зависит от модификаторов:
- ✅ подбор с корзиной — каждое касание добавляет позицию;
- ✅ список значений с флажками;
- ✅ отбор «В списке» с добавлением значений по одному.
Если форму пишете вы и знаете, что ей пользуются с планшета, добавьте в таблицу колонку-флажок. Отмечать строки касанием проще, чем пытаться выделять их.
Внешние обработки для работы с пачкой объектов
Когда выбранные объекты нужно не просто изменить, а обработать по своему алгоритму, пригодится внешняя обработка. В типовых конфигурациях на БСП её подключают в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Удобнее всего назначаемая обработка. Её привязывают к конкретному справочнику или документу, и команда появляется прямо в форме списка. Пользователь выделяет строки через Ctrl, нажимает команду, а обработка получает массив выделенных ссылок в параметре ОбъектыНазначения процедуры ВыполнитьКоманду.
Так решают типичные задачи:
- 🏷️ проставить свойство или категорию сотне номенклатурных позиций;
- 📧 отправить счета выбранным контрагентам одним действием;
- 🔁 перезаполнить выбранные документы и провести их заново.
Для простого изменения одного реквизита писать обработку не нужно. Хватит типовой команды Изменить выделенные или обработки «Групповое изменение реквизитов» в разделе Администрирование → Обслуживание (в группе корректировки данных).
Групповое изменение и перепроведение пачки документов меняют данные необратимо. Перед массовой операцией в рабочей базе сделайте резервную копию. Проверьте результат на 2-3 объектах, прежде чем запускать на всех.