Имя: Пароль:
1C
1С v8
Запрос для отчета
0 Shmidt
 
15.07.14
13:47
Подскажите как соорудить выборку? Есть регистр сведений НовыеКонтрагенты. Туда попадают все контрагенты в момент заведения в базе. Есть стандартный регистр накопления "Продажи". В него попадают все реализации. Суть такова, что необходимо сделать отчет по количеству новых контрагентов за каждый месяц при условии, что эти контрагенты совершали покупки в месяц своего появления.
Соорудил вот такой запрос:
ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ АНМ_НовыеКонтрагенты.Контрагент) КАК Контрагент,
    НАЧАЛОПЕРИОДА(АНМ_НовыеКонтрагенты.ДатаВвода, МЕСЯЦ) КАК ДатаВвода
ИЗ
    РегистрНакопления.Продажи.Обороты(&Нач, &Кон, Регистратор, ) КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_НовыеКонтрагенты КАК АНМ_НовыеКонтрагенты
        ПО (АНМ_НовыеКонтрагенты.Контрагент = ПродажиОбороты.Контрагент)
ГДЕ
    АНМ_НовыеКонтрагенты.ДатаВвода МЕЖДУ &Нач И &Кон

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(АНМ_НовыеКонтрагенты.ДатаВвода, МЕСЯЦ)

УПОРЯДОЧИТЬ ПО
    ДатаВвода
1 Shmidt
 
15.07.14
13:49
Но эта зараза работает только в 1 месяце. Если больше 1 месяца в периоде, то цифры некорректны
Как бы сделать данный отчет за большой период, но с подпериодами что ли?
)))
2 catena
 
15.07.14
13:58
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_НовыеКонтрагенты КАК АНМ_НовыеКонтрагенты
        ПО (АНМ_НовыеКонтрагенты.Контрагент = ПродажиОбороты.Контрагент)
и НачалоПериода( АНМ_НовыеКонтрагенты.ДатаВвода,Месяц)=НачалоПериода(ПродажиОбороты.Период,Месяц)
3 Shmidt
 
15.07.14
14:00
(2) Спасибо большое. Первый раз столкнулся в запросе с тем, что можно сразу несколько полей связи задать для таблиц. Век живи - век учись! )))
4 mikecool
 
15.07.14
14:01
(2) ты смотри какая умница )))
5 catena
 
15.07.14
14:03
(4)Ась? Где-то накосячила?
6 Shmidt
 
15.07.14
14:04
(5) Нет я на живой базе сейчас протестировал. Все корректно выбирает. Ты супер!!!
7 mikecool
 
15.07.14
14:04
(5) я про то, что не только цитаты собираешь, но и на машинке вышиваешь )
8 catena
 
15.07.14
14:06
(6)Да не за что

(7)А, не, на машинке не умею. Только крючком или на спицах.))
9 Shmidt
 
15.07.14
14:51
Я "люблю" маркетологов!!!
Теперь выясняется что задача иначе стояла. Необходимо сосчитать контрагентов которые сделали свой первый заказ?
10 Shmidt
 
15.07.14
14:54
Как определить, что в таком-то месяце у контрагента первая реализация и соответственно выбрать его, а все последующие записи этого контрагента не учитывать?
11 catena
 
15.07.14
15:01
ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент,
    Минимум(ПродажиОбороты.Период) КАК ДатаПервойПродажи
ИЗ
    РегистрНакопления.Продажи.Обороты(&Нач, &Кон, Регистратор, ) КАК ПродажиОбороты
Сгруппировать по ПродажиОбороты.Контрагент
12 Shmidt
 
15.07.14
15:17
(11) С небольшими доработками вроде то, что надо выбирает. Пусть маркетологи тестируют сами.

Еще раз спасибо, ты случайно не мой ангел-хранитель?
13 catena
 
15.07.14
15:24
(12)Нет, у меня просто пред-отпуск и работать не хочется :)
14 Shmidt
 
15.07.14
15:56
ВЫБРАТЬ
    ВложенныйЗапрос1.Период КАК Период,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.Контрагент) КАК Контрагент,
    ВложенныйЗапрос.КонтрагентЮрФизЛицо
ИЗ
    (ВЫБРАТЬ
        НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК Период
    ИЗ
        РегистрНакопления.Продажи.Обороты(&Нач, &Кон, Регистратор, ) КАК ПродажиОбороты
    
    СГРУППИРОВАТЬ ПО
        НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)) КАК ВложенныйЗапрос1
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПродажиОбороты.Контрагент КАК Контрагент,
            МИНИМУМ(НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)) КАК Период,
            ПродажиОбороты.Контрагент.ЮрФизЛицо КАК КонтрагентЮрФизЛицо
        ИЗ
            РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты
        
        СГРУППИРОВАТЬ ПО
            ПродажиОбороты.Контрагент,
            ПродажиОбороты.Контрагент.ЮрФизЛицо) КАК ВложенныйЗапрос
        ПО (ВложенныйЗапрос.Период = ВложенныйЗапрос1.Период)

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос1.Период,
    ВложенныйЗапрос.КонтрагентЮрФизЛицо

УПОРЯДОЧИТЬ ПО
    Период
15 Shmidt
 
15.07.14
15:56
(13) Если интересно, то вот так: (14)  точно начал корректную выборку делать
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой