Расширение языка запросов СКД

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

Принципы работы с секций «Выбрать» во вложенных запросах

Итак, для того, чтобы понять принципы работы с секцией «Выбрать» во вложенных запросах, в консоли СКД с АТС в «Конструкторе схемы компоновки данных» скомпонуем данные из регистра накопления «Продажи – Обороты».

Компановка данных из регистра накопления «Продажи – Обороты»

Для начала, выберем несколько полей с различной детализацией периодичности:
- оба измерения: «Покупатель» и «Товар»
- и оба ресурса: «Количество» и «Сумма – Оборот»

В выбранных полях будет только «Регистратор» и ресурс «Сумма»

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

Доработка текста запроса

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

Далее выполним доработку текста запроса.

Важно!

Не достаточно просто выбрать данные из виртуальной таблицы «Продажи – Обороты». Необходимо сначала поместить их во вложенный запрос, а дальше из вложенного запроса уже выбрать данные.

Возможно, тут возникнет вопрос: каким образом доработать текст запроса?

Отвечаем:

текст запроса можно доработать следующим образом:
- сначала выбрать * «звездочку» (то есть все данные);
- затем поместить эти данные во временной таблице «Продажи»;
- и после выбрать из вложенного запроса.

Вот такой доработкой текста мы помещаем результат выборки во вложенный запрос

После сохранения изменений у нас получился вложенный запрос.

Затем во вложенном запросе выполним объединение запросов.

Объединение запросов

Предварительно добавим выборку из документа «Расход товара». Из табличной части товара выберем поля: «Количество», «Сумма», «Товар» и «Дата».

Обращаем ваше внимание на то, что если в поле «Ссылка» выбрать «Ссылка», как показано на рисунке ниже (поле «РасходТовараТоварыСсылкаСсылка»), то платформа будет строить неявное левое соединение. Это приведет к тому, что таблица «Расход товара» из документа «Расход товара» присоединится еще раз

Поэтому, чтобы не возникло избыточных обращений к базе данных при выводе ссылки в табличный документ, просто впишем ссылку «РасходТовараТоварыСсылка» и настроим псевдонимы полей

Из второго запроса объединения мы будем выбирать данные из табличной части «Товар» только из непроведенных документов

Все данные складываем во вложенный запрос. Дополнительно нужно выбрать поле «Покупатель», ссылка «Покупатель». Данные из объединения запроса у нас во вложенном запросе. Затем из вложенного запроса выбираем данные и помещаем во временную таблицу «Продажи»

В следующим запросе пакета из временной таблицы «Продажи» выбираем данные. В результате мы видим суммы продажи товаров

Но нас здесь больше интересует текст запроса, который сгенерировал компоновщик макета.

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

Во внешнем запросе мы используем лишь два поля: «Товар» и «Сумма»

Именно эти данные идут в итоговый запрос выборки, где мы выбираем поле «Товар». Здесь же выполняется группировка, поскольку в наборе данных «Запрос» стоит галочка “группировать в запросе”. Здесь выбираем поля «Товар», «Сумма» и представление ссылки в поле «Товар». Это делаем для того, чтобы вывести основное представление товара в табличный документ и чтобы не было избыточных обращений к базе данных при выводе ссылки в табличный документ.

Еще раз посмотрим наш запрос к виртуальной таблице «Продажи – Обороты», которая у нас во вложенном запросе

Мы знаем, что таблицы итогов хранят данные по месяцам. А учитывая то, что у нас данные выбираются с периодичностью детальнее месяца (вплоть до регистратора), можно сделать вывод: итоговая таблица здесь не используется, а выборка будет происходить из таблицы движения регистра, что не оптимально.

Преимущества использования секции «Выбрать» во вложенных запросах

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

Сохраним текст запроса и скомпонуем макет компоновщика.

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

Обратите внимание: во вложенном запросе остались только те поля, которые используются во внешнем запросе: «Товар» и «Сумма – Оборот» с псевдонимом «Сумма».

При такой выборке из виртуальной таблицы «Продажи – Обороты» у нас будет использоваться таблица итогов регистра накопления.

Эта схема будет работать:
- во-первых, если рассчитаны итоги;
- во-вторых, если период будет кратный месяцу.

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

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

Если в тексте запроса используется вложенный запрос, то компоновщик макета не выполняет оптимизацию во вложенном запросе. Причём не выполняет он ее до тех пор, пока во вложенном запросе в «Компоновке данных» на вкладке «Поля» мы не укажем поля, которые может оптимизировать компоновщик макета. Значит, все поля, которые мы здесь указали, могут быть удалены из текста запроса.

И успехов вам в таком непростом деле как “расширение языка запросов СКД”.

Поделиться:

Telegram
VK
WhatsApp

Оцените статью

5

5

Читайте также:

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

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

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

Некогда разбираться самостоятельно?

Напишите нам и наши эксперты ответят вам