Как в 1С 7.7 динамически обращаться к реквизитам по строковому имени

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При переходе с платформы 1С:Предприятие 8 на 1С:Предприятие 7.7 разработчики часто сталкиваются с вопросом: как обратиться к реквизиту объекта или формы по его вычисляемому строковому имени? В 1С 8.х для этого достаточно обратиться через квадратные скобки (например, Объект["ИмяРеквизита" + Номер]). Разберем, как решается аналогичная задача в платформе 1С 7.7.

Чтение значения реквизита: метод ПолучитьАтрибут

Для динамического считывания значения реквизита шапки или строки табличной части в платформе 1С 7.7 предназначен метод ПолучитьАтрибут(). В качестве параметра метод принимает строковое имя реквизита.

Рассмотрим пример обхода пронумерованных реквизитов в цикле:


Итератор = 1;
Пока Итератор <= 8 Цикл
    ЗначениеРеквизита = ПолучитьАтрибут("Действие" + Итератор);
    Сообщить("Значение Действие" + Итератор + " = " + ЗначениеРеквизита);
    Итератор = Итератор + 1;
КонецЦикла;

Запись значения реквизита: метод УстановитьАтрибут

Распространенная ошибка при попытке изменить значение — использование конструкции вида ПолучитьАтрибут("Имя") = Значение;. В 1С 7.7 метод ПолучитьАтрибут возвращает значение, а не ссылку на переменную, поэтому прямое присвоение вызывает синтаксическую ошибку.

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

Посмотрим на корректный пример установки значений в цикле:


Итератор = 1;
Пока Итератор <= 8 Цикл
    УстановитьАтрибут("Действие" + Итератор, 1);
    Итератор = Итератор + 1;
КонецЦикла;

Особенности работы с реквизитами и элементами диалога

При использовании динамического доступа к полям в 1С 7.7 важно учитывать следующие архитектурные особенности:

  1. Реквизиты объекта и реквизиты диалога: Методы ПолучитьАтрибут() и УстановитьАтрибут() работают с реквизитами данных объекта (шапка, табличная часть) и реквизитами формы. Если же требуется изменить свойства элемента интерфейса (видимость, доступность, заголовок), используется обращение к объекту формы: Форма.ПолучитьАтрибут("ИмяЭлемента").Видимость(1);.
  2. Локальные переменные: Динамически прочитать или записать значение обычной локальной переменной модуля (объявленной через Перем) с помощью ПолучитьАтрибут нельзя. Эти методы работают исключительно с реквизитами объекта, метаданных или реквизитами диалога формы.
  3. Ошибки времени выполнения: Если указать имя несуществующего реквизита, платформа выдаст ошибку времени выполнения. Чтобы программный код работал надежно, рекомендуется защищать вызовы конструкцией Попытка ... Исключение либо предварительно сверять состав реквизитов через объект Метаданные.

Использование функции Шаблон для динамических вычислений

Если требуется динамически вычислять более сложные выражения или вызывать функции по их именам, в 1С 7.7 применяется встроенная функция Шаблон(). Она вычисляет строковое выражение, заключенное в квадратные скобки, и возвращает результат в виде строки.

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


ИмяФункции = "ПолучитьДанныеПоДействию";
Номер = 1;
РезультатСтрокой = Шаблон("[" + ИмяФункции + "(" + Номер + ")]");

Таким образом, сочетание методов ПолучитьАтрибут(), УстановитьАтрибут() и функции Шаблон() полностью закрывает задачи динамической работы с реквизитами и выражениями в 1С:Предприятии 7.7.

← На главную