Выделение группы строк в документе 1С: клавиши, меню и код

· 10 мин

Содержание

Чтобы выделить несколько строк в табличной части документа 1С, щёлкайте по строкам с зажатой клавишей Ctrl — так отмечаются строки вразнобой. Чтобы выделить подряд идущий блок, щёлкните первую строку, зажмите Shift и щёлкните последнюю. Все строки сразу — Ctrl+A, когда курсор стоит в таблице.

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

Клавиши и мышь: базовые способы выделить строки

Набор сочетаний небольшой, но его хватает на любую задачу.

Что нужноКак сделать
Добавить или снять одну строкущелчок с зажатым Ctrl
Выделить диапазон мышьющелчок по первой строке, затем Shift + щелчок по последней
Выделить диапазон с клавиатурыShift + стрелка вверх или вниз
Выделить экран строкShift + Page Up / Page Down
Выделить все строки таблицыCtrl+A или команда «Выделить все» в меню «Ещё»
Сбросить выделениеобычный щелчок по любой строке

Как комбинировать Ctrl и Shift

Приёмы можно смешивать. Например, нужно выделить строки 5–15 и ещё 30–40:

  1. Щёлкните строку 5.
  2. Зажмите Shift и щёлкните строку 15 — выделен первый блок.
  3. Зажмите Ctrl и щёлкните строку 30 — она добавилась, первый блок остался.
  4. Зажмите Ctrl+Shift и щёлкните строку 40 — добавился второй блок.

Если на шаге 4 зажать только Shift, первый блок пропадёт: выделение перестроится от строки 30 до 40.

Где щёлкать

Щёлкайте по ячейке, которая не открывается на редактирование, например по колонке N с номером строки. Щелчок по полю «Количество» или «Цена» в некоторых формах сразу запускает ввод значения, и выделение сбивается.

Если случайно включилось редактирование ячейки, нажмите Esc. Режим ввода закроется, выделенные строки останутся.

Выделение протягиванием мыши

Протянуть мышь с зажатой левой кнопкой в таблице формы — ненадёжный способ. Во многих таблицах это включает перетаскивание строки на новое место, и вместо выделения вы перенесёте позицию в другую часть списка. Для диапазона используйте Shift.

Интерфейс «Такси», веб-клиент и обычные формы

Тонкий клиент в «Такси»

Всё, что описано выше, работает в тонком клиенте без настроек. Выделенные строки подсвечиваются цветом, текущая строка (с курсором) отмечена рамкой. Это разные вещи: строк выделено может быть 20, а текущая всегда одна. Часть команд работает со всеми выделенными строками, часть — только с текущей.

Веб-клиент в браузере

В браузере сочетания те же. Есть две особенности:

  • 🖱 Ctrl+A срабатывает для таблицы, только когда фокус в ней. Если фокус на странице браузера или в поле ввода, выделится текст страницы или поля. Сначала щёлкните любую строку, потом жмите Ctrl+A.
  • 🌐 Часть сочетаний перехватывает сам браузер. Если команда не срабатывает с клавиатуры, вызовите её из меню «Ещё» или из контекстного меню.

Обычные формы (старые конфигурации)

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

Действия с группой строк через контекстное меню

Выделили строки — щёлкните правой кнопкой по любой из выделенных. Если щёлкнуть правой кнопкой по невыделенной строке, выделение может сброситься на неё одну.

Что надёжно применяется ко всем выделенным строкам:

  • 🗑 Удаление. Клавиша Delete или команда «Удалить» убирает все выделенные строки разом. Это самый частый сценарий.
  • 📋 Копирование в буфер. В типовых конфигурациях на современной БСП в меню табличной части товаров есть команды копирования и вставки строк. Скопированные строки вставляются в другой документ того же или подходящего вида: например, товары из счёта покупателю переносятся в реализацию.
  • ↕ Перемещение. Команды «Переместить вверх» и «Переместить вниз» сдвигают выделенные строки. Перед массовым переносом проверьте поведение на двух строках: в некоторых формах сдвигается только текущая.

Удаление строк табличной части не отменяется сочетанием Ctrl+Z. Если удалили лишнее, закройте документ без сохранения и откройте заново. Пока документ не записан, в базе остаются прежние строки.

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

Командная панель и меню «Ещё» над табличной частью

Над каждой табличной частью есть своя командная панель. Кнопки «Добавить», «Подбор», «Заполнить» и стрелки перемещения видны сразу, остальное спрятано в меню «Ещё».

Что искать в меню «Ещё»

  • Выделить все — то же, что Ctrl+A.
  • Найти (Ctrl+F) — поиск значения в колонке. Удобно, когда строк сотни.
  • Вывести список — выгружает таблицу в табличный документ. Оттуда строки сохраняются в Excel или копируются целиком.
  • Изменить форму — настройка колонок. Пригодится, если нужной для сортировки колонки нет на экране.
  • Команды конфигурации — заполнение цен, пересчёт скидок, смена ставки НДС. Многие из них обрабатывают все строки табличной части, а не только выделенные. Читайте подсказку команды.

Вывести список, если надо работать со строками в Excel

Когда задача — не изменить строки в 1С, а отдать их коллеге или сверить в Excel, выделение не нужно:

  1. Откройте Ещё → Вывести список.
  2. Отметьте колонки, которые нужны, и нажмите «ОК».
  3. В открывшемся табличном документе выделите ячейки мышью или Ctrl+A.
  4. Скопируйте Ctrl+C и вставьте в Excel, либо сохраните файл через меню формы.

В табличном документе при выделении нескольких ячеек с числами 1С показывает их сумму в поле над документом. Так быстро проверить итог по выделенным позициям, не считая вручную.

Выделение строк по условию: сортировка и поиск

В табличной части нет команды «выделить все строки, где количество равно нулю». Но задачу решают два приёма.

Приём 1. Отсортировать и выделить блок

Щелчок по заголовку колонки сортирует таблицу по этой колонке. Нужные строки встают рядом, и их легко выделить через Shift.

Пример: в документе 80 строк, у семи из них не заполнена цена.

  1. Щёлкните заголовок колонки «Цена». Строки с нулевой ценой окажутся вверху.
  2. Щёлкните первую такую строку.
  3. Зажмите Shift и щёлкните последнюю строку с нулём.
  4. Заполните цену или удалите строки — по задаче.

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

Приём 2. Поиск и выделение по одной

Если строки разбросаны и по сортировке их не собрать:

  1. Нажмите Ctrl+F, введите значение, выберите колонку.
  2. Найдите первую строку и отметьте её.
  3. Ищите следующую, а отмечайте с зажатым Ctrl, чтобы не потерять предыдущие.

Этот способ годится для 5–10 строк. Для сотни — быстрее сортировка или обработка в коде.

Если строк тысячи

Документы на тысячи позиций (загрузка из Excel , инвентаризация) удобнее править не выделением, а повторной загрузкой: исправить данные в файле и заполнить табличную часть заново. В большинстве типовых документов загрузка из файла есть в командной панели табличной части.

Как быстрее выделить нужные строки?

Выделенные строки в коде: свойство ВыделенныеСтроки

Для программиста выделение — это свойство элемента формы ТаблицаФормы. Через него делают команды «Установить скидку выделенным», «Удалить выделенные» и подобные.

Режим выделения таблицы

Множественное выделение работает, только если у элемента таблицы свойство «Режим выделения» равно «Множественный». В конфигураторе оно в палитре свойств элемента формы, в коде — так:

Элементы.Товары.РежимВыделения = РежимВыделенияТаблицы.Множественный;

Если стоит «Одиночный», пользователь сможет выделить только одну строку, и Ctrl со Shift ничего не дадут.

Обработать выделенные строки

ВыделенныеСтроки у таблицы табличной части возвращает массив идентификаторов строк, а не сами строки. Строку по идентификатору находят методом НайтиПоИдентификатору:

&НаКлиенте
Процедура УстановитьСкидкуВыделенным(Команда)

	Выделенные = Элементы.Товары.ВыделенныеСтроки;
	Если Выделенные.Количество() = 0 Тогда
		ПоказатьПредупреждение(, "Выделите строки табличной части.");
		Возврат;
	КонецЕсли;

	Для Каждого Идентификатор Из Выделенные Цикл
		СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
		Если СтрокаТЧ <> Неопределено Тогда
			СтрокаТЧ.ПроцентСкидки = 5;
		КонецЕсли;
	КонецЦикла;

	Модифицированность = Истина;

КонецПроцедуры

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

Выделить строки программно

Обратная задача — выделить строки по условию, чтобы пользователь увидел их и решил, что делать:

&НаКлиенте
Процедура ВыделитьСтрокиБезЦены(Команда)

	Элементы.Товары.ВыделенныеСтроки.Очистить();

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

КонецПроцедуры

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

Удалять строки прямо внутри цикла по ВыделенныеСтроки нельзя: при удалении массив выделения меняется. Сначала соберите строки в отдельный массив, потом удаляйте:

&НаКлиенте
Процедура УдалитьВыделенные(Команда)

	КУдалению = Новый Массив;
	Для Каждого Идентификатор Из Элементы.Товары.ВыделенныеСтроки Цикл
		СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
		Если СтрокаТЧ <> Неопределено Тогда
			КУдалению.Добавить(СтрокаТЧ);
		КонецЕсли;
	КонецЦикла;

	Для Каждого СтрокаТЧ Из КУдалению Цикл
		Объект.Товары.Удалить(СтрокаТЧ);
	КонецЦикла;

КонецПроцедуры

Что учитывать в коде

  • 🔢 Порядок идентификаторов в ВыделенныеСтроки не обязан совпадать с порядком строк в таблице. Если важна последовательность, сортируйте по НомерСтроки.
  • 📍 ТекущаяСтрока — это одна строка под курсором. Код, который читает только её, обработает одну позицию из двадцати выделенных.
  • 🖥 В процедуру &НаСервереБезКонтекста элементы формы не передаются. Соберите идентификаторы или нужные значения на клиенте и передайте массивом в параметре.
  • 📑 В динамическом списке (журнал документов, справочник) ВыделенныеСтроки содержит не идентификаторы, а ссылки на объекты или ключи записей. Код для табличной части и для списка отличается.

Почему не получается выделить несколько строк

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

Если ничего не помогло

Проверьте сочетания в другой таблице, например в списке справочника «Номенклатура». Если там Ctrl и Shift работают, ограничение задано в конкретной форме. Если не работают нигде, причина в клавиатуре или в программе, которая перехватывает клавиши: переключатель раскладки, клиент удалённого рабочего стола. Запустите 1С без них и сравните.

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

Можно ли выделить несколько строк в табличной части без мыши?
Да. Встаньте на первую строку стрелками и, удерживая Shift, нажимайте стрелку вниз или Page Down. Выделение растягивается вместе с курсором.
Как скопировать выделенные строки в другой документ?
В БП 3.0 и УТ 11 используйте команды копирования и вставки строк в меню табличной части товаров. Если в вашей конфигурации таких команд нет, перенос делают через «Вывести список» и загрузку из файла.
Почему в журнале документов выделение работает, а в документе нет?
У списка и у табличной части свой режим выделения. Разработчик формы мог включить множественный режим в одной таблице и одиночный в другой.
Сохраняется ли выделение после записи документа?
Нет. После записи и повторного открытия документа выделение сбрасывается, оно живёт только в открытой форме.
Как узнать, сколько строк выделено?
В форме табличной части счётчика выделенных строк обычно нет. Если считать приходится часто, программист добавляет в форму команду, которая выводит Элементы.Товары.ВыделенныеСтроки.Количество(). Для разовой проверки выделенные позиции проще пересчитать по колонке N.