Как создать динамическое имя переменной в 1С:Предприятии?

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

Часто в процессе разработки прикладных решений на платформе 1С возникает задача, которая на первый взгляд кажется тривиальной, но требует нестандартного подхода: как программно сформировать имя переменной или обратиться к свойству объекта, если имя этого свойства известно нам только в виде строки?

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

Метод первый: использование функции Выполнить()

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

Рассмотрим пример того, как можно динамически присвоить значения переменным, формируя их имена из частей:


Переменная1 = Неопределено;
Переменная2 = Неопределено;

НазваниеПеременной = "Переменная" + "1";
Выполнить(НазваниеПеременной + " = 22");

НазваниеПеременной = "Переменная" + "2";
Выполнить(НазваниеПеременной + " = 555");

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

Метод второй: использование коллекции Соответствие

Если ваша задача сводится к хранению набора значений, доступ к которым осуществляется по строковому ключу (например, «Индекс1», «Квартира1»), лучшим решением будет использование объекта Соответствие. Это гораздо более профессиональный и надежный способ организации данных.

Рассмотрим, как это выглядит на практике:


Адреса = Новый Соответствие;
Адреса.Вставить("Индекс1", ФИндекс);
Адреса.Вставить("Квартира1", ФКвартира);

// Обращение к данным
Сообщить(Адреса["Индекс1"]);

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

Метод третий: использование объекта Структура

Структура является отличным инструментом, когда вам нужно организовать именованный набор свойств. К свойствам структуры можно обращаться как через точку (если имя известно заранее), так и через квадратные скобки, используя строковую переменную.


Данные = Новый Структура;
Данные.Вставить("Индекс1", 0);
Данные.Вставить("Квартира1", "ул. Ленина, 1");

// Программное обращение
Ключ = "Индекс" + "1";
Данные[Ключ] = Данные[Ключ] + 1;

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

Работа с элементами формы и объектами

Если вам нужно управлять визуальными элементами формы, не пытайтесь создавать переменные. Обращайтесь напрямую к коллекции Элементы формы:


Для Сч = 1 По 10 Цикл
    ИмяЭлемента = "ПолеВвода" + Сч;
    Элементы[ИмяЭлемента].Видимость = Истина;
КонецЦикла;

Также, если речь идет о создании множества объектов (например, ТабличныйДокумент), используйте Массив для их хранения. Это предотвратит потерю ссылок и позволит корректно управлять каждым экземпляром объекта:


СписокДокументов = Новый Массив;
Для Сч = 1 По 5 Цикл
    НовыйТД = Новый ТабличныйДокумент;
    СписокДокументов.Добавить(НовыйТД);
КонецЦикла;

Заключение

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

  1. Всегда отдавайте предпочтение коллекциям Структура, Соответствие и Массив перед использованием Выполнить(). Это делает код более стабильным, быстрым и удобным для поддержки.
  2. Если возникла необходимость в динамическом формировании имен, используйте конструкцию Коллекция["Имя" + Счетчик].
  3. Используйте Выполнить() только в исключительных случаях метапрограммирования, где другие средства платформы объективно не справляются с задачей.

Соблюдение этих правил поможет вам писать профессиональный и предсказуемый код, который будет легко поддерживать и развивать в дальнейшем.

← На главную