При переходе с платформы 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С 7.7 применяется встроенная функция Шаблон(). Она вычисляет строковое выражение, заключенное в квадратные скобки, и возвращает результат в виде строки.
Разберем пример:
ИмяФункции = "ПолучитьДанныеПоДействию";
Номер = 1;
РезультатСтрокой = Шаблон("[" + ИмяФункции + "(" + Номер + ")]");
Таким образом, сочетание методов ПолучитьАтрибут(), УстановитьАтрибут() и функции Шаблон() полностью закрывает задачи динамической работы с реквизитами и выражениями в 1С:Предприятии 7.7.