Доброго времени суток. Есть достаточно простой отчет :
Контрагент / Номенклатура / кол-во,сумма продажа/ кол-во,сумма возврат/ кол-во,сумма итог. по двум документам "Реализация товаров и услуг", "Возврат товаров от покупателя". Группировка: контрагент / номенклатура в запросе в условиях только дата начала и дата окончания, В таком варианте все работает отлично, в настройках добавляем отбор по контрагенту при условии "=" все отлично, если ставить условие "В группе" или "В группе из списка" отчет формируется минут 10. База типовая.
---
Еще лучше внутреннее соединение и
ГДЕ
РеализацияТоваровУслуг1 .Дата >= &ДатаНач
И РеализацияТоваровУслуг1 .Дата <= &ДатаКон
Сколько контрагентов в справочнике?
---
Просто контрагентов попробуйте запросить. Не из документов
---
Немного дурацкий вопрос - а "В группе" нормально заполнено? Там нет пустых строк? И что за отчет? И какая бухгалтерия?
---
БП 3.0 типовая, отчет надо написать, вернее он написан и правильно все считает только ОЧЕНЬ тормозит , а причину понять не могу. отбор ставлю в настройках когда ставим "В группе" то собственно выбираем группу и через 10-15 минут получаем правильно посчитанную таблицу.
---
Почему он должен быстрее работать?
Контрагентов много?
Напишите текст запроса)
---
И вот еще 1 момент который обнаружился эксперементальным путем, если поставить отбор "В списке" в список добавить всех контрагентов из группы то считается за 2-3 секунды. если "в группе" и поставить эту же группу то 14 минут.
---
ВЫБРАТЬ
 РеализацияТоваровУслуг.Ссылка.Контрагент КАК Контрагент,
 РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
 СУММА(РеализацияТоваровУслуг.Количество) КАК Приход,
 СУММА(0) КАК Расход,
 СУММА(РеализацияТоваровУслуг.Количество) КАК КоличествоОстатки,
 СУММА(РеализацияТоваровУслуг.Сумма) КАК ПриходСумма,
 СУММА(0) КАК РасходСумма,
 СУММА(РеализацияТоваровУслуг.Сумма) КАК СуммаОстатки
ИЗ
 Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
ГДЕ
 РеализацияТоваровУслуг.Ссылка.Дата >= &ДатаНач
 И РеализацияТоваровУслуг.Ссылка.Дата <= &ДатаКон

СГРУППИРОВАТЬ ПО
 РеализацияТоваровУслуг.Ссылка.Контрагент,
 РеализацияТоваровУслуг.Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ВозвратТоваровОтПокупателя.Ссылка.Контрагент,
 ВозвратТоваровОтПокупателя.Номенклатура,
 СУММА(0),
 СУММА(ВозвратТоваровОтПокупателя.Количество),
 СУММА(-ВозвратТоваровОтПокупателя.Количество),
 СУММА(0),
 СУММА(ВозвратТоваровОтПокупателя.Сумма),
 СУММА(-ВозвратТоваровОтПокупателя.Сумма)
ИЗ
 Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателя
ГДЕ
 ВозвратТоваровОтПокупателя.Ссылка.Дата >= &ДатаНач
 И ВозвратТоваровОтПокупателя.Ссылка.Дата <= &ДатаКон

СГРУППИРОВАТЬ ПО
 ВозвратТоваровОтПокупателя.Номенклатура,
 ВозвратТоваровОтПокупателя.Ссылка.Контрагент
---
Написано не очень)
Соедините Табличную часть и документ реализация
Из реализации тените контрагента
---
Если правильно понял ТАК ?
ВЫБРАТЬ
 РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
 СУММА(РеализацияТоваровУслуг.Количество) КАК Приход,
 СУММА(0) КАК Расход,
 СУММА(РеализацияТоваровУслуг.Количество) КАК КоличествоОстатки,
 СУММА(РеализацияТоваровУслуг.Сумма) КАК ПриходСумма,
 СУММА(0) КАК РасходСумма,
 СУММА(РеализацияТоваровУслуг.Сумма) КАК СуммаОстатки,
 РеализацияТоваровУслуг1.Контрагент КАК Контрагент
ИЗ
 Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг1
  ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслуг1.Ссылка
ГДЕ
 РеализацияТоваровУслуг.Ссылка.Дата >= &ДатаНач
 И РеализацияТоваровУслуг.Ссылка.Дата <= &ДатаКон

СГРУППИРОВАТЬ ПО
 РеализацияТоваровУслуг.Номенклатура,
 РеализацияТоваровУслуг1.Контрагент
.......................... ну и т.д.
---
ДА
Должен быстрее работать
Но не факт что решит проблему
Сколько контрагентов в группе?
---
контрагентов от 15 до 50, групп будет несколько стремимся к "В группе из списка" в таком варианте работает в 3 раза быстрее, но все равно как то эээ медленно это (группа из 50 контрагентов , в отчет по документам попадает 17). все пока тестирую на 1 группе на данных за тот же период в 2-ке формируется секунд 5. Есть подозрение , что где-то я что-то не правильно делаю, а вот как это сделать правильно не понимаю.
---
Еще лучше внутреннее соединение и
ГДЕ
РеализацияТоваровУслуг1 .Дата >= &ДатаНач
И РеализацияТоваровУслуг1 .Дата <= &ДатаКон
Сколько контрагентов в справочнике?
---
Коллега ВЫ ГЕНИЙ спасибо ВСЕМ

(19)И ВАМ спасибо
Получилось так :
ВЫБРАТЬ
 РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
 РеализацияТоваровУслуг.Количество КАК Приход,
 0 КАК Расход,
 РеализацияТоваровУслуг.Количество КАК КоличествоОстатки,
 РеализацияТоваровУслуг.Сумма КАК ПриходСумма,
 0 КАК РасходСумма,
 РеализацияТоваровУслуг.Сумма КАК СуммаОстатки,
 РеализацияТоваровУслуг1.Контрагент КАК Контрагент
ИЗ
 Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг1
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
  ПО (РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслуг1.Ссылка)
ГДЕ
 РеализацияТоваровУслуг1.Дата >= &ДатаНач
 И РеализацияТоваровУслуг1.Дата <= &ДатаКон

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ВозвратТоваровОтПокупателя.Номенклатура,
 0,
 ВозвратТоваровОтПокупателя.Количество,
 -ВозвратТоваровОтПокупателя.Количество,
 0,
 ВозвратТоваровОтПокупателя.Сумма,
 -ВозвратТоваровОтПокупателя.Сумма,
 ВозвратТоваровОтПокупателя1.Контрагент
ИЗ
 Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя1
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателя
  ПО (ВозвратТоваровОтПокупателя.Ссылка = ВозвратТоваровОтПокупателя1.Ссылка)
ГДЕ
 ВозвратТоваровОтПокупателя1.Дата >= &ДатаНач
 И ВозвратТоваровОтПокупателя1.Дата <= &ДатаКон

группировки и отборы все в настройках время выполнения меньше 5 секунд
---
ну да... ;)
---
Если Вас не затруднит, объясните мне пожалуйста, за счет чего получился выигрыш в производительности? Я до сих пор был уверен, что отбор, накладываемый на вложенные поля от ссылки для строк ТЧ, всегда приводит к неявному добавлению в запрос левого соединения с основной таблицей. Т.о. в моей голове исходный запрос в (6) и получившийся в (23) идентичны. Что же я такого до сих пор упускал?

Заранее спасибо.
---
Если честно, то сам не до конца врубаюсь от этой конструкции

Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг1
ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслуг1.Ссылка

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

Т.е.:

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Ссылка КАК ССылка
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО (РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка)
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач
    И РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон
```

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

Далее
В ИЕРАРХИИ создает виртуальную таблицу с Контрагентами, которая пристыкуется к таблице Реализаций, которая пристыкуется к таблице Товаров.
Скорее всего беда именно в этом.

```1c
    ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка
    ПОМЕСТИТЬ вт_Контрагенты
    ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ГДЕ Контрагенты.Ссылка В (&Контрагенты) // это просто как пример, я так понимаю что здесь будет весь список контрагентов из Иерархии
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Ссылка КАК ССылка
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ вт_Контрагенты КАК вт_Контрагенты
    ПО РеализацияТоваровУслуг.Контрагент = вт_Контрагенты.Ссылка
    ПО (РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка)
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач
    И РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон
```
---
добавьте отбор Проведен = Истина
---
Отчет изначально был написан для БП 2.0 на универсальном отчете. После перехода на 3.0 потребовался тот же отчет, по нему считают вознаграждение менеджерам по продажам, а менеджеров делят по ГРУППАМ контрагентов (не идеальный вариант но люди так работают много лет) и соответственно надо формировать именно по "В группе из списка"
---
По группе из списка всегда будет дольше работать
У вас есть группы доступа по контрагентам?
У пользователя формирующего отчет права не полные?
---
У вас есть группы доступа по контрагентам? - НЕТ
У пользователя формирующего отчет права не полные?
- Полные
---
А чего бы по регистру не собирать? И второй момент: если собираете по документам - сделайте этот отбор параметром. Можно сделать этов СКД на вкладке "Компоновка данных".
---
БП 3.0 нет тут регистров.
---
Запрос к регистру бухгалтерии движенияДтКт - достаем оттуда регистратор и субконто. Счет 62 в дебете. Я бы так сделал.
---
Я не оч. силен в Б.Учете там из -за возвратов какая то засада получается, поэтому и делали изначально по документам.
---
Тут два документа - возврат и реализация. Возвраты с "-", реализация с "+". Получитье остатки по 62 счету для каждого контрагента и номенклатуры и все. Напишите лучше запрос к регистру, достаньте оттуда документы. Такой запрос всяко быстрее отработается.
---
А разница? СКД сама параметр впихнёт
---
А зачем группировки в подзапросах, они ведь все равно не работают...;) Можете проверить с ними и без них, результат будет одинаковый
Хотя вру... разный, проверил, но если вы в СКД делаете то группировку лучше на выводе делать а не в запросе.