Имя: Пароль:
1C
 
Отчет по посещениям.
0 Zombi
 
28.09.16
15:20
Есть регистр накопления с данными по посещениям клиентов(период, клиент, тренер и.т.д.) Необходимо сделать отчет где выводить действующих клиентов, новых и потерянных. Сортировать клиентов нужно исходя из даты последнего посещения. Проблема в том, что отчет нужен по периодам. То есть формируем за год, должны получить потерянных клиентов за январь(потерянный клиент это тот у кого дата последнего посещения меньше чем январь - 1 месяц), потерянных клиентов за февраль(дата последнего посещения меньше чем февраль - 1 месяц) и.т.д. Ну все это надо в запросе, конечно. Может кто то подобное делал, киньте запрос, пожалуйста.
1 Nuobu
 
28.09.16
15:21
Когда будешь строить запрос, то вместо первой даты, отними от неё 1 месяц.
2 Горогуля
 
28.09.16
15:25
я на коленке такое ваял. сравнение сумм указанного периода с прошлым годом. используй силу полного соединения
3 ovrfox
 
28.09.16
15:32
Неоднозначная задача. Не указано каким считать клиента, который посещает раз в два месяца.
Это шесть раз потерянный клиент или если на дату отчета период меньше месяца, то он не потеряный?
4 ovrfox
 
28.09.16
15:34
И , кстати, если клиент уехал на рождественские каникулы с 25.12 по 14.01, то до 15 числа в январе считать его потерянным, а с 15 уже не считать таковым? Или как-то по другому?
5 Zombi
 
28.09.16
15:40
(3) (4) Отчет формируется только за полный месяц. Если клиент ходит раз в 2 месяца, будет тренеру 6 раз идти как потерянный. Но таких явно не много. Или вообще нет таких.
6 ovrfox
 
28.09.16
16:43
ВЫБРАТЬ
    0 КАК Сдвиг
ПОМЕСТИТЬ Сдвиги

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

ВЫБРАТЬ
    1

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

ВЫБРАТЬ
    2

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

ВЫБРАТЬ
    3

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

ВЫБРАТЬ
    4

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

ВЫБРАТЬ
    5

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

ВЫБРАТЬ
    6

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

ВЫБРАТЬ
    7

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

ВЫБРАТЬ
    8

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

ВЫБРАТЬ
    9

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

ВЫБРАТЬ
    10

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

ВЫБРАТЬ
    11

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

ВЫБРАТЬ
    12
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ), МЕСЯЦ, -Сдвиги.Сдвиг) КАК НачПериода
ПОМЕСТИТЬ Периоды
ИЗ
    Сдвиги КАК Сдвиги
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МАКСИМУМ(Посещения.Период) КАК Период,
    Посещения.Клиент КАК Клиент,
    Периоды.НачПериода КАК НачПериода
ПОМЕСТИТЬ ПоследниеПосещения
ИЗ
    РегистрСведений.Посещения КАК Посещения
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Периоды КАК Периоды
        ПО Посещения.Период < Периоды.НачПериода

СГРУППИРОВАТЬ ПО
    Посещения.Клиент,
    Периоды.НачПериода

ИМЕЮЩИЕ
    МАКСИМУМ(Посещения.Период) >= ДОБАВИТЬКДАТЕ(Периоды.НачПериода, МЕСЯЦ, -1)

ИНДЕКСИРОВАТЬ ПО
    Клиент,
    НачПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПППред.Клиент,
    ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, -1) КАК НачПериода,
    ПППред.НачПериода КАК КонПериода
ПОМЕСТИТЬ Новые
ИЗ
    ПоследниеПосещения КАК ПППред
ГДЕ
    ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 12) <> НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ)
    И НЕ (ПППред.Клиент, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, -1)) В
                (ВЫБРАТЬ
                    ПоследниеПосещения.Клиент,
                    ПоследниеПосещения.НачПериода
                ИЗ
                    ПоследниеПосещения)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПППред.Клиент,
    ПППред.НачПериода,
    ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1) КАК КонПериода
ПОМЕСТИТЬ Потерянные
ИЗ
    ПоследниеПосещения КАК ПППред
ГДЕ
    ПППред.НачПериода <> НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ)
    И НЕ (ПППред.Клиент, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1)) В
                (ВЫБРАТЬ
                    ПоследниеПосещения.Клиент,
                    ПоследниеПосещения.НачПериода
                ИЗ
                    ПоследниеПосещения)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПППред.Клиент,
    ПППред.НачПериода,
    ПППост.НачПериода КАК КонПериода
ПОМЕСТИТЬ Текущие
ИЗ
    ПоследниеПосещения КАК ПППред
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПосещения КАК ПППост
        ПО ПППред.Клиент = ПППост.Клиент
            И (ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1) = ПППост.НачПериода)
7 Zombi
 
29.09.16
08:00
(6) Да уж, разжевал и в рот положил. Спасибо большое.