Разработка и Конфигурация · 10 мин
Как получить ячейку области в 1С
Как получить ячейку области в 1С: методы Область(), ПолучитьОбласть(), работа с ТабличныйДокумент, примеры кода, типичные ошибки и проверка результата.
Получение ячейки области табличного документа — одна из базовых операций при программной работе с макетами и печатными формами в 1С. Через объект ТабличныйДокумент разработчик обращается к отдельным ячейкам, читает и изменяет их содержимое, форматирует вывод и собирает итоговую печатную форму.
Основной инструмент — метод Область(), который возвращает объект ОбластьЯчеекТабличногоДокумента. Через него доступны текст ячейки, параметры оформления, расшифровка и другие свойства. Метод принимает разные варианты адресации: по имени области, по координатам вида «R1C1» или по номерам строк и колонок.
Типичная ошибка новичков — путать получение области из макета (метод ПолучитьОбласть()) с обращением к уже выведенной области в табличном документе. Это разные сценарии: первый забирает шаблон из макета, второй обращается к конкретной ячейке в готовом документе. Ниже разобраны оба подхода с примерами кода.
Что такое область и ячейка в табличном документе 1С
Табличный документ в 1С — это прямоугольная сетка ячеек, аналогичная листу электронной таблицы. Область — это прямоугольный диапазон ячеек: от одной ячейки до произвольного блока строк и колонок. Области бывают именованными (заданными в макете в конфигураторе) и адресуемыми по координатам.
Когда область состоит из одной ячейки, свойства вроде Текст относятся именно к ней. Если область охватывает несколько ячеек, свойство Текст возвращает текст левой верхней ячейки, а присвоение текста заполняет всю область. Это важно учитывать, чтобы случайно не перезаписать блок данных.
Именованные области создаются в макете: выделяется диапазон, и в свойствах задаётся имя. Именно по этим именам удобнее всего обращаться к ячейкам — код становится читаемым и не ломается при добавлении строк в макет.
Получение ячейки по имени области
Самый надёжный способ — обратиться к ячейке по имени области, заданному в макете или в табличном документе. Синтаксис простой:
ТабДок = Новый ТабличныйДокумент;
// ... вывод области из макета ...
Ячейка = ТабДок.Область("СуммаИтого");
Сообщить(Ячейка.Текст);
Если области с таким именем не существует, метод вернёт Неопределено, и обращение к свойствам вызовет ошибку. Поэтому перед работой с ячейкой стоит проверять результат:
Ячейка = ТабДок.Область("СуммаИтого");
Если Ячейка = Неопределено Тогда
ВызватьИсключение "Область ""СуммаИтого"" не найдена в табличном документе";
КонецЕсли;
Именованные области особенно удобны в циклах вывода: если область выводится несколько раз, метод Область() вернёт первую найденную. Для доступа к ячейкам конкретного экземпляра используют адресацию по координатам или сохраняют ссылки на области сразу после вывода.
Получение ячейки по координатам и адресу
Когда имя области неизвестно или не задано, ячейку получают по координатам. Метод Область() поддерживает два варианта: строковый адрес в стиле «R1C1» и числовые координаты строки и колонки.
// По строковому адресу
Ячейка = ТабДок.Область("R5C3");
// По номерам строки и колонки
Ячейка = ТабДок.Область(5, 3);
// Диапазон: с строки 2 по 10, колонки с 1 по 4
Диапазон = ТабДок.Область(2, 1, 10, 4);
Нумерация строк и колонок начинается с единицы. Если указанные координаты выходят за пределы заполненной части документа, метод всё равно вернёт объект области — пустую ячейку. В отличие от поиска по имени, здесь Неопределено не возвращается, поэтому проверять нужно содержимое, а не сам объект.
Узнать границы документа помогают свойства ВысотаТаблицы и ШиринаТаблицы. Они возвращают номер последней заполненной строки и колонки, что удобно для циклов обхода:
Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
Ячейка = ТабДок.Область(НомерСтроки, 1);
// обработка ячейки первой колонки
КонецЦикла;
Чтение и изменение содержимого ячейки
После получения области-ячейки с ней работают через свойства. Основные из них:
Текст— отображаемый текст ячейки, доступен для чтения и записи;Значение— значение ячейки, если для неё включён режим «Содержит значение» (используется в полях ввода табличного документа);Параметр— значение параметра, если ячейка была заполнена через параметр макета;Расшифровка— значение расшифровки, используемое при клике по ячейке в отчётах;ЦветФона,ЦветТекста,Шрифт— оформление ячейки.
Ячейка = ТабДок.Область("R3C2");
СтароеЗначение = Ячейка.Текст;
Ячейка.Текст = "Новое значение";
Ячейка.ЦветФона = WebЦвета.СветлоЖелтый;При записи текста в ячейку, которая является частью объединённого диапазона, текст попадает в объединённую ячейку целиком. Если ячейка входит в область с параметрами макета, прямое присваивание Текст заменит шаблон, и повторное заполнение параметров для этой ячейки станет невозможным.
Получение области из макета и поиск ячеек в ней
Отдельный сценарий — работа с макетом до вывода в табличный документ. Метод ПолучитьОбласть() объекта ТабличныйДокумент (макета) извлекает именованную область-шаблон:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПФ_MXL_Накладная");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = "0001";
ТабДок.Вывести(ОбластьШапка);
Внутри полученной области можно обратиться к конкретной ячейке тем же методом Область() — координаты будут отсчитываться от левого верхнего угла области, а не всего документа. Это удобно, когда нужно изменить оформление отдельной ячейки шаблона до вывода.
Сравнение подходов
Подходит для чтения и правки уже выведенных ячеек; ограничение — при повторном выводе одноимённых областей доступна только первая.
Подходит для подготовки шаблона перед выводом; ячейки ещё не в документе, читать итоговые значения нельзя.
Самый безопасный способ заполнения данных; не подходит, когда нужно изменить оформление одной ячейки.
Проверка результата и типичные ошибки
После получения ячейки полезно убедиться, что работа ведётся с тем объектом, который ожидался. Контрольные точки: имя области существует, координаты в пределах документа, тип возвращаемого текста соответствует ожиданиям (число, выведенное как текст, при сравнении с числом даст ложь).
Как проверить результат
Возвращён объект области, свойство Текст доступно
Возвращено Неопределено — имя не совпадает с макетом
Номера строки и колонки не больше ВысотаТаблицы и ШиринаТаблицы
Координаты за пределами — получена пустая ячейка
Текст соответствует выведенным данным
Пустая строка при ожидаемом значении — ячейка заполнена через параметр или значение
Ещё одна распространённая ситуация — попытка получить ячейку из табличного поля на форме. Табличное поле с источником данных (таблица значений, динамический список) — это не табличный документ, и метод Область() там недоступен. Для табличных полей данные читают из источника, а не из ячеек отображения.
Что важно запомнить
Ячейку области получают методом Область(): по имени — для именованных областей, по координатам — для произвольных ячеек. Результат поиска по имени проверяют на Неопределено, содержимое читают через Текст, Значение или Параметр в зависимости от способа заполнения.
Частые вопросы
Чем отличается Область() от ПолучитьОбласть()?
Метод Область() обращается к ячейкам уже существующего табличного документа — для чтения или правки. ПолучитьОбласть() вызывается у макета и возвращает шаблон области, который затем выводится в документ методом Вывести() или Присоединить().
Почему Область("Имя") возвращает Неопределено?
Чаще всего имя не совпадает с макетом: лишний пробел, другой порядок слов или область вообще не создана. Также проверьте, что область выведена в табличный документ — поиск по имени работает только среди существующих в документе областей.
Как прочитать число из ячейки табличного документа?
Свойство Текст всегда возвращает строку. Для получения числа используйте преобразование: Число(Ячейка.Текст) с обработкой возможной ошибки, либо заполняйте ячейку через параметр и храните исходное значение отдельно.
Можно ли получить ячейку из табличного документа на форме?
Да, если реквизит формы имеет тип ТабличныйДокумент. Обращение идёт через реквизит: ЭтотОбъект.ТабДокумент.Область("R1C1"). После программного изменения ячеек форма обновляет отображение автоматически.
Как обратиться к ячейке объединённого диапазона?
Достаточно получить область по координатам любой ячейки диапазона — свойства Текст и оформление будут относиться ко всей объединённой ячейке. Проверить, объединена ли ячейка, можно через размеры области, возвращаемой методом Область() по одной координате.
Почему после присвоения Текст перестали работать параметры макета?
Прямое присваивание свойства Текст заменяет шаблон ячейки обычной строкой, и связь с параметрами теряется. Чтобы сохранить шаблон, заполняйте данные через коллекцию Параметры области до вывода в документ.