Как правильно изменить динамический список в расширении 1С, чтобы новые поля отображались на форме

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

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

Причина №1: Некорректное заимствование реквизитов формы

Разберем типичную ошибку: разработчик добавляет форму списка справочника в расширение, открывает её редактор и меняет текст запроса в динамическом списке. Однако при запуске приложения колонки не появляются. Выясним причину: в 1С недостаточно просто добавить форму в расширение. Для того чтобы платформа начала использовать метаданные списка именно из расширения, необходимо заимствовать сам реквизит формы.

Проанализируем шаги для правильного заимствования:

  1. Откроем дерево метаданных расширения.
  2. Найдем заимствованную форму.
  3. Перейдем на закладку «Реквизиты».
  4. Найдем основной реквизит формы (обычно это Список с типом ДинамическийСписок).
  5. Нажмем правой кнопкой мыши на этот реквизит и выберем «Добавить в расширение».

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

Причина №2: Влияние типовых механизмов (БСП)

В современных конфигурациях, таких как КА 2.5 или ERP, динамические списки часто управляются программно через Библиотеку стандартных подсистем (БСП). Рассмотрим ситуацию: вы изменили запрос визуально, но в процедуре ПриСозданииНаСервере основной конфигурации вызывается код, который переопределяет текст запроса программно.

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


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Получаем текущий текст запроса
    ТекстЗапроса = Список.ТекстЗапроса;
    
    // Добавляем свои поля, если они еще не добавлены программно
    // Важно: не пытайтесь присвоить значение напрямую реквизиту "Список"
    // Нужно менять именно свойство "ТекстЗапроса" объекта "ДинамическийСписок"
    
    НовыйТекстЗапроса = ТекстЗапроса + " ... "; // Ваша логика модификации
    Список.ТекстЗапроса = НовыйТекстЗапроса;
    
КонецПроцедуры

Обратите внимание: как было замечено в обсуждении, попытка присвоить значение самому реквизиту формы (например, ЭтаФорма.Список = НовыйСписок) вызовет ошибку «нельзя устанавливать значение реквизиту формы типа динамический список». Изменять можно только свойства внутри объекта Список.

Причина №3: Пользовательские настройки и кэш формы

Иногда технически всё настроено верно, но пользователь всё равно не видит новых колонок. Выясним причину: 1С сохраняет настройки формы (видимость колонок, их порядок, ширину) для каждого пользователя индивидуально. Если пользователь ранее открывал эту форму, система загружает старые настройки, в которых новые колонки из расширения просто скрыты.

Для решения этой проблемы выполним следующие действия в режиме «1С:Предприятие»:

  1. Откроем нужную форму списка.
  2. Нажмем кнопку «Ещё» в правой части командной панели.
  3. Выберем пункт «Установить стандартные настройки».
  4. Если это не помогло, перейдем в «Ещё» — «Изменить форму» и проверим, стоят ли галочки видимости напротив ваших новых полей КодГр и КодВн — для настройки отображения без кода подойдёт инструмент настройки отображения данных и управления доступом к формам.

Причина №4: Потеря иерархии и основной таблицы

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

Проверим настройки динамического списка в расширении:

Причина №5: Права доступа в расширении

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

Разберем решение:

  1. Создадим в расширении новую роль.
  2. Установим права на чтение и просмотр для добавленных объектов и реквизитов.
  3. Назначим эту роль пользователям или добавьте её в профили групп доступа.

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

← На главную