Как устранить ошибку «Обнаружено дублирование ключевых значений»?

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

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

        ошибка Процедура AWMSBasis_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
        СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
        ЗаполнитьЗначенияСвойств(СвойстваСписка, СписокДокументыВнутреннегоТовародвижения);
        СвойстваСписка.ТекстЗапроса = AWMSBasis_ТекстЗапросаСписок();
        ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокДокументыВнутреннегоТовародвижения, СвойстваСписка);

        Элемент = Элементы.Добавить(«СостояниеWMS», Тип(«ПолеФормы»), Элементы.СписокДокументыВнутреннегоТовародвижения);
        Элемент.ПутьКДанным = «СписокДокументыВнутреннегоТовародвижения.СостояниеWMS»;
        Элемент.Заголовок = «Статус WMS»;
        КонецПроцедуры Обнаружено дублирование ключевых значений в колонках: «ТипСсылки», «ХозяйственнаяОперация», «ДатаДокументаИБ», «ИдентификаторЗаписи», «Организация», «Партнер», «МестоХранения», «Контрагент», «Подразделение», «Ссылка», «РазделительЗаписи».
        Отображение данных в списке невозможно.

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

          Ошибка «Обнаружено дублирование ключевых значений в колонках» говорит о том, что в вашем динамическом списке (СписокДокументыВнутреннегоТовародвижения) в наборе данных есть повторяющиеся значения по ключевым полям, которые используются для идентификации строк.

          В типовых динамических списках 1С для корректного отображения данных обязательно должны быть уникальные ключи (обычно это поля: Ссылка, ИдентификаторЗаписи, ТипСсылки и т.п.).

          Причина ошибки:

          В вашем запросе (или в структуре данных, которую вы передаете в динамический список) отсутствует уникальный ключ или он дублируется.

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

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

          2. Добавьте в запрос уникальный идентификатор строки.
          Обычно это поле РеестрДокументов.Ссылка или РеестрДокументов.ИдентификаторЗаписи. Если этих полей нет, добавьте.

          3. Если в запросе есть объединения (JOIN), которые приводят к дублированию строк, то нужно либо:
          — Уточнить условия соединения, чтобы не было дублирования.
          — Использовать агрегатные функции или группировку, чтобы убрать дубли.
          — Добавить в выборку уникальный ключ, который учитывает все поля.

          4. Проверьте структуру свойств динамического списка.
          В СвойстваСписка должен быть корректно установлен ключевой реквизит (обычно КлючевыеПоля), например:

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

          Пример:

          Если у вас в запросе есть:

          |ВЫБРАТЬ
          | РеестрДокументов.Ссылка КАК Ссылка,
          | РеестрДокументов.ТипСсылки,
          | РеестрДокументов.ХозяйственнаяОперация,
          | …
          | СостоянияРаспоряжений.Состояние КАК СостояниеWMS
          |ИЗ
          | РегистрСведений.РеестрДокументов КАК РеестрДокументов
          | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.AWMSBasis_СостоянияРаспоряжений КАК СостоянияРаспоряжений
          | ПО РеестрДокументов.Ссылка = СостоянияРаспоряжений.Документ
          |ГДЕ
          | РеестрДокументов.ДатаДокументаИБ МЕЖДУ &НачалоПериода И &КонецПериода

          То в коде после заполнения свойств динамического списка добавьте:

          Если ключевых полей несколько:

          Но обычно достаточно одного уникального поля — Ссылка.

          Итог:

          В процедуре AWMSBasis_ПриСозданииНаСервереПосле после заполнения СвойстваСписка добавьте:

          И убедитесь, что в запросе поле Ссылка присутствует и уникально.

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

          Рекомендую посмотреть пример настройки динамического списка с ключевыми полями здесь:
          https://infostart.ru/public/2047764/ (пример работы с динамическими списками и ключевыми полями)

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