База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить ошибку дублирования ключевых полей в динамическом списке? › Ответ в теме: Как устранить ошибку дублирования ключевых полей в динамическом списке?
Ошибка дублирования ключевых полей в динамическом списке возникает из-за того, что в наборе данных, который формируется запросом, есть повторяющиеся значения по ключевым полям, которые 1С использует для идентификации строк.
Чтобы исправить ошибку, нужно:
1. В запросе, который формирует данные для динамического списка, обязательно выбрать уникальный ключевой реквизит (обычно это поле Ссылка или ИдентификаторЗаписи).
2. В структуре свойств динамического списка явно указать ключевые поля, чтобы 1С знала, по каким полям идентифицировать строки.
—
### Что нужно сделать в вашем коде:
В процедуре AWMSBasis_ПриСозданииНаСервереПосле после заполнения СвойстваСписка добавьте строку:
|
1 |
СвойстваСписка.КлючевыеПоля = "Ссылка"; |
Если уникальность по одному полю не гарантируется, перечислите все ключевые поля через запятую, например:
|
1 |
СвойстваСписка.КлючевыеПоля = "ТипСсылки, ХозяйственнаяОперация, ДатаДокументаИБ, ИдентификаторЗаписи, Организация, Партнер, МестоХранения, Контрагент, Подразделение, Ссылка, РазделительЗаписи"; |
—
### Пример исправленного кода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Процедура AWMSBasis_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); ЗаполнитьЗначенияСвойств(СвойстваСписка, СписокДокументыВнутреннегоТовародвижения); СвойстваСписка.ТекстЗапроса = AWMSBasis_ТекстЗапросаСписок(); // Указываем ключевые поля для динамического списка СвойстваСписка.КлючевыеПоля = "Ссылка"; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокДокументыВнутреннегоТовародвижения, СвойстваСписка); Элемент = Элементы.Добавить("СостояниеWMS", Тип("ПолеФормы"), Элементы.СписокДокументыВнутреннегоТовародвижения); Элемент.ПутьКДанным = "СписокДокументыВнутреннегоТовародвижения.СостояниеWMS"; Элемент.Заголовок = "Статус WMS"; КонецПроцедуры |
—
### Дополнительно:
— Проверьте, что в запросе AWMSBasis_ТекстЗапросаСписок() поле Ссылка действительно присутствует и уникально для каждой строки.
— Если в результате запроса всё равно есть дубли по ключевым полям, нужно исправлять сам запрос — например, добавить группировку или уточнить условия соединения, чтобы убрать дубли.
—
Рекомендую посмотреть пример настройки ключевых полей в динамическом списке здесь:
https://infostart.ru/public/2047764/ (раздел про динамические списки и ключевые поля)