База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить ошибку «Обнаружено дублирование ключевых значений»? › Ответ в теме: Как устранить ошибку «Обнаружено дублирование ключевых значений»?
Ошибка «Обнаружено дублирование ключевых значений в колонках» говорит о том, что в вашем динамическом списке (СписокДокументыВнутреннегоТовародвижения) в наборе данных есть повторяющиеся значения по ключевым полям, которые используются для идентификации строк.
В типовых динамических списках 1С для корректного отображения данных обязательно должны быть уникальные ключи (обычно это поля: Ссылка, ИдентификаторЗаписи, ТипСсылки и т.п.).
—
Причина ошибки:
В вашем запросе (или в структуре данных, которую вы передаете в динамический список) отсутствует уникальный ключ или он дублируется.
—
Как исправить:
1. Проверьте запрос, который формирует данные для списка.
В запросе должны быть все ключевые поля, которые используются в динамическом списке, и они должны однозначно идентифицировать каждую строку.
2. Добавьте в запрос уникальный идентификатор строки.
Обычно это поле РеестрДокументов.Ссылка или РеестрДокументов.ИдентификаторЗаписи. Если этих полей нет, добавьте.
3. Если в запросе есть объединения (JOIN), которые приводят к дублированию строк, то нужно либо:
— Уточнить условия соединения, чтобы не было дублирования.
— Использовать агрегатные функции или группировку, чтобы убрать дубли.
— Добавить в выборку уникальный ключ, который учитывает все поля.
4. Проверьте структуру свойств динамического списка.
В СвойстваСписка должен быть корректно установлен ключевой реквизит (обычно КлючевыеПоля), например:
|
1 |
СвойстваСписка.КлючевыеПоля = "Ссылка"; |
Если ключевых полей несколько, перечислите их через запятую.
—
Пример:
Если у вас в запросе есть:
|ВЫБРАТЬ
| РеестрДокументов.Ссылка КАК Ссылка,
| РеестрДокументов.ТипСсылки,
| РеестрДокументов.ХозяйственнаяОперация,
| …
| СостоянияРаспоряжений.Состояние КАК СостояниеWMS
|ИЗ
| РегистрСведений.РеестрДокументов КАК РеестрДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.AWMSBasis_СостоянияРаспоряжений КАК СостоянияРаспоряжений
| ПО РеестрДокументов.Ссылка = СостоянияРаспоряжений.Документ
|ГДЕ
| РеестрДокументов.ДатаДокументаИБ МЕЖДУ &НачалоПериода И &КонецПериода
То в коде после заполнения свойств динамического списка добавьте:
|
1 |
СвойстваСписка.КлючевыеПоля = "Ссылка"; |
—
Если ключевых полей несколько:
|
1 |
СвойстваСписка.КлючевыеПоля = "ТипСсылки, ХозяйственнаяОперация, ДатаДокументаИБ, ИдентификаторЗаписи, Организация, Партнер, МестоХранения, Контрагент, Подразделение, Ссылка, РазделительЗаписи"; |
Но обычно достаточно одного уникального поля — Ссылка.
—
Итог:
В процедуре AWMSBasis_ПриСозданииНаСервереПосле после заполнения СвойстваСписка добавьте:
|
1 |
СвойстваСписка.КлючевыеПоля = "Ссылка"; |
И убедитесь, что в запросе поле Ссылка присутствует и уникально.
—
Если дублирование сохраняется, значит в запросе есть несколько строк с одинаковым значением Ссылка. Тогда нужно исправлять запрос, чтобы убрать дубли.
—
Рекомендую посмотреть пример настройки динамического списка с ключевыми полями здесь:
https://infostart.ru/public/2047764/ (пример работы с динамическими списками и ключевыми полями)