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

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

При разработке алгоритмов в 1С часто возникает необходимость работать с колонками объекта ТаблицаЗначений динамически, когда имя нужного столбца хранится в строковой переменной. Рассмотрим основные способы получения доступа к самой колонке, а также к значениям ячеек в строках таблицы.

Обращение к коллекции колонок таблицы значений

Для того чтобы получить объект колонки (например, для чтения свойств Имя, Заголовок или ТипЗначения), необходимо обратиться к коллекции Колонки таблицы значений. В качестве индекса передается строковая переменная, содержащая имя колонки.

Разберем пример:


ИмяКолонки = "Размер";
КолонкаОбъект = ТаблицаЗначений.Колонки[ИмяКолонки];

Сообщить(КолонкаОбъект.Имя);
Сообщить(КолонкаОбъект.Заголовок);

Если требуется найти колонку по имени без возникновения ошибки при ее отсутствии, используют метод Найти(). Данный метод возвращает объект колонки или значение Неопределено, если колонка с таким именем не найдена в коллекции.

Чтение и запись значений ячеек в строке таблицы

Для обращения к конкретной ячейке строки по динамическому имени колонки разберем два основных способа:

  1. Использование квадратных скобок (индексатор): данный способ является наиболее распространенным и компактным.
    
    ИмяКолонки = "Размер";
    НомерСтроки = 0; // Индексация строк начинается с 0
    
    // Чтение значения из конкретной строки таблицы:
    ЗначениеЯчейки = ТаблицаЗначений[НомерСтроки][ИмяКолонки];
    
    // Получение значения напрямую из объекта СтрокаТаблицыЗначений:
    СтрокаТЗ = ТаблицаЗначений[НомерСтроки];
    ЗначениеЯчейки = СтрокаТЗ[ИмяКолонки];
    
    // Запись значения в ячейку:
    СтрокаТЗ[ИмяКолонки] = 180;
    
  2. Использование явных методов строки: объект СтрокаТаблицыЗначений предоставляет специальные методы для считывания и записи данных.
    
    ИмяКолонки = "Размер";
    
    // Получение значения
    ЗначениеЯчейки = СтрокаТЗ.Получить(ИмяКолонки);
    
    // Установка значения
    СтрокаТЗ.Установить(ИмяКолонки, 180);
    

    Методы Получить() и Установить() принимают в качестве параметра имя колонки в виде строки, ее числовой индекс или сам объект КолонкаТаблицыЗначений.

Безопасная проверка существования колонки

Прямое обращение через квадратные скобки к несуществующей колонке (например, СтрокаТЗ[ИмяКолонки] или ТЗ.Колонки[ИмяКолонки]) приводит к аварийному завершению программы с ошибкой. Чтобы избежать этого, выполним предварительную проверку наличия колонки в таблице:


Если ТЗ.Колонки.Найти(ИмяКолонки) <> Неопределено Тогда
    ЗначениеЯчейки = СтрокаТЗ[ИмяКолонки];
Иначе
    Сообщить("Колонка с именем " + ИмяКолонки + " не найдена!");
КонецЕсли;

Групповые операции с колонкой по строковой переменной

Платформа 1С поддерживает передачу имени колонки через строковую переменную в стандартные сервисные методы ТаблицыЗначений. Рассмотрим наиболее частые сценарии применения:


ИмяКолонки = "Сумма";

// 1. Подсчет суммы по колонке
ВсегоСумма = ТЗ.Итог(ИмяКолонки);

// 2. Выгрузка значений колонки в массив
МассивЗначений = ТЗ.ВыгрузитьКолонку(ИмяКолонки);

// 3. Заполнение всей колонки одним значением
ТЗ.ЗаполнитьЗначения(0, ИмяКолонки);

// 4. Поиск строк по значению в динамической колонке
Отбор = Новый Структура;
Отбор.Вставить(ИмяКолонки, 100);
НайденныеСтроки = ТЗ.НайтиСтроки(Отбор);

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

← На главную