Имя: Пароль:
1C
1С v8
Как бы в запросе получить разницу между периодами?
,
0 Капюшон
 
08.06.12
11:37
Есть запрос, который выдает выборку периодов месяца, в которые велись продажи тоесть в нём будут записи
01.01.12
01.02.12
01.05.12

тоесть только те периоды, в которые были продажи. как мне запросом получить следующую таблицу, чтобы первое поле было периодом, а второе поле было числом, показывающим количество месяцев между текущим периодом и следующим в который была продажа?
для данного примера вот такую:
01.01.12 - 1
01.02.12 - 3
01.05.12 -
1 Buster007
 
08.06.12
11:46
Т1, Т2 - таблица продаж с периодами
Берешь к Т1 присоединяешь Т2 с условием Т1.Период < Т2.Период
Группируешь, выбираешь минимум Т2.Период
Далее РазностьДат(Т1.Период, здесь будет след. дата, День)
и всего делов-то
2 Капюшон
 
08.06.12
12:36
(1)благодарю. я сделал. Но вот разность дат не работает

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Т4.Контрагент,
   Т4.НоменклатураНоменклатурнаяГруппа,
   Т4.КоличествоОборот,
   Т4.Период1 Как Период1,
   Т4.Период2 Как Период2,
   РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ)
ИЗ
   Т4 КАК Т4

Выдаётся ошибка. в чем может быть дело?
3 ZanderZ
 
08.06.12
12:38
(2) ошибку то какую ?
4 Капюшон
 
08.06.12
12:42
(3){Форма.Форма(778)}: Ошибка при вызове метода контекста (Выполнить): {(7, 22)}: Неверные параметры "РАЗНОСТЬДАТ"
РАЗНОСТЬДАТ(Период1,<<?>>Период2,МЕСЯЦ)
5 Капюшон
 
08.06.12
12:43
{Форма.Форма(778)}: Ошибка при вызове метода контекста (Выполнить): {(7, 25)}: Неверные параметры "РАЗНОСТЬДАТ"
РАЗНОСТЬДАТ(Т4.Период1,<<?>>Т4.Период2,МЕСЯЦ)
6 Maxus43
 
08.06.12
12:45
там тип дата точно? без строки РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ)
всё номрально выводит?
7 Капюшон
 
08.06.12
12:47
(6)да. без этой строки всё нормально. А Периоды имеют тип "период". вот весь пакет запросов:

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

СГРУППИРОВАТЬ ПО
   ПродажиОбороты.Контрагент,
   ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
   ПродажиОбороты.Период
;

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

СГРУППИРОВАТЬ ПО
   ПродажиОбороты.Контрагент,
   ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
   ПродажиОбороты.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Т1.Контрагент,
   Т1.НоменклатураНоменклатурнаяГруппа,
   Т1.Период,
   Т1.КоличествоОборот,
   Т2.Период КАК Период1
ПОМЕСТИТЬ Т3
ИЗ
   Т1 КАК Т1
       ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК Т2
       ПО Т1.Период < Т2.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Т3.Контрагент,
   Т3.НоменклатураНоменклатурнаяГруппа,
   Т3.КоличествоОборот,
   Т3.Период КАК Период1,
   ЕСТЬNULL(МИНИМУМ(Т3.Период1), 0) КАК Период2
ПОМЕСТИТЬ Т4
ИЗ
   Т3 КАК Т3

СГРУППИРОВАТЬ ПО
   Т3.Контрагент,
   Т3.НоменклатураНоменклатурнаяГруппа,
   Т3.КоличествоОборот,
   Т3.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Т4.Контрагент,
   Т4.НоменклатураНоменклатурнаяГруппа,
   Т4.КоличествоОборот,
   Т4.Период1 Как Период1,
   Т4.Период2 Как Период2,
   РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ)
ИЗ
   Т4 КАК Т4
8 salvator
 
08.06.12
12:48
(6) +1 Тип скорее всего не дата
9 Zmich
 
08.06.12
12:48
(5). ВЫБОР
      КОГДА Т4.Период2 ЕСТЬ NULL ТОГДА 0
      ИНАЧЕ РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ)
    КОНЕЦ
10 Капюшон
 
08.06.12
12:50
Похоже РАЗНОСТЬДАТ может принимать только внешние параметры. потому что
строчка РАЗНОСТЬДАТ(ВыбНачПериода&,ВыбКонПериода&,МЕСЯЦ) работает.
11 ZanderZ
 
08.06.12
12:51
(10) это ты нагло врешь - проверяй на null как в (9)
12 luckyluke
 
08.06.12
12:51
(10)
>>Похоже РАЗНОСТЬДАТ может принимать только внешние параметры. потому что
Не только внешние, проверяй типы в таблицах.
13 Zmich
 
08.06.12
12:55
(10). У последней продажи нет следующего периода, поэтому Т4.Период2 будет NULL.
Хотя смотря как ты Т4 формируешь.
14 Капюшон
 
08.06.12
12:56
спасибо всем! всё дело было в NULL
15 эцп
 
08.06.12
12:58
(7) стоит записать не так:

|ЕСТЬNULL(МИНИМУМ(Т3.Период1), 0) КАК Период2

а вот так:

|МИНИМУМ(ЕСТЬNULL(Т3.Период1, ДОБАВИТЬКДАТЕ(&ВыбКонПериода, СЕКУНДА, 1))) КАК Период2
16 эцп
 
08.06.12
13:00
(7) а запросы, формирующие Т3 и Т4, объединить в один
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший