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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При программной работе с табличными документами в 1С часто возникает задача прочитать данные из конкретной ячейки, зная ее координаты — номер строки и номер колонки. Начинающие разработчики могут столкнуться с ошибкой, пытаясь обратиться к ячейке по адресу в формате "R1C1" через метод Область(), что неверно. Чтобы избежать подобных проблем в крупных проектах, важно понимать базовый механизм работы платформы. Рассмотрим, как правильно получить доступ к ячейке и извлечь из нее необходимые данные.

Проанализируем ситуацию: у нас есть сформированный объект ТабличныйДокумент, и нам нужно получить значение, которое находится, например, в 5-й строке и 3-й колонке. Попытка использовать конструкцию вида ТабДок.Область("R5C3") приведет к ошибке, так как этот метод предназначен для работы с именованными областями, заранее определенными в макете.

Правильный способ: метод ПолучитьОбласть()

Для обращения к ячейке или диапазону ячеек по их координатам (адресу) в платформе 1С предназначен специальный метод ПолучитьОбласть(). Этот метод возвращает объект типа ОбластьЯчеекТабличногоДокумента, у которого, в свою очередь, можно получить различные свойства: текст, значение, расшифровку и другие параметры форматирования.

Синтаксис метода прост:

  1. Для получения одной ячейки: ТабДок.ПолучитьОбласть(<НомерСтроки>, <НомерКолонки>)
  2. Для получения прямоугольной области ячеек: ТабДок.ПолучитьОбласть(<НомерВерхнейСтроки>, <НомерЛевойКолонки>, <НомерНижнейСтроки>, <НомерПравойКолонки>)

Рассмотрим по шагам, как решить нашу исходную задачу.

Практический пример получения текста из ячейки

Предположим, у нас есть переменная ТабДок, содержащая табличный документ. Мы хотим прочитать текстовое значение из ячейки, находящейся на пересечении строки с номером НомерСтроки и колонки с номером НомерКолонки.

Для этого выполним следующие действия:

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

Посмотрим на пример кода, который решает эту задачу.


Перем ТабДок; // Предполагается, что эта переменная уже заполнена
Перем НомерСтроки;
Перем НомерКолонки;
Перем ОбластьЯчейки;
Перем ТекстЯчейки;

// Инициализируем переменные для примера
НомерСтроки = 5;
НомерКолонки = 3;

// 1. Получаем область, соответствующую одной ячейке
ОбластьЯчейки = ТабДок.ПолучитьОбласть(НомерСтроки, НомерКолонки);

// 2. Получаем текст из этой ячейки
ТекстЯчейки = ОбластьЯчейки.Текст;

// Теперь в переменной ТекстЯчейки содержится видимый текст из ячейки (5, 3)
Сообщить("Текст в ячейке: " + ТекстЯчейки);

Текст, Значение или Расшифровка: что выбирать?

Важно понимать, что ячейка табличного документа может хранить данные разного типа. Глубокое понимание того, как устроена объектная модель печатной формы, помогает правильно выбирать свойства объекта ОбластьЯчеекТабличногоДокумента для доступа к данным. Выбор зависит от вашей дальнейшей цели.

Давайте дополним наш код, чтобы получить все три типа данных:


НомерСтроки = 5;
НомерКолонки = 3;

ОбластьЯчейки = ТабДок.ПолучитьОбласть(НомерСтроки, НомерКолонки);

// Получаем разные представления данных из одной и той же ячейки
ТекстовоеПредставление = ОбластьЯчейки.Текст;
ИсходноеЗначение = ОбластьЯчейки.Значение;
ДанныеДляРасшифровки = ОбластьЯчейки.Расшифровка;

Сообщить("Текст: " + ТекстовоеПредставление);
Сообщить("Значение: " + ИсходноеЗначение + ", тип: " + ТипЗнч(ИсходноеЗначение));

Если ДанныеДляРасшифровки <> Неопределено Тогда
    Сообщить("Расшифровка: " + ДанныеДляРасшифровки);
КонецЕсли;

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

Пример обхода части таблицы

Метод ПолучитьОбласть() особенно полезен, когда нужно организовать программный обход и чтение данных из таблицы. Например, прочитать все данные из колонок со 2-й по 5-ю, начиная с 10-й строки и до конца таблицы.

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


// Определяем границы обхода
НачальнаяСтрока = 10;
КонечнаяСтрока = ТабДок.ВысотаТаблицы;
НачальнаяКолонка = 2;
КонечнаяКолонка = 5;

// Обходим строки
Для НомерСтр = НачальнаяСтрока По КонечнаяСтрока Цикл

    // Обходим нужные колонки в текущей строке
    Для НомерКол = НачальнаяКолонка По КонечнаяКолонка Цикл

        // Получаем ячейку и ее значение
        ОбластьЯчейки = ТабДок.ПолучитьОбласть(НомерСтр, НомерКол);
        ПрочитанноеЗначение = ОбластьЯчейки.Значение;

        // Здесь можно выполнять какую-либо обработку полученного значения
        // Например, выводить в окно сообщений
        Сообщить("Стр: " + НомерСтр + ", Кол: " + НомерКол + ", Значение: " + ПрочитанноеЗначение);

    КонецЦикла;

КонецЦикла;

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

← На главную