Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:28

Нумерация в таблице значений

Автор alenadust, 04 дек 2023, 17:48

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

alenadust

Имеется заполненная таблица значений и запрос для присвоения номера в зависимости от цены.
Сейчас у меня такой запрос, его работа на 1 первом скриншоте:
 
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |   ВременнаяТаблица.Номенклатура КАК Номенклатура,
                    |   ВременнаяТаблица.Количество КАК Количество,
                    |   ВременнаяТаблица.Ранг КАК Ранг
                    |ПОМЕСТИТЬ ВТНоменклатура
                    |ИЗ
                    |   &ВременнаяТаблица КАК ВременнаяТаблица
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ ПЕРВЫЕ 10
                    |   ВТНоменклатура.Номенклатура КАК Номенклатура,
                    |   ВТНоменклатура.Количество КАК Количество,
                    |   КОЛИЧЕСТВО(ВТНоменклатура.Ранг) КАК Ранг
                    |ИЗ
                    |   ВТНоменклатура КАК ВТНоменклатура
                    |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНоменклатура КАК ВТНоменклатура1
                    |      ПО ВТНоменклатура.Количество <= ВТНоменклатура1.Количество
                    |
                    |СГРУППИРОВАТЬ ПО
                    |   ВТНоменклатура.Номенклатура,
                    |   ВТНоменклатура.Количество
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |   Количество УБЫВ";
     
    Запрос.УстановитьПараметр("ВременнаяТаблица", ТаблицаНоменклатуры);
     
    Выборка = Запрос.Выполнить().Выгрузить();
   
   ТабРеквизит.Загрузить(Выборка);

Как можно изменить запрос так, чтобы группировалась номенклатура, и при этом корректно выводился ранг?
Пробовала такой запрос, но он выводит некорректно :(

ВЫБРАТЬ
   ВременнаяТаблица.Номенклатура КАК Номенклатура,
   ВременнаяТаблица.Количество КАК Количество,
   ВременнаяТаблица.Ранг КАК Ранг
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
   &ВременнаяТаблица КАК ВременнаяТаблица
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 10
   ВТНоменклатура.Номенклатура КАК Номенклатура,
   СУММА(ВТНоменклатура.Количество) КАК Количество,
   КОЛИЧЕСТВО(ВТНоменклатура.Ранг) КАК Ранг
ИЗ
   ВТНоменклатура КАК ВТНоменклатура
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНоменклатура КАК ВТНоменклатура1
      ПО ВТНоменклатура.Количество <= ВТНоменклатура1.Количество

СГРУППИРОВАТЬ ПО
   ВТНоменклатура.Номенклатура

УПОРЯДОЧИТЬ ПО
   Количество УБЫВ
 

LexaK

alenadust, а что такое Ранг? его Тип()?
и что получается неправильно?
вроде как по вашему описанию, производится сортировка по убыванию количества, и в соответствии с этим присваивается ранг (т.е. ваша нумерация)
если помогло нажмите: Спасибо!

alenadust

LexaK, у ранга тип число, на скриншоте (который в шапке) номенклатура "тетрадь" идет как отдельная строка. необходимо чтобы они были сгруппированы. Но когда я группирую, получается вот такая ошибка) :fdbsdfbsd:
что необходимо исправить в запросе?     

LexaK

alenadust,
Цитироватьполучается вот такая ошибка
а где описание ошибки? все считается правильно, в соответствии с вашим запросом....
если помогло нажмите: Спасибо!

alenadust

LexaK, ранг теперь считается неправильно

LexaK

alenadust, если у вас версия платформы > 8.3.... и не включена совместимость со старыми версиями
тогда попробуйте такой запрос (его часть)
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 100
   ВТНоменклатура.Номенклатура КАК Номенклатура,
   СУММА(ВТНоменклатура.Количество) КАК Количество,
   //КОЛИЧЕСТВО(ВТНоменклатура.Ранг) КАК Ранг
   автономерзаписи() КАК Ранг
Поместить втРезультат   
ИЗ
   ВТНоменклатура КАК ВТНоменклатура

СГРУППИРОВАТЬ ПО
   ВТНоменклатура.Номенклатура

УПОРЯДОЧИТЬ ПО
   Количество УБЫВ
;

Выбрать * из втРезультат
Упорядочить по Ранг

если помогло нажмите: Спасибо!

alenadust

LexaK, понятно что можно сделать через автономерзаписи, но нужно именно вручную ранг посчитать :o

LexaK

alenadust, тогда как в первом варианте с подсчетом количества
(еще добавил обработку условия если несколько товаров имеют одинаковое количество, в этом случае делается доп.сортировка по Наименованию)
(проверял консоли, работает)
ВЫБРАТЬ ПЕРВЫЕ 100
   ВТНоменклатура.Номенклатура КАК Номенклатура,
   СУММА(ВТНоменклатура.Количество) КАК Количество
Поместить втРезультат   
ИЗ
   ВТНоменклатура КАК ВТНоменклатура
СГРУППИРОВАТЬ ПО
   ВТНоменклатура.Номенклатура
;
Выбрать
таб.Номенклатура,
Таб.Количество,
Количество(таб2.Номенклатура) как Ранг
из                   
втРезультат Таб
левое соединение втРезультат таб2
по таб.Количество < таб2.Количество
или //для случая когда совпадают количества у товаров
(таб.Количество = таб2.Количество
и таб.Номенклатура.Наименование > таб2.Номенклатура.Наименование )
Сгруппировать по
таб.Номенклатура,
Таб.Количество
упорядочить по
Таб.Количество убыв,
таб.Номенклатура.Наименование

если помогло нажмите: Спасибо!

alenadust

LexaK, Сделала по вашему запросу. Теперь все нормально группируется, но почему-то ранг нумерация с нуля идет...

ВЫБРАТЬ
   ВременнаяТаблица.Номенклатура КАК Номенклатура,
   ВременнаяТаблица.Количество КАК Количество
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
   &ВременнаяТаблица КАК ВременнаяТаблица
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 10
   ВТНоменклатура.Номенклатура КАК Номенклатура,
   СУММА(ВТНоменклатура.Количество) КАК Количество
ПОМЕСТИТЬ втРезультат
ИЗ
   ВТНоменклатура КАК ВТНоменклатура

СГРУППИРОВАТЬ ПО
   ВТНоменклатура.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   втРезультат.Номенклатура КАК Номенклатура,
   втРезультат.Количество КАК Количество,
   КОЛИЧЕСТВО(втРезультат1.Номенклатура) КАК Ранг
ИЗ
   втРезультат КАК втРезультат
      ЛЕВОЕ СОЕДИНЕНИЕ втРезультат КАК втРезультат1
      ПО (втРезультат.Количество < втРезультат1.Количество
            ИЛИ втРезультат.Количество = втРезультат1.Количество
               И втРезультат.Номенклатура > втРезультат1.Номенклатура)

СГРУППИРОВАТЬ ПО
   втРезультат.Номенклатура,
   втРезультат.Количество

УПОРЯДОЧИТЬ ПО
   Количество УБЫВ,
   Номенклатура

alenadust


Теги:

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

Рейтинг@Mail.ru

Поиск