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