IT-КУБиК-Сервис • Форум 1С
Абстрактный тёмно-синий фон с мягкими геометрическими линиями и оранжевыми акцентами, создающий технологичную атмосферу

Агрегатор публикаций с Инфостарта по 1С:Предприятие — обработки, расширения, конфигурации, интеграции и администрирование. Сообщество специалистов 1С.

Как получать данные из нескольких таблиц в запросах 1С

Запросы 1С позволяют получать связанные сведения из регистров, справочников, документов и других источников без последовательной обработки каждого объекта на встроенном языке. Вместо нескольких обращений к базе можно сформировать единый набор данных, отфильтровать его и передать результат в отчет, обработку или бизнес-логику.

Основой такой выборки служит соединение таблиц по общему реквизиту. Например, документ можно связать с контрагентом, табличную часть — с номенклатурой, а движения регистра — с подразделением или договором. От выбора типа соединения зависит, попадут ли в результат записи без соответствующей пары.

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

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

Базовая структура запроса с несколькими источниками

Для объединения данных используется конструкция СОЕДИНЕНИЕ. Таблицы получают псевдонимы, после чего связь описывается в секции ПО. Например:

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

Левое соединение сохраняет все строки основной таблицы, даже если связанный объект отсутствует. При внутреннем соединении ВНУТРЕННЕЕ СОЕДИНЕНИЕ в результат попадут только записи, для которых найдена пара. Такой выбор влияет на смысл отчета: пропавшие сведения могут быть ошибкой данных или ожидаемым результатом фильтрации.

Псевдонимы делают запрос компактнее и снижают риск неоднозначности, если одинаковые имена реквизитов встречаются в нескольких источниках. В условиях соединения следует явно указывать таблицу и поле, например Заказ.Контрагент = Контрагент.Ссылка.

Выбор подходящего типа соединения

Тип соединения определяет, какие строки будут сохранены после объединения таблиц. Перед написанием запроса полезно сформулировать, какой источник является главным и должны ли записи без связанного объекта присутствовать в отчете.

Условия отбора можно размещать в ГДЕ, но для левого соединения это требует осторожности. Если фильтр по правой таблице записать в ГДЕ, строки с пустыми значениями фактически могут исчезнуть, и результат станет похож на внутреннее соединение. Ограничение правой стороны часто правильнее добавить непосредственно в условие ПО.

Работа с пустыми значениями и дублями

При отсутствии связанной записи реквизиты правой таблицы получают значение NULL. В языке запросов 1С для безопасной замены такого результата применяется функция ЕСТЬNULL, например ЕСТЬNULL(Контрагент.Наименование, "Не указан"). Это позволяет выводить понятные значения в отчетах и избежать неожиданных пустых полей.

Соединение с табличной частью или регистром может увеличить количество строк. Один документ, связанный с пятью товарами, даст пять строк результата. Если требуется одна строка на документ, применяют СГРУППИРОВАТЬ ПО, агрегатные функции или предварительное сведение данных во временной таблице.

При проверке результата полезно сравнить количество строк до и после каждого соединения. Неожиданный рост обычно означает связь «один ко многим» или неполное условие ПО. Соединять таблицы только по совпадению наименований не следует: надежнее использовать ссылки, периоды, регистраторов и другие ключевые поля.

Производительность и параметры выборки

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

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

Виртуальные таблицы регистров накопления и сведений следует вызывать с заполненными параметрами, когда это предусмотрено их структурой. Например, отбор по периоду и измерениям может существенно сократить объем чтения. Проверять производительность нужно на сервере и на данных, близких к реальной эксплуатации.

Объединение результатов и отладка

Иногда данные находятся в источниках с разной структурой, и обычного соединения недостаточно. Оператор ОБЪЕДИНИТЬ складывает результаты нескольких выборок, а ОБЪЕДИНИТЬ ВСЕ сохраняет дубликаты. В каждой части должны совпадать количество, порядок и совместимость типов выбранных полей.

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

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

Использование запросов из нескольких таблиц особенно эффективно в отчетах, обработках сверки, обменах и задачах автоматизации учета. Подход можно применять и в решениях, связанных с KUBiK, когда требуется объединить учетные данные, справочники и сведения о бизнес-процессах в единой аналитической выборке.

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