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

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

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

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

Табличный документ в 1С — это не только печатная форма, но и источник данных: из него читают загруженные из Excel прайсы, обменные файлы, отчёты сторонних программ. Чтобы получить значение конкретной ячейки, используется объект ТабличныйДокумент и его методы доступа к областям. Базовый способ — обратиться к ячейке по адресу через метод Область() и прочитать свойство Текст или Значение.

Ключевой нюанс, который часто упускают начинающие разработчики: у ячейки табличного документа есть два разных содержимых. Свойство Текст возвращает строку — то, что видит пользователь на экране, включая форматирование. А расширение для ячеек с примитивными типами позволяет хранить и читать Значение — число, дату или булево без преобразования из строки. Какое из них доступно, зависит от того, как заполнен документ.

Ниже разобраны все рабочие сценарии: чтение по адресу вида «R1C1», чтение по имени области, обход диапазона, проверка типа данных и типичные ошибки при разборе загруженных файлов.

Чтение ячейки по адресу строки и колонки

Самый универсальный способ — адресация в стиле R1C1: сначала номер строки, затем номер колонки. Метод Область() возвращает объект области, у которого читают содержимое.

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

ТабДок.Прочитать("C:\Данные\Прайс.mxl");

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

// или по числовым координатам:

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

Оба варианта вызова эквивалентны: Область(2, 3) и Область("R2C3") указывают на одну и ту же ячейку. Числовой вариант удобнее в циклах, строковый — при отладке, когда адрес известен заранее. Если ячейка пустая или не входит в заполненную часть документа, Текст вернёт пустую строку, а не ошибку — это нужно учитывать при проверках.

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

bsl
ТекстЯчейки = ТабДок.Область("R" + Формат(НомерСтроки, "ЧГ=") + "C" + Формат(НомерКолонки, "ЧГ=")).Текст;

Свойства Текст и Значение: что выбрать

Свойство Текст есть у любой ячейки и всегда возвращает строку. Это надёжный вариант при чтении файлов, загруженных из Excel или MXL, где тип данных неизвестен. Однако строку придётся самостоятельно преобразовывать в число или дату, а формат может содержать неразрывные пробелы, разделители разрядов и символы валюты.

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

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

Если ТипЗнч(ОбластьЯчейки.Расширение) = Тип("РасширениеЯчейкиТабличногоДокументаЗначение") Тогда

ЧисловоеЗначение = ОбластьЯчейки.Расширение.Значение;

Иначе

ТекстЯчейки = ОбластьЯчейки.Текст;

КонецЕсли;

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

Получение данных из именованных областей

Чтение целой именованной области

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

Шапка = ТабДок.ПолучитьОбласть("Шапка");

НомерДокумента = Шапка.Область(1, 2).Текст;

Обращение к именованной ячейке напрямую

Если в макете отдельной ячейке присвоено имя, к ней можно обратиться по этому имени как к области: ТабДок.Область("ИтогоСумма").Текст. Это устойчиво к сдвигу строк при изменении макета — в отличие от жёстких координат R1C1, которые ломаются при добавлении строк в шаблон.

Узнать, какие именованные области есть в документе, можно перебором коллекции ТабДок.Области — каждый элемент имеет свойство Имя, а также координаты верхней и левой границы.

Маршрут решения

Как выбрать способ доступа

Документ загружен из файла без макета (Excel, MXL)Читайте по координатам R1C1 и свойству Текст
Документ сформирован по макету с именованными областямиИспользуйте ПолучитьОбласть или обращение по имени ячейки
Ячейки заполнены программно с типами данныхПроверяйте расширение и читайте Значение
Структура файла может менятьсяИщите заголовки перебором первой строки и запоминайте номера колонок

Обход диапазона ячеек в цикле

Типовая задача — прочитать таблицу данных построчно, например строки прайса неизвестной длины. Логика: определить границы документа и идти по строкам, пока не встретится пустая ключевая колонка.

ВсегоСтрок = ТабДок.ВысотаТаблицы;

Для НомерСтроки = 2 По ВсегоСтрок Цикл

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

Если ПустаяСтрока(Артикул) Тогда

Прервать;

КонецЕсли;

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

// обработка строки

КонецЦикла;

Такой подход устойчив к «хвостам» файла: итоговые строки и пустые строки в конце отсекаются проверкой ключевой колонки. Если структура колонок может меняться, сначала прочитайте строку заголовков и постройте соответствие «имя колонки → номер», а затем обращайтесь к ячейкам через найденные номера.

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

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

Преобразование текста ячейки в число и дату

Так как Текст — всегда строка, преобразование ложится на разработчика. Для чисел удобно использовать ОписаниеТипов и метод ПривестиЗначение(): он корректно обрабатывает пустые строки и не падает с исключением, а возвращает значение по умолчанию.

ОписаниеЧисла = Новый ОписаниеТипов("Число");

Цена = ОписаниеЧисла.ПривестиЗначение(СтрЗаменить(ТекстЯчейки, " ", ""));

Перед приведением удаляйте неразрывные пробелы и разделители разрядов — частая причина «нулей» там, где в файле видны нормальные числа. С датами сложнее: формат в файле может быть любым («01.02.2026», «2026-02-01», «2 февраля»), поэтому надёжнее разбирать строку вручную по известному шаблону, чем полагаться на автоматическое приведение.

Типичные ошибки
01
Чтение Текст с последующим сложением строк вместо чисел — итог склеивается, а не суммируется
02
Обращение к Значение без проверки расширения — ошибка выполнения на ячейках без типизированного значения
03
Жёсткие координаты колонок при изменяемой структуре файла — данные читаются не из тех колонок
04
Игнорирование неразрывных пробелов — числа превращаются в ноль при приведении типа
05
Чтение ячеек за пределами документа в цикле — раздувание документа и лишние пустые строки

Проверка результата и ограничения метода

После чтения данных полезно проверить результат контрольными точками: количество обработанных строк, сумма по числовой колонке, наличие обязательных значений. Это позволяет сразу заметить смещение структуры файла или обрыв данных.

У метода есть и принципиальные ограничения. Объединённые ячейки возвращают текст только через левую верхнюю ячейку объединения — соседние ячейки диапазона будут пустыми. Ячейки с рисунками не дадут текста. Защищённые ячейки читаются без ограничений, но их изменение недоступно. Кроме того, при чтении Excel-файлов формулы заменяются вычисленными значениями — саму формулу получить нельзя.

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

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

Количество прочитанных строк
Норма

Совпадает с числом строк данных в исходном файле

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

Меньше ожидаемого — цикл прервался раньше или границы определены неверно

Сумма числовой колонки
Норма

Совпадает с итогом в файле

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

Расходится — текст не преобразован в числа или сдвинуты колонки

Ключевые значения выборочно
Норма

Ячейки содержат ожидаемые данные из файла

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

Пусто или чужие данные — неверные координаты R1C1

FAQ

Чем отличается Область("R2C3") от Область(2, 3)?

Функционально ничем — оба вызова возвращают одну и ту же ячейку на пересечении второй строки и третьей колонки. Числовой вариант удобнее в циклах, строковый — при фиксированном адресе и отладке.

Почему свойство Значение выдаёт ошибку?

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

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

Используйте свойства ВысотаТаблицы (число строк) и ШиринаТаблицы (число колонок). Они отражают границы области, в которой есть данные или оформление, и позволяют безопасно организовать цикл обхода.

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

Текст объединённой области хранится в её левой верхней ячейке. Обращайтесь по координатам начала объединения; остальные ячейки диапазона вернут пустую строку.

Можно ли получить формулу из ячейки, загруженной из Excel?

Нет. При чтении файла методом Прочитать() формулы заменяются результатами вычислений. Табличный документ 1С хранит только итоговое отображаемое содержимое.

Что делать, если структура колонок в файле периодически меняется?

Не привязывайтесь к номерам колонок. Прочитайте строку заголовков, постройте соответствие «имя заголовка → номер колонки» и дальше обращайтесь к ячейкам через найденные номера. Отсутствие обязательного заголовка обрабатывайте как ошибку формата файла.

Итог

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

Ячейку читают через Область() по координатам R1C1 или по имени. Свойство Текст универсально, Значение — только для типизированных ячеек. Границы документа определяют через ВысотаТаблицы и ШиринаТаблицы, а текст чисел и дат требует аккуратного приведения типов.