При работе с расширениями в 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда изменения в динамическом списке (добавление колонок, изменение запроса), внесенные в расширении, игнорируются системой в пользовательском режиме. Вместо ожидаемых новых данных открывается стандартная форма из основной конфигурации или форма без нужных полей. Рассмотрим подробно, почему это происходит и как правильно настроить динамический список, чтобы все изменения вступили в силу.
Разберем типичную ошибку: разработчик добавляет форму списка справочника в расширение, открывает её редактор и меняет текст запроса в динамическом списке. Однако при запуске приложения колонки не появляются. Выясним причину: в 1С недостаточно просто добавить форму в расширение. Для того чтобы платформа начала использовать метаданные списка именно из расширения, необходимо заимствовать сам реквизит формы.
Проанализируем шаги для правильного заимствования:
Список с типом ДинамическийСписок).Важный нюанс: после этого действия в свойствах реквизита в расширении должно появиться свойство «Расширение» (Extended). Теперь платформа понимает, что структуру запроса и набор полей нужно брать из расширения, а не из основной конфигурации.
В современных конфигурациях, таких как КА 2.5 или ERP, динамические списки часто управляются программно через Библиотеку стандартных подсистем (БСП). Рассмотрим ситуацию: вы изменили запрос визуально, но в процедуре ПриСозданииНаСервере основной конфигурации вызывается код, который переопределяет текст запроса программно.
Чтобы гарантированно применить свои изменения, проанализируем возможность использования обработчика &После для процедуры ПриСозданииНаСервере. Посмотрим на пример кода, который поможет принудительно установить ваш текст запроса:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Получаем текущий текст запроса
ТекстЗапроса = Список.ТекстЗапроса;
// Добавляем свои поля, если они еще не добавлены программно
// Важно: не пытайтесь присвоить значение напрямую реквизиту "Список"
// Нужно менять именно свойство "ТекстЗапроса" объекта "ДинамическийСписок"
НовыйТекстЗапроса = ТекстЗапроса + " ... "; // Ваша логика модификации
Список.ТекстЗапроса = НовыйТекстЗапроса;
КонецПроцедуры
Обратите внимание: как было замечено в обсуждении, попытка присвоить значение самому реквизиту формы (например, ЭтаФорма.Список = НовыйСписок) вызовет ошибку «нельзя устанавливать значение реквизиту формы типа динамический список». Изменять можно только свойства внутри объекта Список.
Иногда технически всё настроено верно, но пользователь всё равно не видит новых колонок. Выясним причину: 1С сохраняет настройки формы (видимость колонок, их порядок, ширину) для каждого пользователя индивидуально. Если пользователь ранее открывал эту форму, система загружает старые настройки, в которых новые колонки из расширения просто скрыты.
Для решения этой проблемы выполним следующие действия в режиме «1С:Предприятие»:
КодГр и КодВн — для настройки отображения без кода подойдёт инструмент настройки отображения данных и управления доступом к формам.Рассмотрим ситуацию, когда после изменения запроса в списке перестают отображаться подчиненные элементы (группы не раскрываются). Это происходит, если в свойствах динамического списка в расширении «слетело» указание основной таблицы.
Проверим настройки динамического списка в расширении:
Справочник.Партнеры). Без этого платформа не может корректно обрабатывать иерархию и динамическое считывание данных.Ссылка как ключевое.Если колонки в списке пустые, хотя данные в базе точно есть, проанализируем права доступа (поможет универсальный инструмент настройки прав доступа в управляемых формах). В платформе 8.3 расширения имеют собственную систему прав. Если вы добавили новые реквизиты в расширение, но не создали в нем роль, дающую право на «Просмотр» и «Чтение» этих реквизитов, то пользователи (даже с полными правами в основной конфигурации) не увидят данные в этих колонках.
Разберем решение:
Подводя итог, можно сказать, что работа с динамическими списками в расширениях требует комплексного подхода: от правильного заимствования метаданных до контроля программного изменения запроса в коде БСП и настройки прав доступа — для этих целей подойдёт инструментарий разработчика для анализа структуры метаданных и прав.