Где лучше разместить техническую табличную часть в обработке 1С: в объекте или на форме?

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

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

Размещение табличной части в метаданных объекта

Создание табличной части в дереве конфигурации как части объекта Обработка — это классический подход. Несмотря на то, что обработка (в отличие от документов или справочников) не хранит данные в базе данных после закрытия, наличие ТЧ в объекте дает ряд преимуществ.

Рассмотрим основные преимущества использования ТЧ объекта:

  1. Доступность во всех формах: Если у вашей обработки планируется несколько форм (например, основная и форма настроек), ТЧ объекта будет автоматически доступна в каждой из них через основной реквизит Объект. Нам не придется настраивать параметры передачи данных между формами вручную.
  2. Строгая типизация: В метаданных мы жестко задаем типы колонок. При изменении структуры (например, удалении колонки или изменении ее типа) система поможет отследить ссылки в коде.
  3. Удобство для фоновых заданий: Если обработка запускает длительную операцию в фоновом задании, объект обработки гораздо проще целиком передать в процедуру задания. Система автоматически выполнит сериализацию всех данных, включая ТЧ.

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


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

Использование реквизита формы как альтернатива

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

Проанализируем ситуации, когда форма — лучший выбор:

  1. Оптимизация трафика (Client-Server): Реквизит Объект целиком передается между клиентом и сервером при каждом серверном вызове. Если в вашей технической ТЧ хранятся десятки тысяч строк, это вызовет серьезные задержки. Реквизит формы можно программно исключить из передачи или просто не обращаться к нему без необходимости.
  2. Динамическая структура: Если состав колонок таблицы должен меняться в зависимости от действий пользователя, программно изменять структуру реквизитов формы проще, чем пытаться адаптировать статичную структуру метаданных.
  3. Чистота метаданных: Мы не «засоряем» дерево конфигурации техническими объектами, которые нужны только внутри конкретного алгоритма формы.

Технический разбор: влияние на производительность

Выясним причину, почему разработчики часто предостерегают от использования больших ТЧ в объекте обработки. В управляемых формах существует понятие «контекста». При выполнении процедуры &НаСервере вся структура Объект сериализуется в XML (или внутренний бинарный формат) и передается на сервер, а затем обратно. Если техническая таблица содержит 100 000 строк, то при каждом нажатии любой кнопки на форме, вызывающей серверный код, этот массив данных будет «путешествовать» по сети.

Посмотрим на пример правильной работы с временными данными на форме:

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

Рекомендации по выбору

Разберем по шагам, как принять решение:

  1. Нужны ли данные в модуле объекта? Если вы пишете основной алгоритм в модуле объекта обработки (чтобы иметь возможность вызывать его программно из других мест), то ТЧ лучше создать в объекте.
  2. Планируется ли использование фоновых заданий? Если да — используйте ТЧ объекта для упрощения сериализации данных.
  3. Насколько велик объем данных? Если таблица может содержать значительное количество строк (более 5-10 тысяч) и вы работаете в управляемых формах — создавайте таблицу значений как реквизит формы или используйте временное хранилище.
  4. Будет ли пользователь видеть эти данные? Как было замечено в обсуждении на форуме, смысл ТЧ в обработке часто заключается в визуальном контроле. Если пользователю нужно проверить данные перед нажатием кнопки «Выполнить», ТЧ объекта удобнее для быстрого вывода на экран через стандартные элементы.

Важное замечание: В современных версиях платформы 1С 8.3 (особенно начиная с 8.3.18) ТЧ объекта в обработках иногда рассматривается как атавизм. Однако это не совсем так — это надежный инструмент для типизации данных. Главное — помнить про вес объекта при передаче между клиентом и сервером. Если ваша "техническая" таблица не нужна на клиенте, старайтесь не хранить ее в реквизитах, которые синхронизируются автоматически.

Итоги

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

← На главную