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

Разработка и Конфигурация · 9 мин

Как обратиться к ячейке в 1С

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

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

Чаще всего под «ячейкой» понимают область табличного документа (объект ТабличныйДокумент), реже — ячейку таблицы значений, формы или файла Excel. Эти сущности устроены по-разному, и путать их нельзя: методы, которые работают для табличного документа, неприменимы к таблице значений и наоборот.

Ниже разобраны основные способы обращения к ячейке во встроенном языке 1С: чтение и запись значений, работа с именованными областями макета, типичные ошибки и способы проверить результат.

Что такое ячейка и область в табличном документе 1С

В 1С нет отдельного объекта «ячейка». Минимальная адресуемая единица табличного документа — область (объект ОбластьЯчеекТабличногоДокумента). Область может состоять из одной ячейки, диапазона ячеек, строки, колонки или всего документа.

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

Обращение к ячейке по координатам

Самый прямой способ — указать номер строки и колонки. Для этого у табличного документа вызывают метод Область() с числовыми параметрами:

ТабДок = Новый ТабличныйДокумент;

// ... заполнение документа ...

// Одна ячейка: строка 3, колонка 2

Ячейка = ТабДок.Область(3, 2);

Сообщить(Ячейка.Текст);

// Диапазон: с строки 1 колонки 1 по строку 5 колонку 4

Диапазон = ТабДок.Область(1, 1, 5, 4);

Тот же результат даёт адресная нотация «RстрокаCколонка»:

Ячейка = ТабДок.Область("R3C2");

Диапазон = ТабДок.Область("R1C1:R5C4");

Учтите, что нумерация строк и колонок начинается с единицы, а не с нуля. Обращение к несуществующей строке (например, строке 100 в документе из 10 строк) вернёт пустую область без ошибки — это частая причина «тихих» сбоев, когда код отрабатывает, но ничего не меняет.

Обращение к ячейке по имени области макета

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

Макет = ПолучитьМакет("МакетОтчета");

ТабДок = Новый ТабличныйДокумент;

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

// Обращение по имени области

ОбластьИтог = ТабДок.Область("ИтогСумма");

ОбластьИтог.Текст = "Итого: 1500";

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

Чтение и запись значений ячейки

То, как правильно записать данные в ячейку, зависит от её типа в макете. В макете ячейка может содержать обычный текст, параметр (подстановку вида [ИмяПараметра]) или шаблон.

Запись в обычную ячейку

Для ячейки с фиксированным текстом значение меняют через свойство Текст:

Ячейка = ТабДок.Область("R2C3");

Ячейка.Текст = "Новое значение";

Заполнение ячейки-параметра

Если в макете ячейка объявлена как параметр, значение присваивают через коллекцию Параметры области — обычно до вывода области в документ:

ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара");

ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Наименование;

ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;

ТабДок.Вывести(ОбластьСтрока);

Если область уже выведена, обратиться к параметру можно через ТабДок.Параметры.ИмяПараметра, но такая запись затронет все одноимённые параметры документа — для построчного заполнения это не подходит.

Типичные ошибки
01
Запись текста в ячейку-параметр через свойство Текст — параметр не заполнится, в документе останется шаблон подстановки
02
Обращение по жёстким координатам после изменения макета — код читает не ту ячейку без сообщения об ошибке
03
Присвоение параметра после вывода области через ТабДок.Параметры — меняются все одноимённые параметры документа
04
Ожидание исключения при обращении к несуществующей области — метод возвращает пустую область, и ошибка остаётся незамеченной

Обход ячеек в цикле

Для разбора заполненного табличного документа (например, загруженного из файла) ячейки перебирают в цикле по строкам и колонкам:

Для НомСтроки = 2 По ТабДок.ВысотаТаблицы Цикл

Наименование = ТабДок.Область(НомСтроки, 1).Текст;

ЦенаСтрокой = ТабДок.Область(НомСтроки, 3).Текст;

// дальнейшая обработка значений

КонецЦикла;

При таком разборе всегда обрабатывайте пустые значения: Текст пустой ячейки — пустая строка, и прямое преобразование её в число функцией Число() вернёт 0, что может исказить расчёты. Сначала проверяйте НЕ ПустаяСтрока(Значение).

Порядок действий при чтении данных из табличного документа
  1. 1
    Определите границы данных: ВысотаТаблицы и ШиринаТаблицы документа
  2. 2
    Проверьте строку заголовков, чтобы убедиться, что колонки на ожидаемых местах
  3. 3
    Переберите строки в цикле, читая ячейки методом Область(строка, колонка)
  4. 4
    Проверяйте каждое значение на пустоту перед преобразованием типа
  5. 5
    Запишите результат в таблицу значений или сразу в объекты базы

Ячейки в других объектах: таблица значений и Excel

Термин «ячейка» нередко используют и для других объектов, где механика иная. В таблице значений нет ячеек как таковых — обращение идёт к полю строки: СтрокаТЗ.Сумма или ТЗ[0]["Сумма"]. В форме табличное поле редактируется через данные, которые оно отображает, а не через координаты.

При работе с файлом Excel через COM-объект обращение к ячейке выглядит как Лист.Cells(Строка, Колонка).Value или Лист.Range("B3").Value. Это внешний объект, и синтаксис 1С-табличного документа к нему неприменим.

Сравнение способов адресации

По координатам Область(2, 3)

Подходит для разбора файлов и документов без макета; ломается при изменении структуры

По имени области Область("Итог")

Устойчиво к сдвигу строк в макете; требует заранее заданных имён

Через параметры макета

Правильный способ заполнения печатных форм; работает только для ячеек-параметров

Через COM для Excel

Единственный вариант для файлов xlsx без конвертации; требует установленного Excel на машине

Как проверить, что обращение к ячейке сработало

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

Ячейка = ТабДок.Область("R2C3");

Ячейка.Текст = "Проверка";

Если ТабДок.Область("R2C3").Текст <> "Проверка" Тогда

ВызватьИсключение "Запись в ячейку не выполнена";

КонецЕсли;

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

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

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

Содержимое ячейки после записи
Норма

Повторное чтение возвращает записанное значение

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

Возвращается пустая строка или старый текст — обращение шло не к той области

Параметры в готовой печатной форме
Норма

Все значения подставлены, квадратных скобок нет

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

Видны фрагменты вида [ИмяПараметра] — параметр не заполнен

Данные, прочитанные из файла
Норма

Числа и даты соответствуют источнику после преобразования

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

Пустые строки превратились в нули, даты съехали — нет проверки типов

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

Как обратиться к объединённой ячейке?

Объединённая ячейка адресуется по координатам её левого верхнего угла. Если ячейки R2C2:R3C4 объединены, обращайтесь к области «R2C2» — текст и оформление применятся ко всей объединённой области.

Почему Область() возвращает пустой текст, хотя ячейка заполнена?

Чаще всего сбиты координаты: в документ добавили строки или колонки. Проверьте ВысотаТаблицы и ШиринаТаблицы, а также убедитесь, что читаете свойство Текст, а не пытаетесь получить значение параметра, который хранится отдельно.

Можно ли обратиться к ячейке по адресу вида «B3», как в Excel?

Напрямую нет: встроенный язык понимает нотацию R3C2. Если адрес приходит в формате «B3», его нужно программно преобразовать: букву колонки перевести в номер, затем сформировать строку «R» + номер строки + «C» + номер колонки.

Как изменить цвет или шрифт конкретной ячейки?

Получите область методом Область() и установите оформительские свойства: ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение. Например: ТабДок.Область("R1C1").ЦветФона = Новый Цвет(255, 255, 0);

Чем отличается ПолучитьОбласть() макета от Область() табличного документа?

ПолучитьОбласть() берёт фрагмент из макета для последующего вывода в документ — это этап формирования. Область() обращается к уже существующему содержимому табличного документа — для чтения или правки после вывода.

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

Используйте метод НайтиТекст() для поиска по содержимому либо проверьте результат обращения: если область с таким именем не существует, Область("Имя") вернёт неопределённую область. Надёжнее проверять имя в макете до вывода.

Итог

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

Ячейка в 1С — это область табличного документа. Обращайтесь к ней методом Область() по координатам или имени, заполняйте параметры макета через коллекцию Параметры до вывода, проверяйте границы документа и пустоту значений.