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