Имя: Пароль:
1C
1С v8
Запрос Левое соединение
0 KonstantinK90
 
06.09.16
06:57
Всем привет помогите разобраться с запросом! мне нужно запросом. Задача такая: Необходимо разработать отчет по ежемесячному приросту новых торговых точек(Контрагентов), купивших продукцию Супротек.
Торговая точка считается новой с даты первой отгрузки. делаю вот так чет е получается
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВложВзаиморасчеты.Регистратор КАК Регистратор,
    ВложВзаиморасчеты.Контрагент КАК Контрагент,
    СупротекНоменклатура.Номенклатура
ИЗ
    (ВЫБРАТЬ
        ПродажиОбороты.Регистратор.Ссылка КАК РегистраторСсылка,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.Контрагент КАК Контрагент
    ИЗ
        РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
    ГДЕ
        ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг) КАК СупротекНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК Регистратор,
            ВзаиморасчетыСКонтрагентамиОбороты.Контрагент КАК Контрагент
        ИЗ
            РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(, &НачалоПериода, Регистратор, ) КАК ВзаиморасчетыСКонтрагентамиОбороты) КАК ВложВзаиморасчеты
        ПО СупротекНоменклатура.РегистраторСсылка = ВложВзаиморасчеты.Регистратор
            И СупротекНоменклатура.Контрагент = ВложВзаиморасчеты.Контрагент

УПОРЯДОЧИТЬ ПО
    Контрагент
1 KonstantinK90
 
06.09.16
06:59
Как правильно проверить у нас есть некий период как узнать были ли продажи до этого периода если нет тогда считаем контрагента новым
2 Jonny_Khomich
 
06.09.16
07:12
сделай реквизит или свойство у контрагента, дата первой покупки, заполняй его при проведении документа и ориентируйся на него. на прошлой работе так было
3 KonstantinK90
 
06.09.16
07:15
на будущее как вармант а сейчас как быть?
4 AlexToo
 
06.09.16
07:15
(1) я б наверно, заморочился и выбрал бы сначала из регистра продаж контрагентов и период регистрации, с группировкой по контрагенту, что бы по каждому было видно когда была первая покупка, а потом обходя этот результат проверял, попадет ли дата первой покупки в заданный период или нет.
5 KonstantinK90
 
06.09.16
07:18
ну вот выбрал я продажи по конкретной номенклатуре
ВЫБРАТЬ РАЗЛИЧНЫЕ
    СупротекНоменклатура.РегистраторСсылка,
    СупротекНоменклатура.Контрагент
ИЗ
    (ВЫБРАТЬ
        ПродажиОбороты.Регистратор.Ссылка КАК РегистраторСсылка,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.Контрагент КАК Контрагент
    ИЗ
        РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
    ГДЕ
        ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг) КАК СупротекНоменклатура
6 KonstantinK90
 
06.09.16
07:19
а как проверить запросом есть ли продажи по этим контрагентам
7 KonstantinK90
 
06.09.16
07:20
за предыдущие периоды
8 AlexToo
 
06.09.16
07:26
(7) ты на СКД всё это делаешь одним запросом хочешь всё сделать?
9 KonstantinK90
 
06.09.16
07:26
да
10 AlexToo
 
06.09.16
07:33
(9) попробуй вложенным запросом к своему выбрать из продаж контрагента и период с отбором по дате меньше чем начало твоего периода и потом по контрагенту соединять вложенный запрос с твоим результатом по супротеку, если во вложенном запросе есть данные значит есть продажи за предыдущий период.
11 KonstantinK90
 
06.09.16
07:43
чет не получается по смотри может я не правильно че делаю
ВЫБРАТЬ РАЗЛИЧНЫЕ
    СупротекНоменклатура.РегистраторСсылка,
    ВложенныйПредПериод.Номенклатура,
    СупротекНоменклатура.Контрагент
ИЗ
    (ВЫБРАТЬ
        ПродажиОбороты.Регистратор.Ссылка КАК РегистраторСсылка,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ПродажиОбороты.Контрагент КАК Контрагент
    ИЗ
        РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
    ГДЕ
        ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг) КАК СупротекНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПродажиОбороты.Номенклатура КАК Номенклатура,
            ПродажиОбороты.Контрагент КАК Контрагент
        ИЗ
            РегистрНакопления.Продажи.Обороты(, &НачалоПериода, Регистратор, ) КАК ПродажиОбороты
        ГДЕ
            ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг) КАК ВложенныйПредПериод
        ПО СупротекНоменклатура.Контрагент = ВложенныйПредПериод.Контрагент
12 KonstantinK90
 
06.09.16
07:45
блин уже все утро сижу ни как не получаетсмя
13 azt-yur
 
06.09.16
07:57
В запросе делай группировки по Контрагенту и ресурс Минимум(Период) и условие на ресурс между начПериод и конПериод
14 azt-yur
 
06.09.16
07:58
+ (13) и без указания периода в таблице оборотов
15 azt-yur
 
06.09.16
08:01
Хотя хрень будет если оборотов в регистре много. Будет тормозить и память жрать. Лучше как в (2) сделать по подписке на событие
16 AlexToo
 
06.09.16
08:14
(11) получается он у тебя так выберет из второй таблицы, либо записи если есть предыдущие продажи, либо Null если их нет. Поэтому надо ещё условие на проверку, что тебе нужны записи именно с Null вместо контрагента. Ещё отбора по номенклатуре че-то совсем не увидел, ты вроде говорил, по супротеку нужна.
И да если оборотов в регистре много будет притормаживать.
Можт правда сделать реквизит у контрагента, и обратоботкой проставить даты?
17 FIXXXL
 
06.09.16
08:18
(3) сейчас построить таблицу "первой покупки" по клиенту, обойти справочник и проставить дату
18 mkalimulin
 
06.09.16
08:46
(0) Список новых контрагентов за период:

ВЫБРАТЬ Контрагент
ИЗ РегистрНакопления.Продажи
СГРУППИРОВАТЬ ПО Контрагент
ИМЕЮЩИЕ МИНИМУМ(Период) между &НачалоПериода И &КонецПериода


Вам надо тренироваться.
http://catalog.mista.ru/public/533557/