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

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

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

Анализ ошибки: обращение к свойству ТекущиеДанные

Выясним причину, по которой код добавления строки не срабатывает. Распространенный ошибочный подход выглядит следующим образом:


ТЗНайденыСтроки = ЭлементыФормы.ТаблицаДанныхНайденыСтроки.ТекущиеДанные;
// ...
НоваяСтрНайденаСтр = ТЗНайденыСтроки.Добавить();

Проанализируем эту ситуацию. Свойство ТекущиеДанные (или ТекущаяСтрока) элемента управления возвращает объект текущей выделенной строки (типа ДанныеСтрокиТабличногоПоля), а не всю коллекцию данных. У отдельной строки отсутствует метод Добавить(), поэтому при попытке выполнить такой код система выдаст ошибку или данные не будут добавлены.

Способ 1. Программное добавление строки в коллекцию данных

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

Для обычных форм добавим строку напрямую через объект-источник:


// Добавление строки в табличную часть объекта
НоваяСтрока = ОбъектДокумента.ИмяТабличнойЧасти.Добавить();
НоваяСтрока.Реквизит1 = Значение;
НоваяСтрока.Реквизит2 = ДругоеЗначение;

Если работа ведется в управляемых формах, добавить строку можно несколькими путями:


// 1. Программное добавление в коллекцию (работает на клиенте и сервере)
НоваяСтрока = Объект.ИмяТабличнойЧасти.Добавить();
НоваяСтрока.Реквизит1 = Значение;

// 2. Интерактивный вызов добавления строки (выполняется на клиенте)
Элементы.ИмяТаблицыФормы.ДобавитьСтроку();

Способ 2. Связывание табличного поля с табличной частью в дополнительной форме

Разберем случай, когда табличная часть документа должна отображаться не в основной форме документа, а в дополнительной (произвольной) форме. В обычных формах при создании произвольной формы выбор типа ДокументТабличнаяЧасть в свойствах табличного поля может быть недоступен, пока не настроен источник данных.

Рассмотрим по шагам варианты решения этой задачи:

  1. Прямое связывание через свойство Данные:

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

    
    // При открытии формы связываем табличное поле с табличной частью документа
    ЭлементыФормы.ТабличноеПоле1.Данные = "КонтекстДокумента.ИмяТабличнойЧасти";
    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
    
  2. Использование временной Таблицы Значений (рекомендуемый подход):

    Чтобы не менять данные документа напрямую до подтверждения пользователем (например, до нажатия кнопки «ОК»), удобно работать через промежуточную таблицу значений:

    
    // 1. При открытии формы выгружаем данные из ТЧ документа в реквизит формы типа ТаблицаЗначений
    ТЗФормы = ОбъектДокумента.ИмяТабличнойЧасти.Выгрузить();
    
    // 2. Добавляем новые строки в Таблицу Значений
    НоваяСтрока = ТЗФормы.Добавить();
    НоваяСтрока.Реквизит1 = Значение;
    
    // 3. При сохранении формы загружаем данные обратно в документ
    ОбъектДокумента.ИмяТабличнойЧасти.Загрузить(ТЗФормы);
    

При использовании таблицы значений на форме не забудьте вызвать метод СоздатьКолонки() у элемента ТабличноеПоле, если колонки не были сформированы в конструкторе формы заранее.

← На главную