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

Как игнорировать поле при группировке,

Автор Василий Пупка, 23 июл 2024, 20:45

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

Василий Пупка

У меня есть регистр сведений, в нем три измерения. Я создал таблицу в которой все данные из регистра, а так же напротив них число. Мне нужно вывести следующее: если есть строки в которых одинаковые первые два измерения, то нужно выбирать ту у которой максимальное число, а так же нужно вывести 3 измерения которое соответствует выбранной строке.

Я пытался сделать это таким запросом, однако добавление третьего измерения дублирует строки в результате.

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

СГРУППИРОВАТЬ ПО
НормДаты.Контрагент,
НормДаты.Дистрибутив

Василий Пупка

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

СГРУППИРОВАТЬ ПО
    НормДаты.Контрагент,
    НормДаты.Дистрибутив

antoneus

Цитата: Василий Пупка от 23 июл 2024, 20:45все данные из регистра, а так же напротив них число

Под "числом" имеется в виду дата? Группируйте по двум измерениям и по максимуму даты, кладите все это в ВТ, потом соединяйтесь с этим же регистром по этим двум измерениям и дате и тащите все поля какие нужно.

LexaK

Василий Пупка, логику примерно правильно расписали, попробуйте так и сделать но использую временные таблицы
и запрос понятнее получается и в консоли можно промежуточные результаты (значения временных таблиц) проверять
если помогло нажмите: Спасибо!

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

Рейтинг@Mail.ru

Поиск