База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибки в запросе 1С при получении статусов по обращениям?
- В этой теме 1 ответ, 2 участника, последнее обновление 17 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
5 ноября 2025 в 23:15 #34074
OdineskiУчастникгде ошибка в запросе? ВЫБРАТЬ
ПоследнийСтатус.Обращение.Дата КАК Дата,
ПоследнийСтатус.Обращение.Категория КАК Категория,
ПоследнийСтатус.Обращение.Инициатор КАК Инициатор,
ПоследнийСтатус.Обращение.ЕстьВложение КАК ЕстьВложение,
ПоследнийСтатус.Обращение.Ссылка КАК Ссылка,
ПоследнийСтатус.Статус КАК Статус
ИЗ
Документ.ик_ОбращениеВПоддержку КАК Документ
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Обращение КАК Обращение,
ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Статус КАК Статус,
МАКСИМУМ(ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Дата) КАК МаксимальнаяДата
ИЗ
РегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержку.СрезПоследних(&НаДату, ) КАК ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследнихСГРУППИРОВАТЬ ПО
ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Обращение,
ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Статус) КАК ПоследнийСтатус
ПО (ПоследнийСтатус.Обращение = Документ.Ссылка)
И (Документ.Дата =
(ВЫБРАТЬ
МАКСИМУМ(ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Дата) КАК Дата
ИЗ
РегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержку.СрезПоследних(&НаДату, ) КАК ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних)) -
5 ноября 2025 в 23:15 #34075
Odin — ОдинэсникУчастникОшибка в запросе связана с некорректным использованием полей и синтаксисом в части выборки и соединения:
1. В списке выбираемых полей вы пишете
ПоследнийСтатус.Обращение.Дата,ПоследнийСтатус.Обращение.Категорияи т.п. — но в подзапросеПоследнийСтатусвы выбираете только поляОбращение,СтатусиМаксимальнаяДата. ПоляДата,Категория,Инициатор,ЕстьВложение,Ссылкане выбираются и не доступны через псевдонимПоследнийСтатус.Обращение.2. В подзапросе вы группируете по
ОбращениеиСтатус, при этом берёте максимум по дате, но не связываете дату с конкретным статусом — это может привести к неверной логике.3. В условии соединения вы используете
ПО (ПоследнийСтатус.Обращение = Документ.Ссылка) И (Документ.Дата = (ВЫБРАТЬ МАКСИМУМ(…)))— это условие соединения с подзапросом, но оно не связано с подзапросомПоследнийСтатус, а просто сравнивает дату документа с максимальной датой по всему регистру, что не корректно.4. В подзапросе
СрезПоследних(&НаДату, )второй параметр пустой — это синтаксическая ошибка, нужно либо убрать запятую, либо указать параметр.—
**Как исправить:**
— Чтобы получить последние статусы по обращениям, нужно сначала получить максимальную дату по каждому обращению, затем соединить с регистром по обращению и дате, чтобы получить актуальный статус.
— Для получения полей из документа (например,
Категория,Инициатори т.п.) нужно обращаться к таблицеДокумент, а не к псевдонимуПоследнийСтатус.Обращение.— Пример исправленного запроса (упрощённый):
1С (Код)123456789101112131415161718192021222324252627282930313233ВЫБРАТЬДокумент.Дата КАК Дата,Документ.Категория КАК Категория,Документ.Инициатор КАК Инициатор,Документ.ЕстьВложение КАК ЕстьВложение,Документ.Ссылка КАК Ссылка,ПоследнийСтатус.Статус КАК СтатусИЗДокумент.ик_ОбращениеВПоддержку КАК ДокументЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬСОБСТВЕННОЕ.Обращение,СОБСТВЕННОЕ.Статус,СОБСТВЕННОЕ.ДатаИЗРегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержку КАК СОБСТВЕННОЕВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬОбращение,МАКСИМУМ(Дата) КАК МаксимальнаяДатаИЗРегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержкуГДЕДата <= &НаДатуСГРУППИРОВАТЬ ПООбращение) КАК МаксДатаПО СОБСТВЕННОЕ.Обращение = МаксДата.ОбращениеИ СОБСТВЕННОЕ.Дата = МаксДата.МаксимальнаяДата) КАК ПоследнийСтатусПО ПоследнийСтатус.Обращение = Документ.СсылкаГДЕДокумент.Дата <= &НаДату— Здесь мы сначала находим для каждого обращения максимальную дату статуса, затем соединяем с регистром, чтобы получить статус на эту дату, и соединяем с документом по ссылке.
— В выборке берем поля из документа и статус из подзапроса.
— Уберите лишние запятые в вызове
СрезПоследнихили используйте обычный регистр с фильтрацией по дате.—
**Итог:**
Ошибка — попытка обратиться к полям документа через псевдоним подзапроса, который их не содержит, а также синтаксическая ошибка с лишней запятой вСрезПоследних(&НаДату, ). Нужно разделить получение данных документа и получение статуса, корректно связать подзапросы и убрать лишние параметры.Рекомендую посмотреть здесь: https://infostart.ru/public/527518/ (раздел про СрезПоследних и оптимизацию запросов)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.