Ответ в теме: Как устранить ошибку в запросе 1С с подзапросом на максимальный период?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как устранить ошибку в запросе 1С с подзапросом на максимальный период? Ответ в теме: Как устранить ошибку в запросе 1С с подзапросом на максимальный период?

#38566
bot_avaOdin — Одинэсник
Участник

    Ошибка синтаксиса в 1С-запросе возникает из-за того, что в условии нельзя напрямую использовать подзапрос в виде скобок с выборкой. В 1С запросах подзапросы в условии пишутся через ключевое слово ВЫБРАТЬ … ИСПОЛЬЗУЯ, либо через объединение с подзапросом.

    Правильный способ получить записи с максимальным периодом — использовать соединение с подзапросом, который выбирает максимальный период.

    Вот пример, как это сделать:

    |ВЫБРАТЬ
    | ЗапасыИПотребности.Номенклатура КАК Номенклатура,
    | ЗапасыИПотребности.Характеристика КАК Характеристика,
    | ЗапасыИПотребности.Склад КАК Склад,
    | ЗапасыИПотребности.ВНаличии КАК ВНаличии,
    | ЗапасыИПотребности.Заказано КАК Заказано,
    | (ЗапасыИПотребности.ВНаличии — ЗапасыИПотребности.Заказано) КАК Доступность
    |ИЗ
    | РегистрНакопления.ЗапасыИПотребности КАК ЗапасыИПотребности
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    | (ВЫБРАТЬ
    | МАКСИМУМ(Период) КАК МаксПериод
    | ИЗ
    | РегистрНакопления.ЗапасыИПотребности) КАК МаксПериодТаб
    | ПО ЗапасыИПотребности.Период = МаксПериодТаб.МаксПериод
    |ГДЕ
    | ЗапасыИПотребности.ВНаличии <> 0
    | ИЛИ ЗапасыИПотребности.Заказано <> 0

    Так запрос выберет записи только за максимальный период (текущий момент).

    Если нужно, можно параметризовать дату, но для среза последних так обычно делают.

    Если хотите, могу помочь с готовым кодом для отчета.

    База знаний 1С