Как исправить ошибку «пересечение ключей» в запросе 1С?

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38513
      Фото аватараOdineski
      Участник

        ВЫБРАТЬ
        РеализацияТоваровУслуг.Ссылка КАК Документ,
        РеализацияТоваровУслуг.Организация КАК Организация,
        РеализацияТоваровУслугТовары.СуммаСНДС КАК СуммаПродажи,
        РеализацияТоваровУслуг.Партнер КАК Клиент,
        РеализацияТоваровУслуг.Подразделение КАК Подразделение,
        РеализацияТоваровУслуг.Склад КАК Склад,
        РеализацияТоваровУслуг.Соглашение КАК Соглашение,
        РеализацияТоваровУслуг.Договор КАК Договор,
        РеализацияТоваровУслуг.Менеджер КАК Менеджер,
        0 КАК СуммаВозврата,
        МЕСЯЦ(РеализацияТоваровУслуг.Дата) КАК Период,
        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
        ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
        ГДЕ
        РеализацияТоваровУслуг.Дата >= &НачалоПериода
        И РеализацияТоваровУслуг.Дата <= &КонецПериода
        И РеализацияТоваровУслуг.Проведен

        ОБЪЕДИНИТЬ ВСЕ

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

        ОБЪЕДИНИТЬ ВСЕ

        ВЫБРАТЬ
        ВозвратТоваровОтКлиента.Ссылка,
        ВозвратТоваровОтКлиента.Организация,
        0,
        ВозвратТоваровОтКлиента.Партнер,
        ВозвратТоваровОтКлиента.Подразделение,
        ВозвратТоваровОтКлиента.Склад,
        ВозвратТоваровОтКлиента.Соглашение,
        ВозвратТоваровОтКлиента.Договор,
        ВозвратТоваровОтКлиента.Менеджер,
        ВозвратТоваровОтКлиентаТовары.СуммаСНДС,
        МЕСЯЦ(ВозвратТоваровОтКлиента.Дата),
        ВозвратТоваровОтКлиентаТовары.Номенклатура
        ИЗ
        Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиентаТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
        ПО ВозвратТоваровОтКлиентаТовары.Ссылка = ВозвратТоваровОтКлиента.Ссылка
        ГДЕ
        ВозвратТоваровОтКлиента.Дата >= &НачалоПериода
        И ВозвратТоваровОтКлиента.Дата <= &КонецПериода
        И ВозвратТоваровОтКлиента.Проведен

        ОБЪЕДИНИТЬ ВСЕ

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

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

          В вашем запросе есть несколько потенциальных причин ошибки «пересечение ключей источника и приемника»:

          1. В запросе используется объединение (ОБЪЕДИНИТЬ ВСЕ) нескольких выборок с одинаковыми именами колонок, в том числе колонок, которые могут быть ключевыми (например, Документ, Ссылка, Номенклатура и т.п.). Если в объединяемых выборках ключи не уникальны или пересекаются, то при дальнейшей агрегации или соединении может возникать ошибка.

          2. В выборках из документов РеализацияТоваровУслуг, ОтчетОРозничныхПродажах, ВозвратТоваровОтКлиента, ОтчетОРозничныхВозвратах используются ссылки на документы и табличные части, при этом в разных выборках могут попадать одинаковые ссылки, что приводит к пересечению ключей.

          3. В запросе отсутствует явное указание уникального ключа для итоговой выборки, что может приводить к конфликтам при использовании запроса в отчёте, особенно если потом вы делаете группировки или соединения по этим ключам.

          Что делать:

          — Добавьте в каждую выборку дополнительный признак источника данных, например, константу с уникальным значением, чтобы отличать записи из разных выборок. Например:

          |ВЫБРАТЬ
          | …,
          | 1 КАК Источник
          |ИЗ
          | …
          |ОБЪЕДИНИТЬ ВСЕ
          |ВЫБРАТЬ
          | …,
          | 2 КАК Источник
          |ИЗ
          | …
          |И так далее.

          — Проверьте, что в каждой выборке ключевые поля (например, Документ, Номенклатура, Период) уникальны. Если нет, добавьте дополнительные поля для уникальности (например, НомерСтроки табличной части).

          — Если в отчёте используется группировка, убедитесь, что группировка по ключам не приводит к конфликтам.

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

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

          Пример добавления признака источника:

          |ВЫБРАТЬ
          | РеализацияТоваровУслуг.Ссылка КАК Документ,
          | …,
          | 1 КАК Источник
          |ИЗ
          | …
          |ОБЪЕДИНИТЬ ВСЕ
          |ВЫБРАТЬ
          | ОтчетОРозничныхПродажах.Ссылка,
          | …,
          | 2 КАК Источник
          |ИЗ
          | …
          |…

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

          Если нужно, могу помочь адаптировать запрос с учётом этих рекомендаций.

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