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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34074
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      где ошибка в запросе? ВЫБРАТЬ
      ПоследнийСтатус.Обращение.Дата КАК Дата,
      ПоследнийСтатус.Обращение.Категория КАК Категория,
      ПоследнийСтатус.Обращение.Инициатор КАК Инициатор,
      ПоследнийСтатус.Обращение.ЕстьВложение КАК ЕстьВложение,
      ПоследнийСтатус.Обращение.Ссылка КАК Ссылка,
      ПоследнийСтатус.Статус КАК Статус
      ИЗ
      Документ.ик_ОбращениеВПоддержку КАК Документ
      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
      ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Обращение КАК Обращение,
      ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Статус КАК Статус,
      МАКСИМУМ(ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Дата) КАК МаксимальнаяДата
      ИЗ
      РегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержку.СрезПоследних(&НаДату, ) КАК ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних

      СГРУППИРОВАТЬ ПО
      ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Обращение,
      ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Статус) КАК ПоследнийСтатус
      ПО (ПоследнийСтатус.Обращение = Документ.Ссылка)
      И (Документ.Дата =
      (ВЫБРАТЬ
      МАКСИМУМ(ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних.Дата) КАК Дата
      ИЗ
      РегистрСведений.ик_СостояниеОбработкиОбращенийВПоддержку.СрезПоследних(&НаДату, ) КАК ик_СостояниеОбработкиОбращенийВПоддержкуСрезПоследних))

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

      Ошибка в запросе связана с некорректным использованием полей и синтаксисом в части выборки и соединения:

      1. В списке выбираемых полей вы пишете ПоследнийСтатус.Обращение.Дата, ПоследнийСтатус.Обращение.Категория и т.п. — но в подзапросе ПоследнийСтатус вы выбираете только поля Обращение, Статус и МаксимальнаяДата. Поля Дата, Категория, Инициатор, ЕстьВложение, Ссылка не выбираются и не доступны через псевдоним ПоследнийСтатус.Обращение.

      2. В подзапросе вы группируете по Обращение и Статус, при этом берёте максимум по дате, но не связываете дату с конкретным статусом — это может привести к неверной логике.

      3. В условии соединения вы используете ПО (ПоследнийСтатус.Обращение = Документ.Ссылка) И (Документ.Дата = (ВЫБРАТЬ МАКСИМУМ(…))) — это условие соединения с подзапросом, но оно не связано с подзапросом ПоследнийСтатус, а просто сравнивает дату документа с максимальной датой по всему регистру, что не корректно.

      4. В подзапросе СрезПоследних(&НаДату, ) второй параметр пустой — это синтаксическая ошибка, нужно либо убрать запятую, либо указать параметр.

      **Как исправить:**

      — Чтобы получить последние статусы по обращениям, нужно сначала получить максимальную дату по каждому обращению, затем соединить с регистром по обращению и дате, чтобы получить актуальный статус.

      — Для получения полей из документа (например, Категория, Инициатор и т.п.) нужно обращаться к таблице Документ, а не к псевдониму ПоследнийСтатус.Обращение.

      — Пример исправленного запроса (упрощённый):

      — Здесь мы сначала находим для каждого обращения максимальную дату статуса, затем соединяем с регистром, чтобы получить статус на эту дату, и соединяем с документом по ссылке.

      — В выборке берем поля из документа и статус из подзапроса.

      — Уберите лишние запятые в вызове СрезПоследних или используйте обычный регистр с фильтрацией по дате.

      **Итог:**
      Ошибка — попытка обратиться к полям документа через псевдоним подзапроса, который их не содержит, а также синтаксическая ошибка с лишней запятой в СрезПоследних(&НаДату, ). Нужно разделить получение данных документа и получение статуса, корректно связать подзапросы и убрать лишние параметры.

      Рекомендую посмотреть здесь: https://infostart.ru/public/527518/ (раздел про СрезПоследних и оптимизацию запросов)

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.