В чём разница между табличной частью обработки и таблицей значений у управляемой формы и что лучше выбрать?

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

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

Типы данных и поведение на форме

Прежде всего, проанализируем ситуацию с точки зрения типов данных. Когда мы работаем в конфигураторе, ТЧ — это объект метаданных, а ТЗ на форме — это реквизит формы. Однако, как только мы открываем форму в режиме «Предприятие», и ТЧ обработки, и ТЗ формы превращаются в один и тот же тип — ДанныеФормыКоллекция.

Рассмотрим подробнее, почему это важно. Поскольку на клиенте оба объекта представлены как ДанныеФормыКоллекция, они оба доступны в клиентском коде. Мы можем обходить их циклом, добавлять строки и изменять значения в ячейках. Однако стоит помнить, что это лишь «проекция» данных. Для выполнения сложных аналитических операций (например, сворачивания таблицы или поиска по нескольким условиям) нам всё равно придется переходить на сервер и преобразовывать их в «настоящую» таблицу значений.

Контекст и доступность в модулях

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

Табличная часть обработки является частью контекста объекта. Это значит, что если вы пишете код в Модуле объекта, ТЧ доступна там напрямую через ключевое слово ЭтотОбъект.ИмяТабличнойЧасти. Это крайне удобно, если логика обработки должна вызываться не только из формы, но и программно из других мест системы.

Проанализируем пример вызова из модуля формы:


&НаСервере
Процедура ВыполнитьДействиеНаСервере()
    // ТЧ обработки доступна через РеквизитФормыВЗначение
    ОбъектОбработка = РеквизитФормыВЗначение("Объект");
    ОбъектОбработка.ВыполнитьСложныйРасчет(); // Логика внутри модуля объекта
    ЗначениеВРеквизитФормы(ОбъектОбработка, "Объект");
КонецПроцедуры

Таблица значений на форме живет только пока открыта эта форма. Она не видна в модуле объекта. Если вам нужно передать данные из ТЗ формы в модуль объекта, вам придется передавать её как параметр в каждую экспортную процедуру, что усложняет структуру кода.

Динамическое изменение структуры

Теперь разберем ситуацию, когда структура таблицы заранее неизвестна. Например, вы пишете универсальную загрузку из Excel, где количество колонок зависит от файла пользователя.

  1. ТЧ обработки: Структура колонок жестко задана в конфигураторе. Вы не можете программно добавить новую колонку в ТЧ в процессе работы пользователя.
  2. ТЗ на форме: Обладает исключительной гибкостью. Используя метод ИзменитьРеквизиты, мы можем динамически создавать и удалять колонки прямо в коде формы.

Рассмотрим пример программного создания колонки в ТЗ на форме:


&НаСервере
Процедура ДобавитьКолонкуПрограммно(ИмяКолонки)
    ДобавляемыеРеквизиты = Новый Массив;
    ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонки, Новый ОписаниеТипов("Строка"), "ТаблицаДанных"));
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
КонецПроцедуры

Интерфейсные возможности и итоги

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

Автоматические итоги: В ТЧ обработки можно просто поставить галочку в свойствах колонки «Подвал: Отображать итоги», и платформа сама будет суммировать числовые данные. Для ТЗ на форме механизм итогов часто требует написания кода в событии ПриИзменении.

Номер строки: ТЧ обработки всегда имеет стандартное поле НомерСтроки, которое автоматически пересчитывается при удалении или сортировке. В ТЗ формы такого поля по умолчанию нет — его нужно добавлять и обслуживать самостоятельно.

Сохранение настроек: Здесь преимущество у ТЗ. В свойствах формы можно включить автоматическое сохранение данных в настройках для реквизитов формы. ТЧ объекта (обработки) так просто не сохраняется — её состояние между сеансами нужно записывать либо в хранилище настроек, либо в файл вручную.

Интеграция с подсистемами (БСП)

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

Итоговые рекомендации по выбору

Подводя итог, разберем, что и в каких случаях лучше использовать.

Выбирайте Табличную часть обработки, если:

Выбирайте Таблицу значений на форме, если:

Таким образом, выбор между ТЧ и ТЗ — это не вопрос «что современнее», а вопрос архитектурного удобства. Для сложных расчетных инструментов лучше подходит ТЧ обработки, а для гибких интерактивных инструментов — Таблица значений формы.

← На главную