Разработка и Конфигурация · 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");
Ячейка.Текст = "Новое значение";
Заполнение ячейки-параметра
Если в макете ячейка объявлена как параметр, значение присваивают через коллекцию Параметры области — обычно до вывода области в документ:
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара");
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Наименование;
ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;
ТабДок.Вывести(ОбластьСтрока);
Если область уже выведена, обратиться к параметру можно через ТабДок.Параметры.ИмяПараметра, но такая запись затронет все одноимённые параметры документа — для построчного заполнения это не подходит.
Обход ячеек в цикле
Для разбора заполненного табличного документа (например, загруженного из файла) ячейки перебирают в цикле по строкам и колонкам:
Для НомСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Наименование = ТабДок.Область(НомСтроки, 1).Текст;
ЦенаСтрокой = ТабДок.Область(НомСтроки, 3).Текст;
// дальнейшая обработка значений
КонецЦикла;
При таком разборе всегда обрабатывайте пустые значения: Текст пустой ячейки — пустая строка, и прямое преобразование её в число функцией Число() вернёт 0, что может исказить расчёты. Сначала проверяйте НЕ ПустаяСтрока(Значение).
- 1Определите границы данных: ВысотаТаблицы и ШиринаТаблицы документа
- 2Проверьте строку заголовков, чтобы убедиться, что колонки на ожидаемых местах
- 3Переберите строки в цикле, читая ячейки методом Область(строка, колонка)
- 4Проверяйте каждое значение на пустоту перед преобразованием типа
- 5Запишите результат в таблицу значений или сразу в объекты базы
Ячейки в других объектах: таблица значений и Excel
Термин «ячейка» нередко используют и для других объектов, где механика иная. В таблице значений нет ячеек как таковых — обращение идёт к полю строки: СтрокаТЗ.Сумма или ТЗ[0]["Сумма"]. В форме табличное поле редактируется через данные, которые оно отображает, а не через координаты.
При работе с файлом Excel через COM-объект обращение к ячейке выглядит как Лист.Cells(Строка, Колонка).Value или Лист.Range("B3").Value. Это внешний объект, и синтаксис 1С-табличного документа к нему неприменим.
Сравнение способов адресации
Подходит для разбора файлов и документов без макета; ломается при изменении структуры
Устойчиво к сдвигу строк в макете; требует заранее заданных имён
Правильный способ заполнения печатных форм; работает только для ячеек-параметров
Единственный вариант для файлов xlsx без конвертации; требует установленного Excel на машине
Как проверить, что обращение к ячейке сработало
После записи значения убедитесь, что изменилась именно нужная ячейка. Простейшая проверка — прочитать область обратно и вывести содержимое:
Ячейка = ТабДок.Область("R2C3");
Ячейка.Текст = "Проверка";
Если ТабДок.Область("R2C3").Текст <> "Проверка" Тогда
ВызватьИсключение "Запись в ячейку не выполнена";
КонецЕсли;
Для печатных форм итоговая проверка — визуальная: откройте сформированный документ и убедитесь, что значения стоят в нужных местах, а параметры подставлены без остаточных квадратных скобок шаблона.
Как проверить результат
Повторное чтение возвращает записанное значение
Возвращается пустая строка или старый текст — обращение шло не к той области
Все значения подставлены, квадратных скобок нет
Видны фрагменты вида [ИмяПараметра] — параметр не заполнен
Числа и даты соответствуют источнику после преобразования
Пустые строки превратились в нули, даты съехали — нет проверки типов
Частые вопросы
Как обратиться к объединённой ячейке?
Объединённая ячейка адресуется по координатам её левого верхнего угла. Если ячейки R2C2:R3C4 объединены, обращайтесь к области «R2C2» — текст и оформление применятся ко всей объединённой области.
Почему Область() возвращает пустой текст, хотя ячейка заполнена?
Чаще всего сбиты координаты: в документ добавили строки или колонки. Проверьте ВысотаТаблицы и ШиринаТаблицы, а также убедитесь, что читаете свойство Текст, а не пытаетесь получить значение параметра, который хранится отдельно.
Можно ли обратиться к ячейке по адресу вида «B3», как в Excel?
Напрямую нет: встроенный язык понимает нотацию R3C2. Если адрес приходит в формате «B3», его нужно программно преобразовать: букву колонки перевести в номер, затем сформировать строку «R» + номер строки + «C» + номер колонки.
Как изменить цвет или шрифт конкретной ячейки?
Получите область методом Область() и установите оформительские свойства: ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение. Например: ТабДок.Область("R1C1").ЦветФона = Новый Цвет(255, 255, 0);
Чем отличается ПолучитьОбласть() макета от Область() табличного документа?
ПолучитьОбласть() берёт фрагмент из макета для последующего вывода в документ — это этап формирования. Область() обращается к уже существующему содержимому табличного документа — для чтения или правки после вывода.
Как узнать, есть ли в документе область с нужным именем?
Используйте метод НайтиТекст() для поиска по содержимому либо проверьте результат обращения: если область с таким именем не существует, Область("Имя") вернёт неопределённую область. Надёжнее проверять имя в макете до вывода.
Что важно запомнить
Ячейка в 1С — это область табличного документа. Обращайтесь к ней методом Область() по координатам или имени, заполняйте параметры макета через коллекцию Параметры до вывода, проверяйте границы документа и пустоту значений.