Выделение ячеек, строк и областей в 1С 8.3: для пользователя и программиста
Содержание
Чтобы выделить область в 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 — сразу видите их сумму.
Как этим пользоваться:
- Сформируйте отчёт.
- Выделите ячейки с числами. Можно несколько несмежных блоков через
Ctrl. - Посмотрите на поле суммы в верхней части формы, справа от командной панели.
- В свежих версиях платформы рядом с полем можно переключить, что считать: сумму, количество, среднее, минимум или максимум.
Текстовые ячейки в расчёт не попадают. Поэтому можно смело выделить всю колонку вместе с заголовком — заголовок не испортит итог.
Как перенести выделенное в Excel
- 📋 Выделите область, нажмите
Ctrl+C, перейдите в Excel и нажмитеCtrl+V. Числа вставятся числами, оформление частично сохранится. - 💾 Если нужен весь отчёт, а не кусок, удобнее сохранить его целиком: кнопка с дискетой или меню
Ещё → Сохранить как, формат «Лист Microsoft Excel».
При копировании объединённых ячеек Excel может «разъехаться»: объединение переносится, и сортировать такую таблицу неудобно. Для анализа данных лучше выделять только колонки с цифрами, без многострочной шапки.
Как выделить несколько строк в списке документов и справочников
Журналы документов, справочники, списки контрагентов в 1С — это динамические списки. Здесь выделяют не ячейки, а строки целиком.
| Задача | Как сделать |
|---|---|
| Выделить одну строку | Щелчок мышью или стрелки вверх-вниз |
| Выделить подряд идущие строки | Щелчок по первой, Shift + щелчок по последней |
| Выделить строки вразброс | Ctrl + щелчок по каждой |
| Расширить выделение с клавиатуры | Shift + стрелка вверх или вниз |
| Выделить все строки списка | Ctrl + A |
Что можно сделать с выделенными строками
После выделения работают групповые команды. Что доступно, зависит от списка, но типичный набор такой:
- ✅ Провести или Отменить проведение — через меню
Ещёв командной панели списка. Удобно, когда нужно перепровести пачку документов за день. - 🗑 Пометить на удаление — клавиша
Deleteпометит все выделенные строки. - ✏️ Изменить выделенные — в типовых конфигурациях на базе БСП эта команда в меню
Ещёоткрывает групповое изменение реквизитов: например, поменять ответственного или статью затрат сразу у 50 документов. - 🖨 Печать — многие печатные формы выводятся сразу по всем выделенным документам одним табличным документом.
Если Ctrl + щелчок не добавляет строку, а переставляет выделение, значит, у таблицы на форме разрешено выделять только одну строку. Это задаётся разработчиком в свойстве «Режим выделения», пользователь его не поменяет.
Групповое проведение или изменение реквизитов меняет сразу много документов. Перед этим сделайте резервную копию базы или хотя бы проверьте выборку отбором.
Именованные области в макете печатной формы
В Конфигураторе «выделить область» обычно значит другое: выделить строки макета и дать им имя. Именно по этому имени код потом получает кусок макета и выводит его в печатную форму.
Как назначить имя области
- Откройте макет: двойной щелчок по нему в дереве объекта метаданных, ветка «Макеты».
- Выделите строки будущей области — щелчком по номерам строк слева. Для нескольких строк протяните мышью по номерам.
- В главном меню выберите
Таблица → Имена → Назначить имя. - Введите имя латиницей или кириллицей без пробелов, например
Шапка,Строка,Подвал.
Чтобы увидеть, какие области уже есть, включите Таблица → Имена → Показать именованные ячейки. Имена подсветятся на полях слева и сверху.
Типы областей в макете
- 📏 Горизонтальная — набор строк целиком. Самый частый вариант: шапка, строка таблицы, итог.
- 📐 Вертикальная — набор колонок. Нужна, когда число колонок заранее неизвестно, например по месяцам.
- 🔲 Прямоугольная — произвольный диапазон ячеек.
Если в макете есть и горизонтальная область Строка, и вертикальная Месяц, их пересечение получают через вертикальную черту: Макет.ПолучитьОбласть("Строка|Месяц"). Так строят отчёты-«шахматки».
Изменять типовой макет напрямую в основной конфигурации неудобно: правки слетят или затруднят обновление. Свою печатную форму или изменённый макет лучше держать в расширении конфигурации или во внешней печатной форме.
Как выделить область программно в табличном документе
Для разработчика у объекта ТабличныйДокумент есть три главных инструмента: метод Область(), метод ПолучитьОбласть() и свойства ТекущаяОбласть и ВыделенныеОбласти.
Метод Область(): ссылка на ячейки
Метод возвращает область ячеек, с которой можно работать: менять текст, шрифт, рамки. Есть несколько способов адресации:
// По координатам: Верх, Лево, Низ, Право
Обл = ТабДок.Область(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. Удобно, чтобы поставить одинаковый префикс в начало десятка строк.
Типичные ошибки при выделении областей
- ❌ Сумма в отчёте «не сходится». Чаще всего в выделение попала строка итога группировки, и число учлось дважды. Выделяйте либо детальные строки, либо итоги.
- ❌ Метод
Область("Шапка")вызывает ошибку. В макете нет области с таким именем или имя написано с опечаткой. Проверьте черезТаблица → Имена → Показать именованные ячейки. - ❌ Вывод «съехал» по колонкам. Горизонтальную и вертикальную области перепутали местами при обращении через
|: сначала идёт имя горизонтальной области, потом вертикальной. - ❌
ВыделенныеСтрокисодержат не то, что ожидали. Если список сгруппирован, в массив попадают и строки группировок, у которых другой тип. Проверяйте тип каждого элемента перед обработкой. - ❌ Параметры в печатной форме остались пустыми. Значения параметрам области присвоили после вызова
Вывести(). Выводится копия на момент вызова, поэтому сначала заполняйтеПараметры, потом выводите.
Частые вопросы
Почему в отчёте не показывается сумма выделенных ячеек?
Можно ли выделить ячейки в печатной форме и отредактировать их?
Как выделить все документы за месяц в журнале?
Ctrl + A. Выделятся все строки, попавшие в отбор.Как снять выделение в списке?
Ctrl и Shift — останется выделенной только она. Снять выделение совсем в динамическом списке нельзя: одна текущая строка есть всегда.Чем область макета отличается от #Область в модуле?
#Область в модуле — разметка кода, которая не влияет на выполнение программы и нужна только для навигации.