Как исправить ошибку «Обнаружено дублирование ключевых значений в колонке ссылка» в списке ТТН ЕГАИС?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При работе в конфигурации 1С:Розница 2.2 пользователи могут столкнуться с аварийным завершением открытия формы списка документов ТоварноТранспортнаяНакладнаяЕГАИС с диагностическим сообщением: «Обнаружено дублирование ключевых значений в колонке ссылка». Разберем механизм возникновения этой платформенной ошибки, выясним способы быстрого поиска некорректных связей в базе данных и рассмотрим варианты исправления на уровне данных и программного кода.

Почему возникает ошибка в динамическом списке

Проанализируем механику работы платформы «1С:Предприятие 8.3». По умолчанию для списков документов используется объект ДинамическийСписок с включенным динамическим считыванием данных. При этом у списка задано свойство ОсновнаяТаблица (в данном случае Документ.ТоварноТранспортнаяНакладнаяЕГАИС), а ключевым полем выступает поле Ссылка.

Платформа использует ссылку для однозначной адресации, постраничной выборки и корректного позиционирования курсора. В форме списка (например, ФормаСпискаРТ) разработчиками типового решения используется произвольный запрос, в котором выполняется соединение таблицы ТТН с другими объектами:


ИЗ 
    Документ.ТоварноТранспортнаяНакладнаяЕГАИС КАК ДокТТН
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров 
        ПО ДокТТН.Ссылка = ПоступлениеТоваров.ТоварноТранспортнаяНакладнаяЕГАИС

Если на одну накладную ЕГАИС в информационной базе ссылаются два или более документа ПоступлениеТоваров (например, повторно введенный документ, ошибочный черновик или помеченное на удаление поступление), результат запроса вернет несколько строк с одинаковым значением поля Ссылка из основной таблицы. Платформа обнаруживает дубли ключевого поля и блокирует отображение списка.

Обратите внимание: добавление оператора РАЗЛИЧНЫЕ в текст запроса не решает проблему, если другие поля (номер, дата или ссылка связанного поступления) различаются. В таком случае строки целиком не являются дублями, и оператор РАЗЛИЧНЫЕ пропускает их в результирующую выборку.

Способ 1. Поиск и удаление лишних связанных документов в базе данных

Разберем самый простой и правильный способ решения проблемы без изменения конфигурации — поиск и устранение задвоенных ссылок в пользовательском режиме.

  1. Откроем консоль запросов и выполним поиск документов ТТН, на которые ссылается более одного документа поступления:
    
    ВЫБРАТЬ
        Поступление.ТоварноТранспортнаяНакладнаяЕГАИС КАК ТТН,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поступление.Ссылка) КАК КоличествоПоступлений
    ИЗ
        Документ.ПоступлениеТоваров КАК Поступление
    ГДЕ
        Поступление.ТоварноТранспортнаяНакладнаяЕГАИС <> ЗНАЧЕНИЕ(Документ.ТоварноТранспортнаяНакладнаяЕГАИС.ПустаяСсылка)
    СГРУППИРОВАТЬ ПО
        Поступление.ТоварноТранспортнаяНакладнаяЕГАИС
    ИМЕЮЩИЕ
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Поступление.Ссылка) > 1
    
  2. Найдем в списке документов ПоступлениеТоваров строки, привязанные к обнаруженной ТТН.
  3. Если среди них есть дублирующий или помеченный на удаление документ, откроем его и очистим реквизит ТоварноТранспортнаяНакладнаяЕГАИС (вручную либо с помощью типовой обработки Групповое изменение реквизитов).
  4. Выполним регламентную операцию Удаление помеченных объектов, чтобы окончательно исключить неактуальные документы из базы данных.
  5. Если лишнее поступление невозможно удалить сразу, временно распроведем проблемную входящую ТТН непосредственно из формы документа поступления, откроем форму списка ТТН ЕГАИС и проведем накладную повторно.

Способ 2. Исправление текста запроса динамического списка

Если в организации регулярно возникают ситуации, когда на одну накладную ЕГАИС законно оформляется несколько внутренних документов, необходимо скорректировать текст запроса в конфигураторе или через расширение конфигурации. Разберем, как свернуть выборку связанных документов во вложенном запросе.

  1. Откроем в конфигураторе форму списка ТТН ЕГАИС и перейдем к реквизиту Список.
  2. В свойстве ТекстЗапроса заменим прямое левое соединение на соединение со сгруппированным вложенным запросом:
    
    ВЫБРАТЬ
        ДокТТН.Ссылка КАК Ссылка,
        ДокТТН.Номер КАК Номер,
        ДокТТН.Дата КАК Дата,
        ВложенныйЗапрос.ПоступлениеСсылка КАК ПоступлениеТоваров
    ИЗ
        Документ.ТоварноТранспортнаяНакладнаяЕГАИС КАК ДокТТН
        ЛЕВОЕ СОЕДИНЕНИЕ (
            ВЫБРАТЬ
                Поступление.ТоварноТранспортнаяНакладнаяЕГАИС КАК ТТН,
                МАКСИМУМ(Поступление.Ссылка) КАК ПоступлениеСсылка
            ИЗ
                Документ.ПоступлениеТоваров КАК Поступление
            ГДЕ
                НЕ Поступление.ПометкаУдаления
            СГРУППИРОВАТЬ ПО
                Поступление.ТоварноТранспортнаяНакладнаяЕГАИС
        ) КАК ВложенныйЗапрос
            ПО ДокТТН.Ссылка = ВложенныйЗапрос.ТТН
    
  3. Сохраним изменения конфигурации или расширения. Благодаря агрегатной функции МАКСИМУМ и группировке по полю ТТН, вложенный запрос всегда возвращает строго одну запись для каждой накладной, полностью исключая задвоение ключевого поля Ссылка.

Способ 3. Сброс настроек формы и пользовательских отборов

В некоторых случаях ошибка провоцируется поврежденным пользовательским представлением формы или некорректно настроенным фильтром по связанным реквизитам. Рассмотрим действия по восстановлению стандартных параметров:

  1. В правом верхнем углу списка документов нажмем меню Еще.
  2. Выберем команду Установить стандартные настройки.
  3. Перезапустим форму списка. При этом очистятся сохраненные пользовательские настройки колонок и группировок, вызывавшие конфликт выборки.
← На главную