К статье
Практический материал

Быстрый старт · 10 мин

Как в 1С выделить строку: все способы для пользователя и разработчика

Как выделить строку в 1С: одиночное и множественное выделение мышью и клавишами, выделение в табличных частях документов и программное выделение строк в коде.

Выделение строк — базовая операция в 1С, без которой невозможно групповое удаление, копирование, установка пометок или обработка данных. В зависимости от задачи выделяют одну строку, несколько строк подряд, произвольный набор строк или все строки сразу. Способы отличаются для обычных форм (толстый клиент), управляемых форм и веб-клиента, а разработчикам дополнительно доступно программное выделение через встроенный язык.

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

Как выделить одну строку в списке или табличной части

Самый простой случай — выделение одиночной строки. В списке документов, справочника или табличной части документа достаточно щёлкнуть левой кнопкой мыши по нужной строке. Строка подсветится цветом — это активная строка, к ней будут применяться команды «Изменить», «Удалить», «Пометить на удаление» и другие действия из меню или контекстного меню.

Если работа ведётся с клавиатуры, перемещаться между строками можно клавишами «Вверх» и «Вниз». Текущая строка при этом автоматически становится активной. В табличной части документа для перехода между строками также работают Page Up и Page Down при большом количестве позиций.

Учтите: в управляемых формах щелчок по ячейке может сразу активировать редактирование значения, если форма настроена на редактирование прямо в списке. Чтобы просто выделить строку без входа в режим редактирования, щёлкайте по области слева от первой колонки или по номеру строки, если он отображается.

Выделение нескольких строк: Shift, Ctrl и Ctrl+A

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

Диапазон строк через Shift

Чтобы выделить несколько строк подряд, щёлкните по первой строке диапазона, затем зажмите клавишу Shift и щёлкните по последней строке. Все строки между ними будут выделены. Альтернатива с клавиатуры: установите курсор на первую строку и, удерживая Shift, двигайтесь клавишами «Вниз» или «Вверх», расширяя выделение.

Произвольные строки через Ctrl

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

Все строки сразу

Комбинация Ctrl+A выделяет все строки текущего списка или табличной части. Это удобно перед копированием всего содержимого или массовой обработкой. Будьте осторожны: если после Ctrl+A нажать Delete, команда применится ко всем строкам.

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

Табличные части («Товары», «Услуги», «Начисления») поддерживают те же приёмы, но имеют особенности. Чтобы выделить строку целиком, а не встать в конкретную ячейку, щёлкните по серой области слева от строки — там, где отображается номер строки, либо используйте клавиатурную навигацию.

Для копирования выделенных строк табличной части используйте Ctrl+C или пункт «Копировать» контекстного меню, затем Ctrl+V в том же или другом документе. При вставке в другой документ 1С перенесёт данные, если структура табличных частей совместима. Во многих типовых конфигурациях есть и кнопка «Добавить из...» или «Заполнить», которая решает задачу переноса надёжнее ручного копирования.

Если нужно выделить строки по условию — например, все позиции одного товара, — ручное выделение неудобно. Используйте сортировку или отбор по колонке (кнопка отбора в командной панели табличной части либо правый щелчок по заголовку колонки), чтобы нужные строки оказались рядом, а затем выделите их диапазоном через Shift.

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

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

Для выделения большого количества объектов по условию (например, все документы контрагента) эффективнее не выделять вручную, а сначала установить отбор в списке, а затем применить групповую обработку. В типовых конфигурациях для этого есть обработка «Групповое изменение реквизитов» (раздел «Администрирование»), которая работает с результатом отбора без ручного выделения строк.

Порядок действий для массовой пометки на удаление
  1. 1
    Откройте нужный список документов или справочник
  2. 2
    Установите отбор, чтобы остались только целевые объекты
  3. 3
    Выделите строки: Ctrl+A для всех или Ctrl+щелчок для выборочных
  4. 4
    Нажмите Delete или выберите «Пометить на удаление» в меню «Ещё»
  5. 5
    Проверьте, что пометка установилась именно у выделенных объектов

Программное выделение строк в коде 1С

Разработчику часто нужно установить выделение из кода — например, после добавления строки подсветить её или выделить строки, не прошедшие проверку. В управляемой форме за это отвечает свойство ВыделенныеСтроки элемента формы типа «ТаблицаФормы». Оно доступно только для чтения как коллекция, но выделение можно задать, очищая и заполняя её идентификаторами строк.

// Элементы.Товары — таблица формы, связанная с реквизитом Объект.Товары

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

Для Каждого СтрокаТаблицы Из Объект.Товары Цикл

Если СтрокаТаблицы.Количество = 0 Тогда

Элементы.Товары.ВыделенныеСтроки.Добавить(СтрокаТаблицы.ПолучитьИдентификатор());

КонецЕсли;

КонецЦикла;

Обратите внимание: в коллекцию добавляется не сама строка данных, а её идентификатор, полученный методом ПолучитьИдентификатор(). Чтобы определить, какие строки выделил пользователь, используют обход коллекции Элементы.Товары.ВыделенныеСтроки и получение данных через Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки).

Для установки активной строки (курсора) используется свойство ТекущаяСтрока элемента формы: Элементы.Список.ТекущаяСтрока = НайденнаяСсылка; для динамического списка или идентификатор строки для таблицы значений.

Типичные ошибки
01
Попытка присвоить ВыделенныеСтроки новую коллекцию — свойство доступно только для чтения, нужно очищать существующую коллекцию и добавлять идентификаторы
02
Добавление в ВыделенныеСтроки самой строки данных вместо её идентификатора — полученного через ПолучитьИдентификатор()
03
Применение групповой операции к активной строке, когда пользователь ожидал обработку всех выделенных — в коде нужно явно проверять количество выделенных строк
04
Выделение всех строк через Ctrl+A перед удалением без предварительной проверки отбора списка

Особенности в обычных формах и веб-клиенте

В обычных формах (режим толстого клиента старых конфигураций) выделение работает аналогично, но программный интерфейс другой: у элемента управления «ТабличноеПоле» есть свойство ВыделенныеСтроки, доступное и для записи — туда можно присвоить массив строк напрямую, без идентификаторов.

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

Контрольные точки

Как проверить результат

Визуальная подсветка
Норма

Все нужные строки подсвечены цветом выделения

Тревожный признак

Часть строк не подсвечена — щелчки с Ctrl не зарегистрированы, повторите выделение

Поведение команды
Норма

Операция (копирование, пометка) применилась ко всем выделенным строкам

Тревожный признак

Обработана только активная строка — команда не поддерживает множественное выделение

Программное выделение
Норма

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

Тревожный признак

Выделение не появилось — проверьте, что добавлены идентификаторы строк, а не сами строки

Часто задаваемые вопросы

Почему Ctrl+A выделяет не все строки списка?

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

Как снять выделение со всех строк?

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

Можно ли выделить строки по условию без программирования?

Да, частично. Установите отбор или сортировку в списке так, чтобы нужные строки шли подряд, затем выделите их диапазоном через Shift. Для сложных условий в типовых конфигурациях используйте обработку «Групповое изменение реквизитов» — она подбирает объекты по произвольному отбору без ручного выделения.

Почему код выделяет строки, но на форме ничего не подсвечено?

Чаще всего в коллекцию ВыделенныеСтроки добавлены сами строки данных вместо их идентификаторов. Используйте метод ПолучитьИдентификатор() у строки таблицы значений формы. Также проверьте, что код выполняется на клиенте и обращается к правильному элементу формы.

Работает ли множественное выделение в мобильном клиенте 1С?

В мобильном клиенте интерфейс адаптирован под сенсорный ввод, и классические комбинации Ctrl и Shift недоступны. Множественное выделение там либо реализуется специальным режимом формы (если разработчик его предусмотрел), либо недоступно вовсе — тогда массовые операции выполняются через обработки.

Как в коде узнать, сколько строк выделил пользователь?

Используйте свойство Количество() у коллекции выделенных строк: Элементы.Товары.ВыделенныеСтроки.Количество(). Перед выполнением групповой операции полезно проверить, что это значение больше нуля, иначе команда отработает вхолостую или применится только к активной строке.

Итог

Что важно запомнить

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