База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить ошибку в запросе 1С с подзапросом на максимальный период? › Ответ в теме: Как устранить ошибку в запросе 1С с подзапросом на максимальный период?
Ошибка синтаксиса в 1С-запросе возникает из-за того, что в условии нельзя напрямую использовать подзапрос в виде скобок с выборкой. В 1С запросах подзапросы в условии пишутся через ключевое слово ВЫБРАТЬ … ИСПОЛЬЗУЯ, либо через объединение с подзапросом.
Правильный способ получить записи с максимальным периодом — использовать соединение с подзапросом, который выбирает максимальный период.
Вот пример, как это сделать:
|ВЫБРАТЬ
| ЗапасыИПотребности.Номенклатура КАК Номенклатура,
| ЗапасыИПотребности.Характеристика КАК Характеристика,
| ЗапасыИПотребности.Склад КАК Склад,
| ЗапасыИПотребности.ВНаличии КАК ВНаличии,
| ЗапасыИПотребности.Заказано КАК Заказано,
| (ЗапасыИПотребности.ВНаличии — ЗапасыИПотребности.Заказано) КАК Доступность
|ИЗ
| РегистрНакопления.ЗапасыИПотребности КАК ЗапасыИПотребности
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| МАКСИМУМ(Период) КАК МаксПериод
| ИЗ
| РегистрНакопления.ЗапасыИПотребности) КАК МаксПериодТаб
| ПО ЗапасыИПотребности.Период = МаксПериодТаб.МаксПериод
|ГДЕ
| ЗапасыИПотребности.ВНаличии <> 0
| ИЛИ ЗапасыИПотребности.Заказано <> 0
—
Так запрос выберет записи только за максимальный период (текущий момент).
—
Если нужно, можно параметризовать дату, но для среза последних так обычно делают.
—
Если хотите, могу помочь с готовым кодом для отчета.