Почему в динамическом списке 1С появляется лишнее поле "Ссылка1" и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← К списку

При работе с динамическими списками в 1С иногда возникает неприятная ситуация: в списке колонок появляется поле с именем "Ссылка1", которое является дублем основного поля "Ссылка". Это не только выглядит неаккуратно, но и может быть симптомом более серьезных проблем в запросе, например, задвоения строк. Давайте вместе разберемся, почему так происходит и как навести порядок в нашем списке.

Проанализируем ситуацию. Лишнее поле, как правило, не появляется из ниоткуда. Его создает сама платформа 1С, а точнее — Система Компоновки Данных (СКД), на которой построены динамические списки. Выясним основные причины такого поведения.

Решение 1: Убираем явное указание поля "Ссылка" из текста запроса

Это самая частая причина проблемы. Разберем по шагам, как она возникает.

  1. Когда мы создаем динамический список, мы обычно указываем для него "Основную таблицу" (например, Справочник.Номенклатура).
  2. Как только основная таблица задана, платформа 1С автоматически и неявно добавляет в результирующий набор данных поле Ссылка из этой таблицы. Это поле является ключевым, оно необходимо для корректной работы списка: позиционирования, открытия формы элемента и других стандартных действий.
  3. Теперь представим, что мы пишем собственный произвольный запрос для этого списка и в тексте запроса также явно выбираем поле Ссылка из основной таблицы.

Посмотрим на пример такого "избыточного" запроса:


ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Наименование,
    Номенклатура.Артикул
ИЗ
    Справочник.Номенклатура КАК Номенклатура

Что в этот момент "видит" СКД? Она видит два поля с одинаковым именем "Ссылка": одно, которое она добавила автоматически, и второе — из нашего текста запроса. Чтобы избежать конфликта имен, СКД автоматически переименовывает одно из полей, добавляя к его имени цифру. Так и появляется поле Ссылка1.

Решение очень простое: если у динамического списка указана Основная таблица, просто не добавляйте поле Ссылка от этой таблицы в текст запроса. Система сделает это за вас.

Правильный вариант запроса:


ВЫБРАТЬ
    Номенклатура.Наименование,
    Номенклатура.Артикул
ИЗ
    Справочник.Номенклатура КАК Номенклатура

После такого изменения лишнее поле Ссылка1 должно исчезнуть из списка доступных полей формы.

Решение 2: Исправляем запрос с соединениями, чтобы избежать дублирования строк

Иногда появление поля Ссылка1 является следствием другой, более глубокой проблемы — задвоения строк в результате работы соединений в запросе. Рассмотрим подробнее.

Предположим, мы хотим вывести в списке номенклатуры еще и ее характеристики. Мы используем ЛЕВОЕ СОЕДИНЕНИЕ с регистром сведений или табличной частью, где хранятся характеристики. Если у одной позиции номенклатуры есть несколько характеристик, то в результате запроса эта позиция номенклатуры появится в выборке несколько раз — по одному разу для каждой характеристики.

Посмотрим на пример, который приведет к дублированию строк:


ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Наименование,
    Характеристики.Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК Характеристики
        ПО Номенклатура.Ссылка = Характеристики.Объект

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

Как это исправить? Необходимо перестроить запрос так, чтобы данные из присоединяемых таблиц не создавали дублей строк основной таблицы. Лучший способ — использовать вложенные запросы для агрегации данных.

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

Решение 3: Проверяем и сбрасываем пользовательские настройки формы

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

Пользователь мог самостоятельно через меню "Еще" -> "Изменить форму" добавить в список какое-то поле, в том числе и дублирующую ссылку. После обновления конфигурации или изменения запроса разработчиком эти сохраненные настройки могут вступить в конфликт с текущей структурой формы.

Что делать в этом случае?

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

Этот способ часто помогает решить "плавающие" проблемы с отображением, которые проявляются только у части пользователей.

Таким образом, проанализировав запрос и проверив настройки, мы можем легко избавиться от назойливого поля Ссылка1 и обеспечить корректную и стабильную работу динамического списка.

← К списку