Выделение ячеек, строк и областей в 1С 8.3: для пользователя и программиста

· 10 мин

Содержание

Чтобы выделить область в 1С, зажмите левую кнопку мыши на первой ячейке и протяните до последней — или встаньте на ячейку и нажмите Shift + стрелки. Несколько несмежных диапазонов выделяют с зажатым Ctrl. Это работает в любом отчёте и табличном документе 1С 8.3, независимо от конфигурации: Бухгалтерия, ЗУП, УТ ведут себя одинаково, потому что выделение — функция платформы.

Дальше всё зависит от того, где вы находитесь. В отчёте выделение нужно, чтобы увидеть сумму и скопировать данные в Excel. В списке документов — чтобы обработать сразу пачку строк. В макете печатной формы — чтобы дать области имя. В коде — чтобы получить диапазон ячеек программно или оформить блок #Область. Ниже каждый случай отдельно.

Что именно вам нужно выделить?

Выделение ячеек в табличном документе: мышь и клавиатура

Табличный документ — это всё, что выглядит как лист Excel: отчёты, оборотно-сальдовые ведомости, печатные формы, анализ субконто. Приёмы выделения в нём одни и те же.

Мышью

  • 🖱 Диапазон — нажмите на первую ячейку и протяните до последней.
  • 🖱 Несколько диапазонов — первый выделите обычно, остальные с зажатым Ctrl.
  • 🖱 Вся строка — щелчок по номеру строки на сером поле слева (если заголовки строк включены).
  • 🖱 Вся колонка — щелчок по букве или номеру колонки сверху.
  • 🖱 Расширить выделение — Shift + щелчок по дальней ячейке: выделится прямоугольник от текущей ячейки до неё.

С клавиатуры

ДействиеКлавиши
Расширить выделение на ячейкуShift + стрелка
Выделить весь документCtrl + A
Перейти в начало документаCtrl + Home
Перейти в конец документаCtrl + End
Скопировать выделенноеCtrl + C

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

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

Выделенная область в отчёте: сумма и перенос в Excel

Главная причина выделять ячейки в отчётах — быстро посчитать итог без калькулятора. В интерфейсе «Такси» над табличным документом отчёта есть поле, где платформа показывает сумму выделенных ячеек. Выделили десять строк оборотки по счёту 60 — сразу видите их сумму.

Как этим пользоваться:

  1. Сформируйте отчёт.
  2. Выделите ячейки с числами. Можно несколько несмежных блоков через Ctrl.
  3. Посмотрите на поле суммы в верхней части формы, справа от командной панели.
  4. В свежих версиях платформы рядом с полем можно переключить, что считать: сумму, количество, среднее, минимум или максимум.

Текстовые ячейки в расчёт не попадают. Поэтому можно смело выделить всю колонку вместе с заголовком — заголовок не испортит итог.

Как перенести выделенное в Excel

  • 📋 Выделите область, нажмите Ctrl + C, перейдите в Excel и нажмите Ctrl + V. Числа вставятся числами, оформление частично сохранится.
  • 💾 Если нужен весь отчёт, а не кусок, удобнее сохранить его целиком: кнопка с дискетой или меню Ещё → Сохранить как, формат «Лист Microsoft Excel».

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

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

Журналы документов, справочники, списки контрагентов в 1С — это динамические списки. Здесь выделяют не ячейки, а строки целиком.

ЗадачаКак сделать
Выделить одну строкуЩелчок мышью или стрелки вверх-вниз
Выделить подряд идущие строкиЩелчок по первой, Shift + щелчок по последней
Выделить строки вразбросCtrl + щелчок по каждой
Расширить выделение с клавиатурыShift + стрелка вверх или вниз
Выделить все строки спискаCtrl + A

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

После выделения работают групповые команды. Что доступно, зависит от списка, но типичный набор такой:

  • ✅ Провести или Отменить проведение — через меню Ещё в командной панели списка. Удобно, когда нужно перепровести пачку документов за день.
  • 🗑 Пометить на удаление — клавиша Delete пометит все выделенные строки.
  • ✏️ Изменить выделенные — в типовых конфигурациях на базе БСП эта команда в меню Ещё открывает групповое изменение реквизитов: например, поменять ответственного или статью затрат сразу у 50 документов.
  • 🖨 Печать — многие печатные формы выводятся сразу по всем выделенным документам одним табличным документом.

Если Ctrl + щелчок не добавляет строку, а переставляет выделение, значит, у таблицы на форме разрешено выделять только одну строку. Это задаётся разработчиком в свойстве «Режим выделения», пользователь его не поменяет.

Групповое проведение или изменение реквизитов меняет сразу много документов. Перед этим сделайте резервную копию базы или хотя бы проверьте выборку отбором.

Именованные области в макете печатной формы

В Конфигураторе «выделить область» обычно значит другое: выделить строки макета и дать им имя. Именно по этому имени код потом получает кусок макета и выводит его в печатную форму.

Как назначить имя области

  1. Откройте макет: двойной щелчок по нему в дереве объекта метаданных, ветка «Макеты».
  2. Выделите строки будущей области — щелчком по номерам строк слева. Для нескольких строк протяните мышью по номерам.
  3. В главном меню выберите Таблица → Имена → Назначить имя.
  4. Введите имя латиницей или кириллицей без пробелов, например Шапка, Строка, Подвал.

Чтобы увидеть, какие области уже есть, включите Таблица → Имена → Показать именованные ячейки. Имена подсветятся на полях слева и сверху.

Типы областей в макете

  • 📏 Горизонтальная — набор строк целиком. Самый частый вариант: шапка, строка таблицы, итог.
  • 📐 Вертикальная — набор колонок. Нужна, когда число колонок заранее неизвестно, например по месяцам.
  • 🔲 Прямоугольная — произвольный диапазон ячеек.

Если в макете есть и горизонтальная область Строка, и вертикальная Месяц, их пересечение получают через вертикальную черту: Макет.ПолучитьОбласть("Строка|Месяц"). Так строят отчёты-«шахматки».

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

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

Для разработчика у объекта ТабличныйДокумент есть три главных инструмента: метод Область(), метод ПолучитьОбласть() и свойства ТекущаяОбласть и ВыделенныеОбласти.

Метод Область(): ссылка на ячейки

Метод возвращает область ячеек, с которой можно работать: менять текст, шрифт, рамки. Есть несколько способов адресации:

// По координатам: Верх, Лево, Низ, Право
Обл = ТабДок.Область(2, 1, 10, 5);

// В нотации R1C1
Обл = ТабДок.Область("R2C1:R10C5");

// По имени именованной области
Обл = ТабДок.Область("Шапка");

// Одна ячейка
Ячейка = ТабДок.Область("R3C2");
Ячейка.Текст = "Итого";
Ячейка.Шрифт = Новый Шрифт(Ячейка.Шрифт, , , Истина); // жирный

ПолучитьОбласть() работает иначе: возвращает не ссылку, а копию части макета как отдельный табличный документ. Её заполняют параметрами и выводят методом Вывести():

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = Документ.Номер;
ТабДок.Вывести(ОбластьШапка);

Как программно выделить ячейку для пользователя

Чтобы после формирования курсор встал на нужное место, присвойте область свойству ТекущаяОбласть:

ТабДок.ТекущаяОбласть = ТабДок.Область("R5C3");

Как прочитать то, что выделил пользователь

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

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

	Итог = 0;
	Для Каждого Обл Из ТабДок.ВыделенныеОбласти Цикл

		Если ТипЗнч(Обл) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
			Продолжить;
		КонецЕсли;
		Если Обл.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Прямоугольник Тогда
			Продолжить; // целые строки и колонки пропускаем
		КонецЕсли;

		Для НомерСтроки = Обл.Верх По Обл.Низ Цикл
			Для НомерКолонки = Обл.Лево По Обл.Право Цикл
				Ячейка = ТабДок.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
				Текст = СтрЗаменить(СокрЛП(Ячейка.Текст), " ", "");
				Текст = СтрЗаменить(Текст, Символы.НПП, "");
				Текст = СтрЗаменить(Текст, ",", ".");
				Если ПустаяСтрока(Текст) Тогда
					Продолжить;
				КонецЕсли;
				Попытка
					Итог = Итог + Число(Текст);
				Исключение
					// текстовая ячейка, пропускаем
				КонецПопытки;
			КонецЦикла;
		КонецЦикла;

	КонецЦикла;

	Сообщить("Сумма выделенного: " + Формат(Итог, "ЧДЦ=2; ЧГ=0"));

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

Здесь ТабДок — реквизит формы типа «Табличный документ». Пробелы и неразрывные пробелы убираются, потому что числа в отчётах выводятся с разделителем групп разрядов.

Выделение строк таблиц и текста на управляемой форме

Строки таблицы формы

У элемента «Таблица формы» за выделение отвечают два свойства:

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

	Выделенные = Элементы.Список.ВыделенныеСтроки;
	Если Выделенные.Количество() = 0 Тогда
		Сообщить("Выделите хотя бы одну строку");
		Возврат;
	КонецЕсли;
	ОбработатьНаСервере(Выделенные);

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

Чтобы пользователь вообще мог выделить несколько строк, у элемента таблицы свойство РежимВыделения должно быть Множественный. Программно: Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный.

Для табличной части документа идентификатор строки превращают в саму строку так: Объект.Товары.НайтиПоИдентификатору(Идентификатор).

Текст в поле ввода

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

ТекущийЭлемент = Элементы.Комментарий;
Элементы.Комментарий.УстановитьГраницыВыделения(1, 10);

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

Выделение и области в модуле: редактор кода Конфигуратора

Как выделять текст кода

ДействиеКлавиши
Выделить весь модульCtrl + A
Выделить посимвольноShift + стрелки
Выделить по словамCtrl + Shift + стрелка влево или вправо
Выделить до начала или конца строкиShift + Home / Shift + End
Сдвинуть выделенный блок вправо или влевоTab / Shift + Tab
Закомментировать выделенные строкиCtrl + / на цифровой клавиатуре
Снять комментарийCtrl + Shift + / на цифровой клавиатуре
Отформатировать выделенный блокAlt + Shift + F

Двойной щелчок по слову выделяет это слово — быстрый способ скопировать имя переменной.

Как оформить «область» кода: #Область

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

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	// ...
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// ...

#КонецОбласти

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

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

В 1С:EDT, которая построена на Eclipse, есть прямоугольное (блочное) выделение: оно включается сочетанием Alt + Shift + A. Удобно, чтобы поставить одинаковый префикс в начало десятка строк.

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

  • ❌ Сумма в отчёте «не сходится». Чаще всего в выделение попала строка итога группировки, и число учлось дважды. Выделяйте либо детальные строки, либо итоги.
  • ❌ Метод Область("Шапка") вызывает ошибку. В макете нет области с таким именем или имя написано с опечаткой. Проверьте через Таблица → Имена → Показать именованные ячейки.
  • ❌ Вывод «съехал» по колонкам. Горизонтальную и вертикальную области перепутали местами при обращении через |: сначала идёт имя горизонтальной области, потом вертикальной.
  • ❌ ВыделенныеСтроки содержат не то, что ожидали. Если список сгруппирован, в массив попадают и строки группировок, у которых другой тип. Проверяйте тип каждого элемента перед обработкой.
  • ❌ Параметры в печатной форме остались пустыми. Значения параметрам области присвоили после вызова Вывести(). Выводится копия на момент вызова, поэтому сначала заполняйте Параметры, потом выводите.

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

Почему в отчёте не показывается сумма выделенных ячеек?
Поле суммы видно только в отчётах и табличных документах в интерфейсе «Такси» и только если выделены числовые ячейки. В печатной форме документа его может не быть — скопируйте область в Excel.
Можно ли выделить ячейки в печатной форме и отредактировать их?
Да, если у табличного документа не включён режим «Только просмотр». В большинстве печатных форм правка разрешена: выделите ячейку и печатайте. Изменения не сохраняются в базе, они живут до закрытия формы.
Как выделить все документы за месяц в журнале?
Установите отбор по периоду через кнопку выбора периода, затем нажмите Ctrl + A. Выделятся все строки, попавшие в отбор.
Как снять выделение в списке?
Щёлкните по одной строке без Ctrl и Shift — останется выделенной только она. Снять выделение совсем в динамическом списке нельзя: одна текущая строка есть всегда.
Чем область макета отличается от #Область в модуле?
Это разные вещи с одним названием. Область макета — именованный диапазон ячеек для печатной формы. #Область в модуле — разметка кода, которая не влияет на выполнение программы и нужна только для навигации.