Почему не отображается добавленная колонка в динамическом списке 1С:ERP или ЗУП?

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

Разберем одну из самых коварных проблем, с которой сталкиваются разработчики при доработке типовых конфигураций на базе 1С:ERP 2.5 или ЗУП 3.1. Ситуация классическая: вы открываете конфигуратор, добавляете новое поле в произвольный запрос динамического списка, выводите его на форму, проверяете свойство ИспользоватьВсегда, но в режиме «1С:Предприятие» колонка просто отсутствует. Ее нет ни на форме, ни даже в списке доступных полей в настройках формы.

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

Причина 1: Программное перестроение запроса в модулях БСП

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

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

Разберем типичный пример программной подмены из модуля формы:


&НаСервере
Функция ОбновитьНастройкиФормы()
    // ... логика определения настроек ...
    НастройкиСписка = СотрудникиФормыРасширенный.НастройкиСпискаФормы(ЭтаФорма);
    
    // В этом методе запрос списка может быть полностью перезаписан
    ДополнительныеПараметры = СотрудникиФормыРасширенный.УстановитьЗапросДинамическогоСписка(ЭтаФорма, НастройкиСписка.ОтборыСписка, Истина);
    Возврат ДополнительныеПараметры;
КонецФункции

Что делать: Необходимо найти точку входа, где вызывается метод УстановитьЗапросДинамическогоСписка, и убедиться, что ваш измененный запрос не затирается. Если вы работаете в расширении, вам может потребоваться перехватить эту процедуру (через &После или &Вместо) и принудительно добавить ваше поле в текст запроса Список.ТекстЗапроса.

Причина 2: Влияние функциональных опций на доступность полей

Это одна из самых неочевидных особенностей платформы «1С:Предприятие 8». Если поле в запросе динамического списка (или путь к данным через точку) связано с объектом или реквизитом, который отключен функциональной опцией (ФО), платформа автоматически исключает это поле из доступных полей схемы компоновки данных (СКД) динамического списка.

Например, в 1С:ERP работа с должностями сотрудников зависит от того, включена ли опция «Использовать штатное расписание». Рассмотрим ситуацию из практики:

  1. В запросе используется поле ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность.
  2. В программе включена опция «Использовать штатное расписание».
  3. В результате поле ТекущаяДолжность становится недоступным на уровне метаданных, так как система ожидает использования поля ТекущаяДолжностьПоШтатномуРасписанию.

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


ВЫБОР 
    КОГДА ПОДСТРОКА(ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжностьПоШтатномуРасписанию.Должность.Код, 10, 2) = "01" 
    ТОГДА ПОДСТРОКА(ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжностьПоШтатномуРасписанию.Должность.Код, 13, 1) 
    ИНАЧЕ "" 
КОНЕЦ КАК ТарифРазряд

Причина 3: Ошибки кэширования и пользовательские настройки

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

Посмотрим, как это проверить:

  1. Зайдите в режим «1С:Предприятие» под проблемным пользователем.
  2. Нажмите Еще — Установить стандартные настройки.
  3. Если колонка появилась — проблема была в сохраненных настройках.

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

Причина 4: Особенности работы с расширениями

Если вы добавляете колонку через расширение, убедитесь, что форма в расширении действительно является той, которая открывается в программе. В ERP часто существует несколько форм списка для одного справочника (например, форма для выбора, форма для подбора, основная форма списка).

Выясним правильность подключения формы:

Методика отладки динамического списка

Если визуальный осмотр не помог, воспользуемся методом «контрольной точки»:

  1. Поставьте точку останова в самом конце процедуры ПриСозданииНаСервере.
  2. В табло вычислите выражение Элементы.ИмяВашейКолонки.Видимость.
  3. Вычислите Список.ТекстЗапроса и скопируйте его в консоль запросов.

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

← На главную