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

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

При разработке в среде 1С:Предприятие 8.2 или 8.3 на обычных (неуправляемых) формах начинающие программисты часто сталкиваются с ошибкой «Переменная не определена» при попытке программно добавить строку в таблицу или очистить её. Рассмотрим подробнее, почему так происходит и как правильно организовать доступ к данным таблицы на форме.

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

Разберем ситуацию: почему возникает ошибка?

Когда мы добавляем на обычную форму элемент типа ТабличноеПоле и даем ему имя, например, ТЗ, система создает графический объект. Если мы попытаемся написать в коде:

НоваяСтрока = ТЗ.Добавить();

Конфигуратор выдаст ошибку, так как ТЗ в данном контексте не является глобальной переменной или реквизитом модуля. Система просто «не видит» этот идентификатор напрямую.

Решение №1: Использование реквизита формы (Рекомендуемый способ)

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

Выполним следующие шаги:

  1. Откроем окно редактирования формы и перейдем на закладку Реквизиты (обычно находится в правой части редактора или вызывается через контекстное меню).
  2. Создадим новый реквизит, назовем его ТЗ и установим тип данных ТаблицаЗначений.
  3. Теперь перейдем к визуальному элементу (табличному полю) на форме и откроем его Свойства.
  4. В поле Данные выберем только что созданный реквизит ТЗ.

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


НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Товар = Выборка.Товар;

Решение №2: Обращение через коллекцию ЭлементыФормы

Рассмотрим ситуацию, когда по каким-то причинам реквизит не создан, а табличное поле существует само по себе. В этом случае все элементы формы доступны через системную коллекцию ЭлементыФормы. Однако здесь есть важный технический нюанс: само по себе ТабличноеПоле — это лишь «рамка» для данных.

Чтобы получить доступ именно к строкам и методам таблицы значений, нужно обращаться к свойству Значение этого элемента. Выясним, как это выглядит в коде:


// Обращаемся к данным через свойство Значение
ЭлементыФормы.ТЗ.Значение.Очистить();
НоваяСтрока = ЭлементыФормы.ТЗ.Значение.Добавить();
НоваяСтрока.Товар = Выборка.Товар;

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

Программная инициализация таблицы

Посмотрим на пример того, как подготовить таблицу к работе, если она не привязана к реквизиту метаданных. Это часто делается в обработчике ПриОткрытии:


Процедура ПриОткрытии()
    // Создаем саму таблицу и назначаем её элементу формы
    ТаблицаОбъект = Новый ТаблицаЗначений;
    ТаблицаОбъект.Колонки.Добавить("Товар");
    ТаблицаОбъект.Колонки.Добавить("Количество");
    
    // Привязываем объект к элементу управления
    ЭлементыФормы.ТЗ.Значение = ТаблицаОбъект;
    
    // Создаем визуальные колонки в табличном поле
    ЭлементыФормы.ТЗ.СоздатьКолонки();
КонецПроцедуры

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

Типичные ошибки и советы

Проанализируем еще несколько моментов, которые помогут избежать путаницы:

Таким образом, мы разобрали основные способы взаимодействия с таблицами на обычных формах. Помните, что наиболее «чистым» и понятным кодом считается использование реквизитов формы с явным указанием их в свойстве Данные элементов управления.

← На главную