Алгоритм нахождения причины ошибки "Обнаружено дублирование ключевых значений в колонках:..." в динамическом списке

19.01.22

Задачи пользователя - Корректировка данных

Доброго времени суток, коллеги. Недавно наткнулся на ошибку "Обнаружено дублирование ключевых значений в колонках: ...". Сразу не понял, как её решать. Когда гуглил, видел только частные решения. Хочу показать один из возможных способов решения проблемы. Мне он помог.

Исходная ситуация. Открываю список заказов. Вижу ошибку. Либо сразу, либо после пролистывания списка. 



Для решения, нам нужно:

  • Понять, какой запрос выполняется, для вывода данных в динамический список.
  • Найти поле, которое дублируется при выполнении запроса.
  • Найти таблицу из за которой происходит дубль. 
  • Поправить данные.  

Нужно запустить конфигурацию в режиме отладки. Далее необходимо найти форму, в которой возникает проблема.

Для этого можно использовать несколько способов. 

Можно нажать правой кнопкой мыши на заголовок формы - нажать открыть в конфигураторе - сразу откроется необходимая форма (у вас может не быть такой кнопки). 

Если её нет, можно открыть ссылку и посмотреть название объекта, с которым мы работаем и вручную найти его в конфигураторе, далее найти необходимую форму - можно по слову "список". Может быть несколько подходящих. В таком случае можно поставить точку останова на каждой.  



Далее нужно поставить точку останова в конец процедуры "ПриСозданииНаСервере". Так как текст запроса в динамическом списке может меняться программно. Мы ожидаем, что в дальнейшем текст запроса не будет меняться. 



Мы нашли текст запроса, который выполняется при заходе в динамический список. 

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


То есть дублируется заказ покупателя "Демо: Заказ покупателя 000000001 от 20.08.2009 16:01:15". 

Теперь нужно понять проблему дублирования. Возможно это левое соединение с каким-нибудь регистром. 

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



Выяснилось, что при удалении соединения с регистром сведений "аи_СломатьДинамическийСписок" данные перестали дублироваться. Видимо дело в нем. Заходим в регистр, видим, что правда есть 2 записи по нашему заказу. 


 

После удаления одной из записей - список заказов открывается. 



Пример, который я показал, я создал на конфигурации "Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 3.1 (3.1.5.180)". На платформе "1С:Предприятие 8.3 (8.3.20.1674)".

Динамический Список Ошибка Обнаружено Дублирование Ключевых Значений Колонках Ссылка

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2313    29    15    

33

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    106796    633    173    

675

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27367    79    146    

59

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22316    299    35    

71

SALE! 20%

Заполнение документа "Корректировка регистров" произвольными данными

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 1920 руб.

13.07.2015    50161    171    29    

121
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. retr0 19.01.22 09:17 Сейчас в теме
Ну че то такое себе, думал что-то интересное увидеть а тут типовые шаги описаны. В частности можно было пропустить ту часть где описывается про то, как получить текст запроса.
user712426; +1 Ответить
2. Andrei_Ivanov 159 19.01.22 10:13 Сейчас в теме
(1) Доброго времени суток. Спасибо за комментарий.
Я типовых шагов по решению такой проблемы не видел, когда искал.
Я думаю, что часть с получением текста запроса важная, так как можно получить его, допустим, взяв из динамического списка на форме, и не учесть того, что он при создании на сервере меняется.
Darkoder; zurapa; user811769; lvictor58; mrChOP93; +5 Ответить
3. retr0 19.01.22 10:40 Сейчас в теме
(2) Было бы весьма странно не учитывать вариант модификации текста запроса в дин списке. Проблема тривиальная и статьи на эту тему не требуются, очевидно, что дубли появились по причине соединения с какой-то из таблиц 99% еще ни разу не видел, что бывают дубли с таблицей без соединений. Может быть, будет полезно кому-то.
4. mrChOP93 96 20.01.22 06:21 Сейчас в теме
(3) вы не учитываете, что на сайте есть и совсем новички, такая статья им будет очень полезна.
Feelthis; user610423_domestic; Darkoder; Anatolia; zurapa; AlbinaAAA; user811769; +7 Ответить
5. пользователь 20.01.22 07:04
Сообщение было скрыто модератором.
...
6. user811769 13 22.02.22 14:52 Сейчас в теме
(5) когда-то и вы не обладали этим сакральным знанием, уважаемый retr0) Андрей, спасибо!
7. пользователь 22.02.22 14:58
Сообщение было скрыто модератором.
...
8. пользователь 17.06.22 13:07
Сообщение было скрыто модератором.
...
9. пользователь 24.06.22 16:18
Сообщение было скрыто модератором.
...
20. пользователь 14.03.24 10:46
Сообщение было скрыто модератором.
...
10. zurapa 04.01.23 11:32 Сейчас в теме
Весьма хорошая статья для новичков, весьма хорошо оформлена.
gucci76; user610423_domestic; dimaster; Darkoder; user1492823; Andrei_Ivanov; +6 Ответить
11. untru 13 17.02.23 00:43 Сейчас в теме
Вот вам еще один живой кейс, динамический список из регистра и двух левых к нему соединений тоже РС, падает ошибка, берем запрос все идеально, при открытии падает и ругается на колонки,
Как оказалось основной таблицей был РС который левым цеплялся, поменял ее и ошибка ушла
12. NicholasUzunov 03.05.23 13:34 Сейчас в теме
Спасибо, помогло. Я делал точно так же, но затупил и использовал "КОЛИЧЕСТВО(РАЗЛИЧНЫЕ <Таблица.Ссылка>))", что приводило меня к неправильному результату.
Еще имеет смысл написать "ИМЕЮЩИЕ СУММА(1) > 1", для сокращения просматриваемого списка.
N_s_s; Darkoder; Andrei_Ivanov; +3 Ответить
13. evgenjola 68 27.07.23 09:32 Сейчас в теме
Спасибо! Вроде бы ничего сложного, но когда впервые видишь такую ошибку быстро помогает понять как с ней бороться.
Darkoder; user1492823; Andrei_Ivanov; +3 Ответить
14. Darkoder 11.10.23 12:54 Сейчас в теме
Большое спасибо!!! Статья спасла! Тоже как и 12 добил условие. Вопрос быстро решился. Спасибо что подробно описали!
15. Andrei_Ivanov 159 11.10.23 13:21 Сейчас в теме
(14) Спасибо за отзыв! Видимо, надо будет в статью внести условие из 12)
16. Profenix 17 24.10.23 14:38 Сейчас в теме
Спасибо автор все по полочкам разложил.
17. AgentNiCho 07.12.23 11:52 Сейчас в теме
А что делать если мне нужно, чтоб показывались эти строки. Соединяю основную таблицу Номенклатура (с прочими полями) и регистр ОстаткиПоЯчейкам. Аналогичная ошибка возникает когда одна и та же номенклатура в нескольких ячейках находится.

В таком случае менять ПоляКлюча и ВидКлюча? Или также реквизит динамического списка "ОсновнаяТаблица" поменять?
18. Andrei_Ivanov 159 08.12.23 10:40 Сейчас в теме
(17) Если идея - вывести для каждой номенклатуры в списке ячейку и остаток по ней.
Я бы попробовал оставить Вид ключа = Авто + Поля ключа = "номенклатура, ячейка" и посмотреть, как будет себя список вести. Может как то null в ячейке будет реагировать и надо ставить доп. условия.
Реквизит "Основная таблица" должен был очищен для использования вышеуказанных полей.
AgentNiCho; +1 Ответить
19. AgentNiCho 08.12.23 14:24 Сейчас в теме
(17) (18) Получилось решить следующим способом:

ПоляКлюча - фиксированный массив с двумя ключевыми полями "Номенклатура,Ячейка"
СписокНоменклатуры.ПоляКлюча = ПоляКлюча;
СписокНоменклатуры.ВидКлюча = ВидКлючаДинамическогоСписка.КлючСтроки;

// Обнуляем основную таблицу, иначе ПоляКлюча не отработают
СписокНоменклатуры.ОсновнаяТаблица = "";

В итоге получилось выводить вариант размещения одной и той же номенклатуры в разных ячейках

Обязательно нужно, чтоб поле Ячейка не было ни null, не Неопределено. Для этого нужно учесть это при изменении текста запроса
Andrei_Ivanov; +1 Ответить
Оставьте свое сообщение