При разработке обработок в среде 1С:Предприятие 8.3 на управляемых формах часто возникает вопрос: где именно создать табличную часть (ТЧ), если она носит технический характер и не предназначена для непосредственного редактирования пользователем? Выбор между деревом метаданных (объектом) и реквизитами формы существенно влияет на производительность, удобство кодинга и архитектуру решения. Рассмотрим этот вопрос подробно, проанализировав все технические нюансы.
Создание табличной части в дереве конфигурации как части объекта Обработка — это классический подход. Несмотря на то, что обработка (в отличие от документов или справочников) не хранит данные в базе данных после закрытия, наличие ТЧ в объекте дает ряд преимуществ.
Рассмотрим основные преимущества использования ТЧ объекта:
Объект. Нам не придется настраивать параметры передачи данных между формами вручную.Однако стоит учитывать, что работа с ТЧ объекта имеет свои особенности. Например, если нам нужно выполнить сложную группировку или сворачивание данных, типичную коллекцию ТабличнаяЧасть придется сначала выгрузить в ТаблицуЗначений, так как методов Свернуть() у ТЧ нет.
// Пример выгрузки ТЧ объекта для манипуляций на сервере
ТЗ = Объект.ТехническаяТЧ.Выгрузить();
ТЗ.Свернуть("Номенклатура", "Количество");
Объект.ТехническаяТЧ.Загрузить(ТЗ);
Если таблица нужна только для временных расчетов в рамках работы одной конкретной формы, логично рассмотреть вариант создания реквизита формы с типом ТаблицаЗначений. В управляемом приложении этот реквизит на стороне формы будет представлен объектом ДанныеФормыКоллекция.
Проанализируем ситуации, когда форма — лучший выбор:
Объект целиком передается между клиентом и сервером при каждом серверном вызове. Если в вашей технической ТЧ хранятся десятки тысяч строк, это вызовет серьезные задержки. Реквизит формы можно программно исключить из передачи или просто не обращаться к нему без необходимости.Выясним причину, почему разработчики часто предостерегают от использования больших ТЧ в объекте обработки. В управляемых формах существует понятие «контекста». При выполнении процедуры &НаСервере вся структура Объект сериализуется в XML (или внутренний бинарный формат) и передается на сервер, а затем обратно. Если техническая таблица содержит 100 000 строк, то при каждом нажатии любой кнопки на форме, вызывающей серверный код, этот массив данных будет «путешествовать» по сети.
Посмотрим на пример правильной работы с временными данными на форме:
Для минимизации нагрузки мы можем использовать временные таблицы в запросах, минуя передачу всей ТЧ. Если же данные нужны только на сервере, лучше вообще не хранить их в реквизитах формы или объекта, а создавать временную ТаблицуЗначений непосредственно в серверном методе.
Разберем по шагам, как принять решение:
Важное замечание: В современных версиях платформы 1С 8.3 (особенно начиная с 8.3.18) ТЧ объекта в обработках иногда рассматривается как атавизм. Однако это не совсем так — это надежный инструмент для типизации данных. Главное — помнить про вес объекта при передаче между клиентом и сервером. Если ваша "техническая" таблица не нужна на клиенте, старайтесь не хранить ее в реквизитах, которые синхронизируются автоматически.
Подводя итог нашему анализу, можно сказать: если таблица является частью логики самой обработки как инструмента (нужна в модуле объекта, в разных формах или для фоновых задач) — выбирайте объект. Если же это временный «черновик» для вычислений в конкретном экранном интерфейсе — выбирайте реквизит формы. Это позволит сохранить баланс между удобством разработки и скоростью работы системы.