При разработке отчетов или обработок в 1С часто возникает задача объединения данных из нескольких табличных частей документа с данными его шапки. Начинающие разработчики часто сталкиваются с падением производительности при использовании прямых обращений к реквизитам через точку (разыменование). Давайте разберемся, почему это происходит и как правильно организовать получение данных с помощью пакетных запросов.
В исходном запросе автора активно применялись конструкции вида РеализацияТоваровУслугТовары.Ссылка.Контрагент или РеализацияТоваровУслугТовары.Ссылка.Проведен. В языке запросов 1С это называется «разыменованием полей».
Важно понимать: при каждом таком обращении платформа 1С выполняет скрытое левое соединение с основной таблицей документа. Если в табличной части документа 100 строк, а в запросе вы обращаетесь к пяти реквизитам шапки через точку, система фактически выполняет сотни лишних операций соединения. Это критически замедляет выполнение запроса, особенно в файловом варианте информационной базы.
Самый эффективный и современный способ избежать лишних соединений — это предварительная выгрузка «шапки» документа во временную таблицу. Временные таблицы позволяют платформе один раз считать данные из основной таблицы и использовать их для дальнейших соединений.
Рассмотрим, как реализовать этот подход на практике:
ВЫБРАТЬ
РТУ.Ссылка КАК Ссылка,
РТУ.Проведен КАК Проведен,
РТУ.Контрагент КАК Контрагент,
РТУ.Комментарий КАК Комментарий,
РТУ.СведенияОТранспортировкеИГрузе КАК СведенияОТранспортировкеИГрузе
ПОМЕСТИТЬ втРТУ
ИЗ
Документ.РеализацияТоваровУслуг КАК РТУ
ГДЕ
РТУ.Ссылка = &Ссылка
И НЕ РТУ.ПометкаУдаления;
После того как данные шапки помещены в таблицу втРТУ, мы можем объединять их с табличными частями товаров и услуг. Это делает код более читаемым и быстрым.
Когда шапка документа подготовлена, мы можем соединить ее с данными табличных частей. Для обеспечения максимальной скорости выполнения и корректной работы оптимизатора СУБД рекомендуется использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, если вы уверены в наличии данных.
ВЫБРАТЬ
втРТУ.Ссылка,
втРТУ.Проведен,
втРТУ.Контрагент,
"Товар" КАК ВидНоменклатуры,
Товары.Номенклатура,
Товары.Сумма,
Товары.Количество,
втРТУ.Комментарий
ИЗ
втРТУ КАК втРТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
ПО втРТУ.Ссылка = Товары.Ссылка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
втРТУ.Ссылка,
втРТУ.Проведен,
втРТУ.Контрагент,
"Услуга",
Услуги.Номенклатура,
Услуги.Сумма,
Услуги.Количество,
втРТУ.Комментарий
ИЗ
втРТУ КАК втРТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК Услуги
ПО втРТУ.Ссылка = Услуги.Ссылка;
Ссылка.Реквизит непосредственно в списке выбора табличной части. Помещайте данные шапки во временную таблицу.Следуя этим правилам, вы добьетесь значительного прироста производительности даже на объемных данных. Использование временных таблиц — это стандарт индустрии при разработке профессиональных отчетов в 1С, который обеспечивает стабильность и масштабируемость вашего кода.