Почему добавленные в расширении колонки динамического списка не отображаются в 1С:Предприятии?

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

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

Выясним причины скрытия колонок динамического списка

Поведение платформы и типовых конфигураций в данном сценарии обусловлено несколькими ключевыми факторами:

  1. Программное формирование текста запроса в типовом коде. В типовых решениях на базе БСП текст запроса динамического списка СписокНоменклатура зачастую переопределяется программно при открытии формы в обработчике ПриСозданииНаСервере. Типовой код считывает настройки, подключает дополнительные таблицы и полностью перезаписывает свойство СписокНоменклатура.ТекстЗапроса, в результате чего визуальные изменения запроса, сделанные в расширении, попросту затираются.
  2. Влияние функциональных опций. Реквизиты классификаторов и производителей могут быть жестко связаны с функциональными опциями конфигурации. Если в базе отключена соответствующая опция учета, платформа автоматически скрывает связанные элементы формы.
  3. Кэширование пользовательских настроек формы. Если пользователь ранее уже открывал форму списка, платформа сохраняет ее индивидуальную структуру колонок. Новые элементы, добавленные в конфигураторе или расширении, могут не появиться до принудительного сброса настроек.
  4. Ограничения прав доступа. Если у пользователя нет прав на чтение конкретных полей или связанных справочников, колонка не будет отображаться.

Решение 1. Вывод реквизитов через пользовательский режим («Изменить форму»)

Проанализируем самый быстрый и безопасный способ, не требующий создания расширений и изменения кода конфигурации. Платформа 1С:Предприятие 8.3 позволяет выводить реквизиты связанных объектов прямо в пользовательском интерфейсе.

  1. Откроем форму списка справочника Номенклатура в режиме предприятия.
  2. В правом верхнем углу нажмем меню Еще и выберем пункт Изменить форму.
  3. В дереве элементов формы найдем и выделим таблицу списка или поле Ссылка.
  4. Нажмем кнопку Добавить поля в командной панели окна настройки формы.
  5. В открывшемся списке реквизитов найдем и отметим флажками нужные поля: Производитель и Код ОКПД2 (а также любые другие необходимые свойства).
  6. Нажмем ОК и применим настройки кнопкой Применить.

Платформа автоматически добавит данные поля в выборку динамического списка через соединение по ссылке без вмешательства в конфигуратор.

Решение 2. Программное переопределение запроса динамического списка в расширении

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

Посмотрим на пример кода, в котором мы дополняем текст запроса и программно создаем элементы интерфейса:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Модифицируем текст запроса динамического списка
    ТекстЗапроса = СписокНоменклатура.ТекстЗапроса;
    
    // Проверяем, не добавлены ли уже поля, чтобы избежать дублирования
    Если СтрНайти(ТекстЗапроса, "Номенклатура.Производитель") = 0 Тогда
        ТекстЗапроса = СтрЗаменить(
            ТекстЗапроса,
            "ВЫБРАТЬ",
            "ВЫБРАТЬ
            |	Номенклатура.Производитель КАК Производитель,
            |	Номенклатура.КодОКПД2 КАК КодОКПД2,"
        );
        СписокНоменклатура.ТекстЗапроса = ТекстЗапроса;
    КонецЕсли;
    
    // Программно создаем колонку на форме, если элемент отсутствует
    Если Элементы.Найти("СписокПроизводитель") = Неопределено Тогда
        НоваяКолонка = Элементы.Добавить("СписокПроизводитель", Тип("ПолеФормы"), Элементы.Список);
        НоваяКолонка.Вид = ВидПоляФормы.ПолеНадписи;
        НоваяКолонка.ПутьКДанным = "СписокНоменклатура.Производитель";
        НоваяКолонка.Заголовок = "Производитель";
    КонецЕсли;
    
    // Гарантируем считывание данных списком
    СписокНоменклатура.УстановитьОбязательноеИспользование("Производитель", Истина);
    СписокНоменклатура.УстановитьОбязательноеИспользование("КодОКПД2", Истина);
    
КонецПроцедуры

Решение 3. Сброс настроек формы к стандартным

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

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

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

← На главную