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

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

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

Разберем детально, почему возникает такое поведение платформы и как правильно вывести новые данные в список номенклатуры.

Причина: программное формирование запроса динамического списка

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

В результате процедура инициализации выполняет прямое присвоение вида:

СписокЗапасы.ТекстЗапроса = ПолучитьТекстЗапросаДинамическогоСписка();

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

Решение 1. Доработка программного кода формирования запроса

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

  1. Откроем модуль формы списка номенклатуры (ФормаСписка или ФормаВыбора).
  2. Найдем обработчик события ПриСозданииНаСервере и проследим цепочку вызовов процедур настройки списка (обычно используются методы с названиями НастроитьДинамическийСписок, СформироватьЗапросСписка или обращения к общим модулям работы с номенклатурой).
  3. Найдем место, где определяется исходный текст запроса или массив разрешенных полей, и добавим выборку новых реквизитов через обращение к полям основной таблицы справочника.

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


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

Решение 2. Сброс пользовательских настроек формы

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

Выполним сброс настроек в режиме 1С:Предприятие:

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

Важные свойства реквизитов динамического списка

При работе с динамическими списками полезно учитывать следующие параметры:

  1. Свойство «Использовать всегда»: Если добавленный реквизит требуется для программной обработки на клиенте (например, в процедуре СписокПриАктивизацииСтроки) или для условного оформления, но саму колонку выводить пользователю в таблицу не нужно, обязательно установите флаг Использовать всегда в свойствах поля списка в конфигураторе. В противном случае платформа в целях оптимизации не станет запрашивать это поле из базы данных.
  2. Явное приведение типов: Если новые реквизиты вычисляются через выражения или составные функции запроса, рекомендуется явно приводить их тип с помощью конструкции ВЫРАЗИТЬ(Поле КАК СТРОКА(300)). Это гарантирует корректную работу сортировки и отборов на стороне СУБД.

Альтернативный вариант: использование дополнительных реквизитов БСП

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

← На главную