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

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

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

Почему обращение через «точку» бывает неудобным?

В исходном запросе автора используется конструкция, при которой табличная часть выбирается «внутри» запроса к документу. Хотя это технически работает, такой подход создает вложенную структуру данных. В результате данные табличной части становятся зависимыми от шапки, что затрудняет последующую выгрузку в плоскую таблицу или использование этих данных в системе компоновки данных (СКД) без дополнительных преобразований.

Решение: обращаемся напрямую к табличной части

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

Рассмотрим, как это выглядит на практике:


ВЫБРАТЬ
    Материалы.Ссылка КАК Документ,
    Материалы.Ссылка.Дата КАК ДатаДокумента,
    Материалы.Ссылка.Склад КАК Склад,
    Материалы.Номенклатура КАК Номенклатура
ИЗ
    Документ.ОприходованиеМатериаловИзПроизводства.Материалы КАК Материалы

Разберем этот запрос по шагам:

  1. Мы указываем путь к таблице: Документ.ИмяДокумента.ИмяТабличнойЧасти. Это позволяет системе сразу обращаться к индексированным данным строк ТЧ.
  2. Используем псевдоним (в примере — Материалы), чтобы запрос был читаемым.
  3. Для получения данных из шапки мы используем точку после поля Ссылка: Материалы.Ссылка.Дата. Платформа 1С оптимизирует этот вызов, выполняя внутреннее соединение с таблицей документов.

Вариант с использованием явного псевдонима для чистоты кода

Чтобы код выглядел лаконично и профессионально, рекомендуется давать таблицам понятные имена. Рассмотрим еще один пример структуры запроса:


ВЫБРАТЬ
    ТЧ.Ссылка КАК Ссылка,
    ТЧ.Ссылка.Дата КАК Дата,
    ТЧ.Номенклатура КАК Номенклатура
ИЗ
    Документ.ОприходованиеМатериаловИзПроизводства.Материалы КАК ТЧ

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

Почему этот способ лучше других?

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

Подведем итоги

Мы выяснили, что для решения задачи не нужно использовать сложные вложенные выборки. Достаточно следовать правилу: если нужны данные табличной части, делайте запрос к этой табличной части. Реквизиты шапки документа при этом всегда доступны через точку от поля Ссылка.

Этот метод является стандартом разработки в 1С. Используя такой подход, вы обеспечите высокую скорость работы ваших отчетов и облегчите поддержку кода в будущем.

← На главную