Имя: Пароль:
1C
1С v8
Как правильно сделать выборку запросом?
,
0 ВотОнЯ
 
20.04.12
14:09
Есть таблица.

ПЕРИОД     | ЗНАЧЕНИЕ  | РЕГИСТРАТОР
____________________________________
01.01.2001 | Значение1 | Регистратор1
01.02.2001 | Значение1 | Регистратор2
03.02.2001 | Значение2 | Регистратор3
02.01.2001 | Значение1 | Регистратор4
05.02.2001 | Значеине2 | Регистратор5
02.01.2001 | Значение2 | Регистратор6


Из нее нужно получить "срез последних" для значений
То есть на выходе

Период     | ЗНАЧЕНИЕ  | РЕГИСТРАТОР
____________________________________
01.02.2001 | Значение1 | Регистратор2
05.02.2001 | Значеине2 | Регистратор5

Как построить запрос и группировку?
1 qeos
 
20.04.12
14:10
а как ты делаешь?
2 ВотОнЯ
 
20.04.12
14:13
(1) я пока никак не делаю, потому как не знаю как
3 ВотОнЯ
 
20.04.12
14:15
Если группировать по "Значение" с функцией "МАКСИМУМ(Период)", то что делать с "Регистратор"?

1) По нему группировать нельзя ибо группировка нужна только по "Значение", но и без функции это поле в выборке оставлять нельзя, так что же делать?
4 Жан Пердежон
 
20.04.12
14:18
открой для себя соединения таблиц
5 Нуф-Нуф
 
20.04.12
14:18
срез последних на каждую дату в запросе. иди поиском
6 ВотОнЯ
 
20.04.12
14:20
(4) или говори конкретику или анекдот расскажи.
P.S.: Соединения знаю..

(5) Не понял немного.. можно в коде пример?
7 ВотОнЯ
 
20.04.12
14:22
(5)если имеется ввиду поиском по результату выполнения запроса, то не подойдет ибо этот запрос является вложенным
8 SanGvin
 
20.04.12
14:22
(3) вот так попробуй
"ВЫБРАТЬ РАЗЛИЧНЫЕ
   МАКСИМУМ(Продажи.Период) КАК Период,
   МАКСИМУМ(Продажи.Регистратор) КАК Регистратор,
   Продажи.Номенклатура
ИЗ
   РегистрНакопления.Продажи КАК Продажи
ГДЕ
   Продажи.Период >= &Период

СГРУППИРОВАТЬ ПО
   Продажи.Номенклатура"
9 ВотОнЯ
 
20.04.12
14:22
+(7) является вложением более сложного
10 Жан Пердежон
 
20.04.12
14:23
(6) врешь, причем нагло
11 ВотОнЯ
 
20.04.12
14:24
(8)в поле регистратор будет "максимальный" регистратор именно для группировки(что логично) или для периода?
Что то мне подсказывает, что для группировки..
12 SanGvin
 
20.04.12
14:25
(11) да, точно совсем не то =\
13 ВотОнЯ
 
20.04.12
14:25
(10)
на, приятного аппетита, телепат-гадалка! =)

ВЫБРАТЬ
   Реализации.Р_Контрагент КАК Контрагент,
   Реализации.Р_ДокументДвижения КАК ДокументДвижения,
   Реализации.Р_Период КАК ДатаОстатков,
   Реализации.Р_СуммаДокумента КАК СуммаДокумента,
   ОстаткиДолга.ОД_ОстатокЗадолженности КАК ОстатокДолгаНаДатуОтчета
ИЗ
   (ВЫБРАТЬ
       Остатки.Субконто1 КАК ОД_Контрагент,
       СУММА(Остатки.СуммаОстаток) КАК ОД_ОстатокЗадолженности
   ИЗ
       РегистрБухгалтерии.Хозрасчетный.Остатки КАК Остатки
   ГДЕ
       Остатки.СуммаОстаток >= 0
   
   СГРУППИРОВАТЬ ПО
       Остатки.Субконто1) КАК ОстаткиДолга
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Реализация.Субконто1 КАК Р_Контрагент,
           Реализация.Регистратор КАК Р_ДокументДвижения,
           Реализация.Период КАК Р_Период,
           Реализация.СуммаОборот КАК Р_СуммаДокумента
       ИЗ
           РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, Движения, Счет В (&МассивСчетовРеализации), , ) КАК Реализация) КАК Реализации
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               ПоследняяРеализация.Регистратор КАК ПР_ДокументДвижения,
               МАКСИМУМ(ПоследняяРеализация.Период) КАК ПР_Период
           ИЗ
               РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, Движения, Счет В (&МассивСчетовРеализации), , ) КАК ПоследняяРеализация
           ГДЕ
               ПоследняяРеализация.СуммаНачальныйОстаток >= 0
               И ПоследняяРеализация.СуммаКонечныйОстаток < 0
           
           СГРУППИРОВАТЬ ПО
               ПоследняяРеализация.Регистратор) КАК ПоследниеРеализации
           ПО Реализации.Р_ДокументДвижения = ПоследниеРеализации.ПР_ДокументДвижения
       ПО (Реализации.Р_Контрагент = ОстаткиДолга.ОД_Контрагент)

УПОРЯДОЧИТЬ ПО
   Контрагент,
   ДатаОстатков
14 SanGvin
 
20.04.12
14:26
Вот так работает!

"ВЫБРАТЬ РАЗЛИЧНЫЕ
                 МАКСИМУМ(Продажи.Период) КАК Период,
                     МАКСИМУМ(Продажи.Регистратор) КАК Регистратор,
                     Продажи.Номенклатура
                 ИЗ
                     РегистрНакопления.Продажи КАК Продажи
                 ГДЕ
                     Продажи.Период >= &Период
                 
                 СГРУППИРОВАТЬ ПО
                     Продажи.Номенклатура
                 
                 УПОРЯДОЧИТЬ ПО
                     Период УБЫВ
15 SanGvin
 
20.04.12
14:27
(14) естессно, "ГДЕ" тут лишнее, чтобы выборку ограничить написал
16 ВотОнЯ
 
20.04.12
14:33
(15) кажись оно, спасибо, ща попробую
17 SanGvin
 
20.04.12
14:34
что касается "Максимального регистратора" - он будет максимальным для группировки и соответственно, совпадать по дате с периодом.
18 SanGvin
 
20.04.12
14:34
(16) рад помочь :)