Мне необходимо вывести покупателей в разрезе месяцев и филиалов, где общее количество покупок у покупателя за весь период > 1

Какие мои действия:

1) Во вложенном запросе я хочу вывести покупателей, у который больше одной покупки за весь период (без разрезов месяцев и филиалов)
2) В основном запросе я хочу вывести результат вложенного запроса в разрезе филиалов и месяцев

Но запрос не получается выполнить, так как во вложенном нет полей месяц и филиал

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

```1c
    ВЫБРАТЬ
    Покупки.ПокупательТелефон КАК ПокупательТелефон,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Покупки.ПокупкиЗаГод) КАК ПокупкиЗаГод,
    Покупки.Фирма КАК Фирма,
    НАЧАЛОПЕРИОДА(Покупки.МЕСЯЦ, МЕСЯЦ) КАК МЕСЯЦ
    ИЗ
    (ВЫБРАТЬ
    РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) КАК ПокупкиЗаГод,
    РасходнаяНакладная.Фирма КАК Фирма,
    НАЧАЛОПЕРИОДА(РасходнаяНакладная.Дата, МЕСЯЦ) КАК МЕСЯЦ
    ИЗ
    Документ.РасходнаяНакладная КАК РасходнаяНакладная
    ГДЕ
    РасходнаяНакладная.Проведен
    И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
    И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
    И РасходнаяНакладная.Фирма.Город = &Город
    И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL

    СГРУППИРОВАТЬ ПО
    РасходнаяНакладная.Покупатель.Телефон,
    РасходнаяНакладная.Фирма,
    НАЧАЛОПЕРИОДА(РасходнаяНакладная.Дата, МЕСЯЦ)

    ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) > 1
    ) КАК Покупки

    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Покупки.МЕСЯЦ, МЕСЯЦ),
    Покупки.Фирма,
    Покупки.ПокупательТелефон
```
---
Рекомендую отказаться от вложенных запросов в пользу временных таблиц. Сначала получите из исходной таблицы покупателей, у которых покупок больше одной, и поместите результат во временную таблицу. Затем опять из исходной таблицы получите нужные данные, отфильтровав данные используя временную таблицу.
---
Рекомендую отказаться от вложенных запросов в пользу временных таблиц. Сначала получите из исходной таблицы покупателей, у которых покупок больше одной, и поместите результат во временную таблицу. Затем опять из исходной таблицы получите нужные данные, отфильтровав данные используя временную таблицу.
---
если я правильно понял, то:

- в первой ВТ1 вывожу покупателей, у которых покупка >1
- во второй ВТ2 вывожу покупателей по месяцам и филиалам
- связываю ВТ1 и ВТ2

Один вопрос, получится ли связь между ними, если в ВТ1 не использую НАЧАЛОПЕРИОДА и филиалы, а в ВТ2 использую, то есть по факту их свяжу только по покупателю
---
- во второй ВТ2 вывожу покупателей по месяцам и филиаламПромежуточная временная таблица по большому счету не нужна. Либо сделайте ее первой, а временную таблицу, что отбирает не разовых покупателей собирайте из нее. Так, пожалуй, даже оптимальнее будет.
то есть по факту их свяжу только по покупателюТак исходя из задачи именно это Вам и нужно - отобрать покупателей.
---
извиняюсь, я возможно некорректно сформулировал постановку задачи. Мне нужно в результат вывести: месяц (по нему будет группировка), фирма, покупатель, количество покупок, но вывести только тех покупателей, у кого суммарно покупок не в каждом месяце > 1, а в году
---
Значит я правильно понял формулировку и от рекомендаций не отказываюсь. :) Связь со временной таблицей покупателей, у которых больше одной покупки, нужна исключительно для фильтрации данных исходной таблицы данных. Все данные выбираться должны из исходной таблицы. Соответственно она должна быть осуществлена внутренним соединение. Либо можно записать условие в секции ГДЕ, если таких покупателей немного.
---
Возможно я не совсем ясно понял, как реализовать подобное. В чем может быть проблема?

Если вывожу данный кусок кода (это ВТ запроса ниже), он показывает 67 тыс. записей, то есть можно сделать вывод, что у нас столько столько покупателей

```1c
    ВЫБРАТЬ
    РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) КАК ПокупкиЗаГод
    ИЗ
    Документ.РасходнаяНакладная КАК РасходнаяНакладная
    ГДЕ
    РасходнаяНакладная.Проведен
    И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
    И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
    И РасходнаяНакладная.Фирма.Город = &Город
    И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL

    СГРУППИРОВАТЬ ПО
    РасходнаяНакладная.Покупатель.Телефон

    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) > 1
```

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

```1c
    ВЫБРАТЬ
    РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) КАК ПокупкиЗаГод
    ПОМЕСТИТЬ Т1
    ИЗ
    Документ.РасходнаяНакладная КАК РасходнаяНакладная
    ГДЕ
    РасходнаяНакладная.Проведен
    И НЕ РасходнаяНакладная.Фирма.ПометкаУдаления
    И РасходнаяНакладная.Дата МЕЖДУ &НачалоГода И &КонецГода
    И РасходнаяНакладная.Фирма.Город = &Город
    И НЕ РасходнаяНакладная.Покупатель.Телефон ЕСТЬ NULL

    СГРУППИРОВАТЬ ПО
    РасходнаяНакладная.Покупатель.Телефон

    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) > 1
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    РасходнаяНакладная.Фирма КАК Фирма,
    НАЧАЛОПЕРИОДА(РасходнаяНакладная.Дата, МЕСЯЦ) КАК МЕСЯЦ,
    РасходнаяНакладная.Покупатель.Телефон КАК ПокупательТелефон,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладная.Ссылка) КАК ПокупкиЗаГод

    ИЗ
    Т1 КАК Т1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
    ПО Т1.ПокупательТелефон = РасходнаяНакладная.Клиент.Телефоны

    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РасходнаяНакладная.Дата, МЕСЯЦ),
    РасходнаяНакладная.Фирма,
    РасходнаяНакладная.Покупатель.Телефон
```
---
Почему у Вас во временной таблице используется "РасходнаяНакладная.Покупатель.Телефон", а в результирующей выборке связь по "РасходнаяНакладная.Клиент.Телефон"? Возможно дело в этом.
---
Ну и не рекомендовал бы Вам подменять покупателей их телефоном до самой последнего запроса. Т.е. и во временной таблице, и в связях использовать само поле покупателя. А в результирующей выборке уже взять его телефон. Если конечно не стоит задачи идентифицировать разных покупателей с одним телефоном как одного.
---
Благодарю, Денис. Действительно, по невнимательности связал не те поля)

По поводу телефона, в данной задаче я вывожу только тех покупателей, которых мы можем идентифицировать, а идентифицировать в данном случае я могу только по номеру телефона
---
Дело не в идентификации. Я предлагаю оперировать в запросе ссылкой, а не строкой, дабы исключить неоднозначности в результате. Так надежнее и так быстрее.
---
Ошибка в связях не единственная. Вы получите результаты за все года с таким запросом.

Под "исходной таблицей" в своих постах я имел ввиду таблицу, откуда Вы выбираете данные, но с учетом всех накладываемых фильтров. Т.е. это РасходнаяНакладная с отбором по дате, городу, пометке удаления фирмы и пр. Эти фильтры Вы опустили в результирующем запросе, что приведет к избыточным данным в отчете. На всякий случай еще раз поясню, что соединение с временной таблицей "Т1" - это дополнительный фильтр исходных данных.

Я бы таки рекомендовал поступить как написано в (4):
- Выбрать все необходимые данные, как то фирма, месяц, покупатель и количество покупок за год, и поместить результат во временную таблицу.
- Из полученной временной таблицы выбрать только тех покупателей, у кого покупок больше 1, игнорируя прочую аналитику (фирму, месяц). Результат поместить во вторую временную таблицу.
- Из первой временной таблицы выбрать все данные, но при этом соединить ее со второй временной по покупателю внутренним соединением. В результате из исходной таблицы "уйдут" покупатели с одной лишь покупкой за год.
---
Да, я тоже потом заметил, что упустил фильтры, поправил, результат получился верным. Обязательно попробую ваш способ, уверен данный способ будет корректнее. Благодарю еще раз за помощь)