Как получить данные из одной табличной части документа в другую с помощью запроса?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Использование временных таблиц для связки данных

Наиболее надежным и производительным способом является использование временных таблиц. Это позволяет не просто «перенести» данные, а выполнить качественное соединение, обеспечивающее целостность информации. Разберем по шагам, как построить такой запрос:

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

Посмотрим на пример реализации такого запроса:


ВЫБРАТЬ
    ТЧ_А.Номенклатура КАК Номенклатура,
    ТЧ_А.Проект КАК Проект
ПОМЕСТИТЬ ВТ_Проекты
ИЗ
    Документ.НашДокумент.ТЧ_А КАК ТЧ_А
ГДЕ
    ТЧ_А.Ссылка = &Ссылка;

ВЫБРАТЬ
    ТЧ_Б.Номенклатура КАК Номенклатура,
    ВТ_Проекты.Проект КАК Проект
ИЗ
    Документ.НашДокумент.ТЧ_Б КАК ТЧ_Б
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Проекты КАК ВТ_Проекты
    ПО ТЧ_Б.Номенклатура = ВТ_Проекты.Номенклатура
ГДЕ
    ТЧ_Б.Ссылка = &Ссылка;

Почему использование временных таблиц эффективно?

Когда мы работаем с ТабличнаяЧасть документа, важно помнить об ограничениях производительности. Если вы попытаетесь перебирать данные в цикле, это может замедлить работу системы. Пакетные запросы с ПОМЕСТИТЬ позволяют выполнить всю обработку на стороне сервера базы данных. Это исключает лишнюю передачу данных между сервером и клиентом.

Обратите внимание на использование параметра &Ссылка. Всегда ограничивайте выборку в запросе конкретной ссылкой на документ, чтобы не получить данные из всей базы, что критически важно для производительности.

Альтернативный подход: Выгрузка в таблицу значений

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

  1. Выгрузите первую табличную часть в ТаблицаЗначений методом Выгрузить().
  2. Передайте эту ТаблицаЗначений в запрос в качестве параметра.
  3. Используйте эту таблицу как источник данных, поместив её в запрос методом МенеджерВременныхТаблиц.
  4. Выполните соединение внутри пакета запросов и загрузите результат обратно в табличную часть документа с помощью Загрузить() или обхода результата запроса.

Важные рекомендации по архитектуре

В процессе совместного анализа задачи важно задаться вопросом: а нужна ли вторая табличная часть вообще? Рассмотрим несколько советов:

Таким образом, мы выяснили, что оптимальный путь — это использование пакетных запросов с временными таблицами. Это позволяет писать чистый, поддерживаемый код, который работает быстро и корректно в рамках архитектуры 1С.

← На главную