Какой запрос более корректный?
Вот три запроса. Все выполняют одну и ту же функцию. Подскажите какой более корректно использовать?
Эти запросы выполняют разные функции.
Первый выбирает данные шапки и табличной части. Причем учитывает доки с пустыми табличными частями. Нормальный запрос.
Второй выбирает данные табличной части в виде вложенной таблицы. Что на практике нечасто удобно.
А третий вообще выбирает только данные табличной части, подставляя вместо данных шапки одни и те же данные, переданные параметрами (т.е. результат кардинально отличается от первых двух).
Спасибо. Еще вопросы:
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с не потянет такой объем данных и сделана свертка товаров по НДС. Данные в регистре свернуты по ндс.