Почему в динамическом списке 1С появляются лишние колонки и как их убрать

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

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

Причина 1: Кэширование пользовательских настроек в SystemSettingsStorage

Это самая распространенная причина появления «призраков» прошлого в интерфейсе. Платформа 1С сохраняет настройки формы (расположение колонок, их видимость, ширину) для каждого пользователя индивидуально. Если когда-то эти реквизиты были выведены на форму, а затем удалены разработчиком в конфигураторе, платформа может попытаться «восстановить» их из старого кэша настроек.

Разберем по шагам, как это исправить:

  1. Попробуйте стандартный сброс: в режиме «1С:Предприятие» нажмите Еще — Изменить форму, затем Еще — Установить стандартные настройки. Однако, как показывает практика, при серьезных изменениях структуры запроса это помогает не всегда.
  2. Выполните полную очистку настроек пользователя. Перейдите в раздел Администрирование — Настройки пользователей и прав — Очистка настроек. Найдите нужного пользователя и конкретную форму списка. Очистите все настройки, связанные с внешним видом и настройками динамического списка.
  3. Если вы работаете в файловой базе, иногда может потребоваться очистка локального кэша конфигурации на компьютере пользователя (папки в %AppData%\1C\1cv8\).

Причина 2: Свойство «Автозаполнение доступных полей»

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

Почему это приводит к проблемам:

Когда включено автозаполнение, система «видит» все поля объекта метаданных. Если пользователь случайно (или через механизм «Изменить форму») добавит их, они появятся в таблице. При этом платформа может брать синоним напрямую из метаданных объекта (то самое «(не используется)»), игнорируя ваши красивые псевдонимы в тексте запроса ВЫБРАТЬ Реквизит КАК МоеПоле. Чтобы этого избежать, попробуйте снять галочку Автозаполнение доступных полей и явно указать нужные поля в запросе и в списке доступных полей.

Причина 3: Программная модификация в конфигурациях на базе БСП

Если ваша конфигурация построена на «1С:Библиотеке стандартных подсистем» (БСП), то интерфейс часто формируется динамически. Проанализируем программный код в модуле формы и связанных общих модулях.

Многие подсистемы БСП (например, «Дополнительные отчеты и обработки», «Свойства», «Префиксация объектов») подключаются к формам в процедуре ПриСозданииНаСервере. Ищите вызовы, подобные этим:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // БСП может программно добавлять колонки, связанные с доп. реквизитами
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект);
    
    // Или модифицировать состав динамического списка
    ОбщегоНазначенияБСП.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

КонецПроцедуры

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

Причина 4: Влияние расширений конфигурации

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

Проверьте в расширениях обработчики &Вместо, &После для процедур ПриСозданииНаСервере или наличие измененного макета динамического списка.

Причина 5: Баги платформы и последствия конвертации

Существует специфическая проблема, возникающая при миграции баз с версии 8.2 на 8.3 или при длительной разработке одной формы. Платформа может сохранять внутренние идентификаторы полей, которые уже не существуют или скрыты. Как отмечают опытные разработчики, иногда «фантомные» колонки появляются даже тогда, когда их нет ни в запросе, ни в настройках.

Радикальное решение («Метод пересоздания»):

Если ни очистка кэша, ни проверка кода не помогают, выполните следующие действия:

  1. Создайте в справочнике абсолютно новую форму списка (не копированием старой, а именно новую через мастер).
  2. Вручную перенесите текст запроса динамического списка.
  3. Заново создайте элементы формы (колонки таблицы).
  4. Скопируйте программный код из старой формы в новую.
  5. Назначьте новую форму основной в карточке объекта метаданных.

Важно: Простое копирование формы Ctrl+C / Ctrl+V часто переносит и скрытую ошибку, поэтому важно создать форму «с нуля».

Как провести окончательную диагностику?

Чтобы точно понять, откуда берется колонка, воспользуйтесь Замером производительности:

  1. Включите замер производительности в конфигураторе.
  2. Откройте проблемную форму в режиме «1С:Предприятие».
  3. Остановите замер и проанализируйте список вызванных функций.
  4. Ищите методы, содержащие Элементы.Добавить или ТекстЗапроса. Это позволит найти код, который программно «вклинивается» в процесс отрисовки формы.

Также полезно проверить форму через Консоль запросов. Скопируйте текст запроса из динамического списка и выполните его в консоли. Если лишних полей в результате нет, значит проблема на 100% кроется в слое представления (настройки формы, кэш или программное управление элементами интерфейса).

Подводя итог, можно сказать, что «фантомные» колонки — это результат работы механизмов адаптивности 1С. Тщательная очистка пользовательских настроек и проверка программных модулей БСП в большинстве случаев позволяют решить проблему без радикального пересоздания форм.

← На главную