Какой запрос более корректный?

Какой запрос более корректный?

Вот три запроса. Все выполняют одну и ту же функцию. Подскажите какой более корректно использовать?

Эти запросы выполняют разные функции.

Первый выбирает данные шапки и табличной части. Причем учитывает доки с пустыми табличными частями. Нормальный запрос.

Второй выбирает данные табличной части в виде вложенной таблицы. Что на практике нечасто удобно.

А третий вообще выбирает только данные табличной части, подставляя вместо данных шапки одни и те же данные, переданные параметрами (т.е. результат кардинально отличается от первых двух).

Спасибо. Еще вопросы:

1. Какой из первых двух запросов будет быстрее выполняться?

2.И как организовать вывод в макет результат того запроса со всеми группировками?

Макет во вложении.

> 2.И как организовать вывод в макет результат того запроса со всеми группировками?Посмотрите встроенную справку в режиме Конфигуратор:

Справка - Содержание справки - 1С:Предприятие - Встроенный язык - Работа с запросами - Выполнение и работа с запросами во встроенном языке - Основные приемы работы.

Там есть примеры.

> 1. Какой из первых двух запросов будет быстрее выполняться?

Сложно сказать. Разница, думаю, будет несущественна.

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

Например, часто можно решить как через соединения, так и через "В".

Какой вариант быстрее - заранее почти никогда сказать нельзя.

Язык запросов 1С (и SQL) - декларативный. Он описывает желаемый результат.

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

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

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

> 2.И как организовать вывод в макет результат того запроса со всеми группировками?

Вопрос достаточно общий, а времени катастрофически не хватает. Извините.

Спасибо большое за развернутый ответ.

Вот еще появились вопросы:

1. Как одновременно осуществить выборку из табличной части документов прихода и расхода, так чтобы потом можно было вывести результат в онду строку макета с столбцами приход и расход соответсвенно?

2. Как сделать проверку в запросе пуста ли табличная часть или нет.

1. В правильно спроектированной системе данные прихода/расхода должны браться из регистров. Они для этого и придуманы.

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

2. ИМХО, наиболее элегантный такой вариант:

Небольшое пояснение. В секции ВЫБРАТЬ используется коррелированный подзапрос по табличной части каждого документа, а конструкция КОГДА 1 В (ВЫБРАТЬ 1 ИЗ . ) по сути эмулирует функцию EXISTS() TSQL, возвращающую истину для непустого подзапроса.

Есть очень полезная книжка: http://www.online.1c.ru/books/book/3761720/

Вот оглавление от нее: http://v8.1c.ru/metod/books/book.jsp?id=125

Дело в том, что постановка задачи не совсем понятна.

1. Как одновременно осуществить выборку из табличной части документов прихода и расхода, так чтобы потом можно было вывести результат в онду строку макета с столбцами приход и расход соответсвенно?

В чем заключается задача?

Если вам нужны учетные данные, то для этого нужно брать информацию из регистров.

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

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

Вот код процедуры которая формирует запрос, выполняет его, а затем заполняет макет (печатную форму).

Вот результирующая таблица (во вложении).

1. Как вывести итоги в макет по Организации и ПОдразделению?

2. Как вывести в макет результат в виде иерархии: Организация---Подразделение--Контрагент?

И чтобы можно было сворачивать и разворачивать по этим полям.

Ну и вопрос из пердыдущего поста:

3. Как одновременно осуществить выборку из табличной части документов прихода и расхода, так чтобы потом можно было вывести результат в онду строку макета с столбцами приход и расход соответсвенно?

Сейчас реализован проход по порядку сначал по документам прихода потом расхода. А необходимо отличить где приход где расход и вывести по данной номенклатуре сразу и приход и расход в печатную форму.

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

📎📎📎📎📎📎📎📎📎📎