Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2021, 14:33

нумерация в запросе по одинаковым датам

Автор aleeex, 09 июл 2016, 22:02

0 Пользователей и 2 гостей просматривают эту тему.

aleeex

Есть таблица вида:

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

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

Например:
МойНомер /Период/ Подразделение / Сумма / НомерЗаписи
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

Понятно, что связал не правильно. Помогите исправить, пожалуйста.

LexaK

как таковой автонумерации в 1С-ном СКЛ нет, как вариант получите таблицу значений результата, отсортированную по нужным полям (в вашем случае по периоду)
и просто, без всяких затей, в цикле пронумеруйте, вот пример

    лкРезультат = лкЗапрос.Выполнить().Выгрузить();
    лкПериод = 0;
    лкНомер = 0;
    Для каждого лкСтр Из лкРезультат Цикл

Если лкПериод <> лкСтр.Период Тогда
//произошла смена периода, сбрасываем счетчик
лкНомер = 0;
//запоминаем новый период
лкПериод = лкСтр.Период;
КонецЕсли;

//увеличиваем счетчик и нумеруем строку
лкНомер = лкНомер + 1;
лкСтр.Номер = лкНомер;

КонецЦикла;


простенько, работает быстро, и СКЛ запрос не загроможден. :)
ответ Понравился? (в смысле пригодился?)

Luzer1C

Делать нумерацию в запросе - глупая затея. Имхо. Сделать нумерацию можно, но время выполнения запроса будет расти в геометрической прогрессии от количества записей в базе.
Халамбалам.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск