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

Что не так?

Автор Sargas, 17 дек 2025, 11:22

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

Sargas

Здравствуйте!
Если сможете, помогите. Написал запрос, работает быстро получает верные данные. Но шеф говорит, что запрос неправильный. Уже голову сломал что не так.

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

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

Нужно получить количество погрузок после последней пропарки вагонов.

sali

Цитата: Sargas от 17 дек 2025, 11:22И ПропаркаВагоновСрезПоследних.ДатаПропарки <= ПогрузкаВагонов.ДатаВремяПринятияГрузаКПеревозкеМСК
для чего ты это сравниваешь? если берешь данные с регистра сведений среза последних - это уже означает, что ты берешь самые последние данные по позициям
Цитата: Sargas от 17 дек 2025, 11:22СГРУППИРОВАТЬ ПО
ПогрузкаВагонов.Вагон.НомерВагона


и что тебе дает группировка по вагонам? один вагон несколько раз чистили или что?

antoneus

Ну вообще погрузку надо бы присоединять к пропарке) И срез последних по фен-шую надо положить в ВТ.

sali

Цитата: antoneus от 17 дек 2025, 11:47по фен-шую надо положить в ВТ
вот можете объяснить почему? данные из периодических регистров либо отдельным запросом делают или набором отдельным

antoneus

Потому что 1С не рекомендует делать соединения с виртуальными таблицами, т.к. оптимизатор СУБД может выбрать неоптимальный план запроса. Виртуальные таблицы - они на то и виртуальные, что создаются на лету.

sali

Цитата: antoneus от 17 дек 2025, 12:11неоптимальный план запроса
что вы подразумеваете под этими словами? запрос выдаст неверные данные?

antoneus

Нет, может увеличиться нагрузка на сервер БД, запрос может выполняться дольше.

LexaK

Sargas,
ЦитироватьЧто не так?
Правильнееделать соединения  в запросае по Ссылкам
А если номер вагона может повторяться, т.е. быть не уникальным
то вообще будет ошибка

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

СГРУППИРОВАТЬ ПО
    ПогрузкаВагонов.Вагон
если помогло нажмите: Спасибо!

Sargas

Цитата: sali от 17 дек 2025, 11:40
Цитата: Sargas от 17 дек 2025, 11:22И ПропаркаВагоновСрезПоследних.ДатаПропарки <= ПогрузкаВагонов.ДатаВремяПринятияГрузаКПеревозкеМСК
для чего ты это сравниваешь? если берешь данные с регистра сведений среза последних - это уже означает, что ты берешь самые последние данные по позициям
Цитата: Sargas от 17 дек 2025, 11:22СГРУППИРОВАТЬ ПО
ПогрузкаВагонов.Вагон.НомерВагона


и что тебе дает группировка по вагонам? один вагон несколько раз чистили или что?

sali, группировка не по пропарке, а по погрузке вагона. Мы считаем количество погрузок после последней пропарки. А вагоны да, парятся периодически и между пропарками совершают энное количество погрузок. В моем случае взят срез последних по регистру "ПропаркаВагонов", в котором единственное измерение "Вагон".

Sargas

ВЫБРАТЬ
    ПропаркаВагоновСрезПоследних.Вагон КАК Вагон,
    ПропаркаВагоновСрезПоследних.ДатаПропарки КАК ДатаПропарки
ПОМЕСТИТЬ Пропарка
ИЗ
    РегистрСведений.ПропаркаВагонов.СрезПоследних(, Вагон.ГруппаВагонов В (&Группы)) КАК ПропаркаВагоновСрезПоследних
;

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

СГРУППИРОВАТЬ ПО
    ПогрузкаВагонов.Вагон

Так правильно?

Теги:

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

Рейтинг@Mail.ru

Поиск