1с обнаружено дублирование ключевых значений в колонках тип ссылки
Доброго времени суток, коллеги. Недавно наткнулся на ошибку "Обнаружено дублирование ключевых значений в колонках: . ". Сразу не понял, как её решать. Когда гуглил, видел только частные решения. Хочу показать один из возможных способов решения проблемы. Мне он помог.
Исходная ситуация. Открываю список заказов. Вижу ошибку. Либо сразу, либо после пролистывания списка.
Для решения, нам нужно:
Нужно запустить конфигурацию в режиме отладки. Далее необходимо найти форму, в которой возникает проблема.
Для этого можно использовать несколько способов.
Можно нажать правой кнопкой мыши на заголовок формы - нажать открыть в конфигураторе - сразу откроется необходимая форма (у вас может не быть такой кнопки).
Если её нет, можно открыть ссылку и посмотреть название объекта, с которым мы работаем и вручную найти его в конфигураторе, далее найти необходимую форму - можно по слову "список". Может быть несколько подходящих. В таком случае можно поставить точку останова на каждой.
Далее нужно поставить точку останова в конец процедуры "ПриСозданииНаСервере". Так как текст запроса в динамическом списке может меняться программно. Мы ожидаем, что в дальнейшем текст запроса не будет меняться.
Мы нашли текст запроса, который выполняется при заходе в динамический список.
Теперь нам нужно открыть этот запрос в консоли запросов, вставить туда запрос, повторить параметры, аналогично параметрам динамического списка. Оставляем только ключевые поля. Корректируем запрос так, чтобы получить для каждого набора ключевых полей их количество. Нам нужно найти неуникальное значение/значения. У меня получился вот такой запрос и результат к нему.
То есть дублируется заказ покупателя "Демо: Заказ покупателя 000000001 от 20.08.2009 16:01:15".
Теперь нужно понять проблему дублирования. Возможно это левое соединение с каким-нибудь регистром.
Для того, чтобы понять, какая таблица может являться проблемной, можно убирать левые соединения и выполнять запрос до тех пор, пока мы не увидим, что набор ключевых полей выводится в единственном экземпляре. Для удобства я сделаю условие на вывод только проблемного заказа.
Выяснилось, что при удалении соединения с регистром сведений "аи_СломатьДинамическийСписок" данные перестали дублироваться. Видимо дело в нем. Заходим в регистр, видим, что правда есть 2 записи по нашему заказу.
После удаления одной из записей - список заказов открывается.
Пример, который я показал, я создал на конфигурации "Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 3.1 (3.1.5.180)". На платформе "1С:Предприятие 8.3 (8.3.20.1674)".
Как правило, рассматриваемая ошибка проявляет себя уже на стадии тестирования создаваемой конфигурации. Она появляется при попытке открытия какой-либо формы выбора, или работающей на управляемом приложении формы списка в 1С, при выполнении других операций и процессов.
Проблема возникает как в версии 1С 8.3, так и более ранних версиях продукта (зафиксировано её появление в более ранних версиях 8.2 и 8.1.)
При возникновении ошибки появляется уведомление « Обнаружено дублирование ключевых значений в колонке «Ссылка» (или каких-либо альтернативных колонках). Отображение данных в списке невозможно ». Программисту предлагается нажать на кнопку «Ок», после чего уведомление пропадает.
Причиной этого является неправильно настроенное соединение с основной таблицей, которое и предстоит откорректировать программисту 1С.
Также причиной указанной ошибки может выступать наличие в базе ряда элементов справочника с незаполненным кодом.
Решение возникшей дисфункции напрямую зависит от специфики создаваемого программистом программного кода. Рекомендуется открыть ваш динамический список, найти в его свойствах произвольный запрос, и соответствующим образом откорректировать его для того, чтобы он не выдавал дублирующих строк.
Для этого перейдите в конфигуратор базы 1С, откройте запрос динамического списка (лучше всего через конструктор запросов), и просмотрите имеющиеся связи между таблицами в запросе. После нахождения проблемы скорректируйте запрос с целью удаления дублирующих ссылок по колонке (в случае данной статьи это упомянутая в тексте ошибки колонка «Ссылка»). Для этого в большинстве случаев достаточно перейти на закладку «Группировка», и перераспределить имеющиеся поля запроса в суммируемые и группируемые поля.
В случае неудачи попробуйте также в конструкторе запросов динамического списка перейти в закладку «Дополнительно», и там поставить галочку на опции «Без повторяющихся». Довольно часто это позволяет избавиться от проблемы в версии 1С 8.3 (и более ранних версий).
Удалите все сомнительные соединения запроса. Если отыскать корень проблемы не удаётся – тогда стоит выполнить глобальное тестирование и исправление.
В более ранних версиях 1С помогал переход в раздел «Администрирование», далее «Обслуживание», затем выбор опции «Корректировка данных». Раскройте имеющуюся панель, выберите там «Поиск и удаление дублей», а затем кликните на «Искать». Выполните поиск и удаление дублей, каждый раз заново запуская обработку по справочникам.
Заключение
От простой для отдельных компаний до комплексной автоматизации крупных холдингов.
Любая из конфигураций 1С может выдать ошибку:
Она может возникнуть при работе в режиме управляемого приложения, при открытии формы выбора, списка или установлении отбора в такой форме. Т.е. программа использует запрос в динамическом списке, а при переносе из-за сбоя программы могут появиться дублирующие строки, т.е. в списке будут содержаться одинаковые ссылки на справочник или регистр. Например, при установлении отбора в справочнике «Сотрудники». В результате и появляется такого рода ошибка.
Рис.2 Ошибка в справочнике «Сотрудники»
Например, в ситуации со справочником «Сотрудников» рекомендуется проверить регистры текущих сведений (кадровые данные и тарифная ставка), чтобы в них не было дублей по одному и тому же работнику, и регистр «Основные сотрудники», чтобы не было физлиц с незаполненными сведениями. Здесь могут сохраниться сведения, например, когда работник был принят и когда уволен, но по каким-то причинам первая запись не удалилась, и образовались дубли. В таком случае необходимо просмотреть записи регистров и, если такая запись попадается, ее необходимо удалить (предыдущую, оставив одну последнюю), в результате чего ошибка ликвидируется.
Просмотр регистров через команду «Все функции»
Рис.3 Просмотр регистров через команду «Все функции»
Если данный раздел не доступен, то включить его можно в меню «Сервис-Параметры», установив соответствующую галочку. Открыв регистр и проанализировав данные, при обнаружении дублирующих записей их необходимо удалить.
Рис.4 Просмотр физлиц
Возникновение ошибки происходит, потому что динамические списки не поддерживают дублирование записей по ключевым полям. При работе с динамическим списком записи формируются в основную таблицу, из которой происходит динамическое считывание данных.
Она может быть вызвана при работе в режиме управляемого приложения, при открытии списка, формы выбора или установлении отбора. Другими словами, программа применяет запрос в динамическом списке.
При переносе из-за сбоя могут возникнуть дублирующие строки. В списке будут содержаться идентичные ссылки на регистр или справочник. К примеру, при установлении отбора в справочнике «Сотрудники». В результате появляется подобная ошибка.
Для устранения подобной ошибки требуется удалить из списка запроса ссылки, которые повторяются. Для этого нужно осуществить проверку регистров.
В ситуации со справочником «Сотрудников» необходимо проверить регистры текущих данных (кадровая информация и тарифная ставка), чтобы в них отсутствовали дубли по одному и тому же сотруднику, и регистр «Основные сотрудники», чтобы не было физических лиц с незаполненной информацией.
Здесь может быть сохранена информация о том, когда сотрудник устроился на работу и когда был уволен с нее, но почему-то первая запись не была удалена и произошло образование дублей.
Тогда требуется просмотреть записи регистров. В том случае, если подобная запись попадается, ее нужно удалить (предыдущую, оставив одну последнюю). В результате этого ошибка исчезает. Просмотр регистров осуществляется при помощи команды «Все функции».
Если этот раздел недоступен, то включить его можно в меню «Сервис-Параметры», для этого требуется установить соответствующую галочку.
Открыв регистр и проведя анализ информации, при обнаружении дублирующих записей их требуется удалить.
Появление ошибки происходит, так как динамические списки не поддерживают дублирование записей по ключевым полям. Когда вы работаете с динамическим списком, записи формируются в основную таблицу. Из нее происходит динамическое считывание сведений.
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
Она может быть вызвана при работе в режиме управляемого приложения, при открытии списка, формы выбора или установлении отбора. Другими словами, программа применяет запрос в динамическом списке.
При переносе из-за сбоя могут возникнуть дублирующие строки. В списке будут содержаться идентичные ссылки на регистр или справочник. К примеру, при установлении отбора в справочнике «Сотрудники». В результате появляется подобная ошибка.
Для устранения подобной ошибки требуется удалить из списка запроса ссылки, которые повторяются. Для этого нужно осуществить проверку регистров.
В ситуации со справочником «Сотрудников» необходимо проверить регистры текущих данных (кадровая информация и тарифная ставка), чтобы в них отсутствовали дубли по одному и тому же сотруднику, и регистр «Основные сотрудники», чтобы не было физических лиц с незаполненной информацией.
Здесь может быть сохранена информация о том, когда сотрудник устроился на работу и когда был уволен с нее, но почему-то первая запись не была удалена и произошло образование дублей.
Тогда требуется просмотреть записи регистров. В том случае, если подобная запись попадается, ее нужно удалить (предыдущую, оставив одну последнюю). В результате этого ошибка исчезает. Просмотр регистров осуществляется при помощи команды «Все функции».
Если этот раздел недоступен, то включить его можно в меню «Сервис-Параметры», для этого требуется установить соответствующую галочку.
Открыв регистр и проведя анализ информации, при обнаружении дублирующих записей их требуется удалить.
Появление ошибки происходит, так как динамические списки не поддерживают дублирование записей по ключевым полям. Когда вы работаете с динамическим списком, записи формируются в основную таблицу. Из нее происходит динамическое считывание сведений.
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
Читайте также: