Имя: Пароль:
1C
1С v8
нумерация в запросе по одинаковым датам
0 aleee-eeex
 
09.07.16
21:20
Есть таблица вида:

Период / Подразделение / Сумма / НомерЗаписи

Надо сделать нумерацию, когда Период одинаков. Если Период меняется, то нумерация начинается с начала. За одну дату Подразделение и Сумма могут быть одинаковыми, но НомерЗаписи всегда везде разный и порядок в нем не соблюдается.

Например:
МойНомер /Период/ Подразделение / Сумма / НомерЗаписи
1/ 01.01.2016/ Подразделение1 / 1500 / 8
2/ 01.01.2016/ Подразделение1 / 1500 / 7
3/ 01.01.2016/ Подразделение2 / 1500 / 15

1/ 01.02.2016/ Подразделение1 / 2500 / 10

1/ 01.03.2016/ Подразделение2 / 1500 / 30
2/ 01.03.2016/ Подразделение1 / 5000 / 9

1/ 01.04.2016/ Подразделение1 / 1500 / 14

Пробовал так:
ВЫБРАТЬ

рс.НомерЗаписи,
рс.Период,
ВЫБОР КОГДА КОЛИЧЕСТВО(вт.Период) ЕСТЬ NULL Тогда
0 иначе КОЛИЧЕСТВО(вт.Период) конец как МойНомер ,
рс.Подразделение,
рс.Сумма

из
ВТ_расходы как рс
левое  соединение ВТ_расходы как вт
по рс.Период  >= вт.Период


СГРУППИРОВАТЬ ПО
рс.Период,
рс.Подразделение,
рс.Сумма,
рс.НомерЗаписи

упорядочить по рс.Период


Но, результат выглядит так(номерация не правильная)
МойНомер /Период/ Подразделение / Сумма / НомерЗаписи
3/ 01.01.2016/ Подразделение1 / 1500 / 8
3/ 01.01.2016/ Подразделение1 / 1500 / 7
3/ 01.01.2016/ Подразделение2 / 1500 / 15

4/ 01.02.2016/ Подразделение1 / 2500 / 10

6/ 01.03.2016/ Подразделение2 / 1500 / 30
6/ 01.03.2016/ Подразделение1 / 5000 / 9

7/ 01.04.2016/ Подразделение1 / 1500 / 14

Понятно, что связал не правильно. Помогите исправить, пожалуйста.
1 Garykom
 
гуру
09.07.16
21:31
А понимаем что "нумерация в запросе" может на большой выборке данных "положить сервак"?

Не проще кодом в ТЗ или хотя бы в СКД?
2 aleee-eeex
 
09.07.16
21:42
(1) Да, Вы правы. СКД имеет стандартные средства для этого и так было бы конечно проще. Но это задание от преподавателя, сказано сделать именно запросом.
Хотелось бы знать хотя бы идеи "КАК" сделать((
3 mkalimulin
 
09.07.16
22:14
(2) Соединить таблицу с самой собой.
4 kosts
 
09.07.16
22:21
Предположение. Надо соединить с искусственной таблицей в которой нумерация от 1 до N. с условием что N меньше или равно количеству записей в группе одинаковых по периоду записей.
5 Garykom
 
гуру
09.07.16
22:23
(2) до чего ленивые студенты пошли Книга знаний: Нумерация строк в запросе
6 Garykom
 
гуру
09.07.16
22:25
(4) Как раз с группами оно само почти по (5)
7 aleee-eeex
 
09.07.16
23:29
(3) это я и сделал, спасибо.) но вопрос больше по условию соединения...
8 aleee-eeex
 
09.07.16
23:36
(4) попробовал по Вашему совету...не правильно обрабатывает когда есть дубли дат:


ВЫБРАТЬ    0 КАК Поле ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ    (Числа1.Поле+4*Числа2.Поле+16*Числа3.Поле)+1 КАК НомерСтроки

поместить ВТ_ЧислаПоПорядку
ИЗ Числа КАК Числа1, Числа КАК Числа2, Числа КАК Числа3
;
выбрать
рс.Период,
КОЛИЧЕСТВО(рс.Период) КАК  ЧислоЗаписейНаПериод
ПОМЕСТИТЬ ВТ_ЧислоЗаписейНаПериод
из
ВТ_расходы как рс

СГРУППИРОВАТЬ ПО
рс.период
;
ВЫБРАТЬ
рс.Период,
вт.ЧислоЗаписейНаПериод,
рс.Подразделение ,
рс.СуммаРасход
ПОМЕСТИТЬ ВТ_РасхПоКоличеству
из
ВТ_расходы как рс
левое соединение ВТ_ЧислоЗаписейНаПериод как вт
по рс.Период = вт.Период
;
ВЫБРАТЬ
рс.Период,
рс.Подразделение ,
рс.СуммаРасход,
вт.НомерСтроки


из
ВТ_РасхПоКоличеству как рс
левое соединение ВТ_ЧислаПоПорядку как вт
по  вт.НомерСтроки <= рс.ЧислоЗаписейНаПериод

упорядочить по рс.Период

_______________________
в итоге получается:

МойНомер /Период/ Подразделение / Сумма / НомерЗаписи

1/ 01.01.2016/ Подразделение1 / 1500 / 8
2/ 01.01.2016/ Подразделение1 / 1500 / 8
3/ 01.01.2016/ Подразделение1 / 1500 / 8
1/ 01.01.2016/ Подразделение1 / 1500 / 7
2/ 01.01.2016/ Подразделение1 / 1500 / 7
3/ 01.01.2016/ Подразделение1 / 1500 / 7
1/ 01.01.2016/ Подразделение1 / 1500 / 15
2/ 01.01.2016/ Подразделение2 / 1500 / 15
3/ 01.01.2016/ Подразделение2 / 1500 / 15

1/ 01.02.2016/ Подразделение1 / 2500 / 10

1/ 01.03.2016/ Подразделение2 / 1500 / 30
2/ 01.03.2016/ Подразделение2 / 1500 / 30
1/ 01.03.2016/ Подразделение2 / 5000 / 9
2/ 01.03.2016/ Подразделение1 / 5000 / 9

1/ 01.04.2016/ Подразделение1 / 1500 / 14
________________
9 Garykom
 
гуру
09.07.16
23:36
Блин читать то умеем?

Аналогичную технику можно применить, если нужно задавать нумерацию строк с учетом группировки по какому-то полю.
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    Номенклатура.Родитель КАК Родитель,
    КОЛИЧЕСТВО(Номенклатура_1.Ссылка) КАК Номер
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура_1
        ПО Номенклатура.Наименование >= Номенклатура_1.Наименование
            И Номенклатура.Родитель = Номенклатура_1.Родитель

СГРУППИРОВАТЬ ПО
    Номенклатура.Родитель,
    Номенклатура.Ссылка
запрос с номерами строк в рамках группировки
10 aleee-eeex
 
09.07.16
23:58
(9) Большое спасибо, оказывается как раз условия равенства по родителю и не хватало)