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

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    2640    30    15    

35

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

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

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

3600 руб.

10.02.2017    107310    636    173    

679

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

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

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

14400 руб.

29.04.2020    27946    82    146    

61

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 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    22564    302    35    

74

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

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

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

2400 руб.

13.07.2015    50325    171    29    

121

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

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

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    725    3    4    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. retr0 19.01.22 09:17 Сейчас в теме
Ну че то такое себе, думал что-то интересное увидеть а тут типовые шаги описаны. В частности можно было пропустить ту часть где описывается про то, как получить текст запроса.
user712426; +1 Ответить
2. Andrei_Ivanov 162 19.01.22 10:13 Сейчас в теме
(1) Доброго времени суток. Спасибо за комментарий.
Я типовых шагов по решению такой проблемы не видел, когда искал.
Я думаю, что часть с получением текста запроса важная, так как можно получить его, допустим, взяв из динамического списка на форме, и не учесть того, что он при создании на сервере меняется.
user1741387; user1706724; Darkoder; zurapa; user811769; lvictor58; mrChOP93; +7 Ответить
3. retr0 19.01.22 10:40 Сейчас в теме
(2) Было бы весьма странно не учитывать вариант модификации текста запроса в дин списке. Проблема тривиальная и статьи на эту тему не требуются, очевидно, что дубли появились по причине соединения с какой-то из таблиц 99% еще ни разу не видел, что бывают дубли с таблицей без соединений. Может быть, будет полезно кому-то.
4. mrChOP93 96 20.01.22 06:21 Сейчас в теме
(3) вы не учитываете, что на сайте есть и совсем новички, такая статья им будет очень полезна.
user1706724; Feelthis; user610423_domestic; Darkoder; Anatolia; zurapa; AlbinaAAA; user811769; +8 Ответить
5. пользователь 20.01.22 07:04
Сообщение было скрыто модератором.
...
6. user811769 13 22.02.22 14:52 Сейчас в теме
(5) когда-то и вы не обладали этим сакральным знанием, уважаемый retr0) Андрей, спасибо!
user1706724; zurapa; +2 Ответить
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 Сейчас в теме
Весьма хорошая статья для новичков, весьма хорошо оформлена.
user1706724; gucci76; user610423_domestic; dimaster; Darkoder; user1492823; Andrei_Ivanov; +7 Ответить
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 162 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 162 08.12.23 10:40 Сейчас в теме
(17) Если идея - вывести для каждой номенклатуры в списке ячейку и остаток по ней.
Я бы попробовал оставить Вид ключа = Авто + Поля ключа = "номенклатура, ячейка" и посмотреть, как будет себя список вести. Может как то null в ячейке будет реагировать и надо ставить доп. условия.
Реквизит "Основная таблица" должен был очищен для использования вышеуказанных полей.
AgentNiCho; +1 Ответить
19. AgentNiCho 08.12.23 14:24 Сейчас в теме
(17) (18) Получилось решить следующим способом:

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

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

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

Обязательно нужно, чтоб поле Ячейка не было ни null, не Неопределено. Для этого нужно учесть это при изменении текста запроса
Andrei_Ivanov; +1 Ответить
21. rabotana 02.04.24 03:13 Сейчас в теме
А как вам такой вариант. Эта ошибка. Всё делаем по инструкции, но в колонке КоличествоНеуникальныхНаборов все однерки. Конфига под замком, расширений нет.
24. Andrei_Ivanov 162 03.04.24 09:59 Сейчас в теме
26. rabotana 12.04.24 11:54 Сейчас в теме
(24) да вот непонятно. яж под одним пользователем и ошибку получаю и запрос в консоли запускаю. а результат разный в консоли всё отлично. ошибку в данных то нашел, а про запрос так и не понял..
22. nigavis 02.04.24 09:37 Сейчас в теме
Спасибо большое за статью!!!
Вы помогли очень сильно!
23. SatanClaws 143 03.04.24 07:43 Сейчас в теме
Столкнулся с этой проблемой немного в другом ключе:

CRM от Раруса, справочник КонтактныеЛицаПартнеров

Через "Изменить форму" добавлены колонки Ссылка.Телефон, Ссылка.E-mail
на некоторых контактах список валится с пресловутой ошибкой "Обнаружено дублирование ключевых значений в колонках Ссылка".

Почему валиться, в принципе, понятно: телефон и мыло - суть записи табличной части спр.КонтактныеЛица, т.е. на джойне мы легко получаем дублирование строк

НО!
1) валится не на всех - у некоторых вполне исправно в колонке телефоны перечислены через запятую. Скорее даже на исключительных
1а) аналитически понять критерии когда список ломается - не осилил
2) я так и не смог через отладчик добраться до модифицированного текста запроса. Доступа к профайлеру не было, так что достоверно узнать что за запрос уходит на скуль - облом.

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


PS если кто подскажет, как отладчиком вытащить модифицированный текст запроса динамического списка - буду признателен.
25. Andrei_Ivanov 162 03.04.24 10:42 Сейчас в теме
1. Плохо понимаю, что выводится. Данные из ТЧ или реквизиты справочника? Говорите, про Ссылка.Телефон, вроде бы реквизит, но потом речь уже идет про ТЧ. Также не понимаю, как через изменить форму можно вытащить реквизиты ТЧ. Ощущение, что нельзя.
1а. Мб когда больше 1 строки в тч, если с тч соединяетесь, но это я очень поверхностно.
2. Можно встать в отладку в серверную процедуру на форме - вычислить выражение = %НазваниеЭлемента%.ТекстЗапроса
Я посмотрел, у меня не меняется текст запроса от выводимых дополнительно полей - не знаю, в какой момент платформа добирает данные.
Может быть проблема в самом тексте запроса изначально, а не в настройках пользователей?
Оставьте свое сообщение