Почему не отображается новое поле в форме списка «Сотрудники» через расширение и как это исправить?

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

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

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

Разберем структуру динамического списка

Первым делом нам необходимо проанализировать, как именно построена форма списка в 1С:ЗУП. В этой конфигурации форма списка сотрудников — это не просто таблица, отображающая данные справочника. Это сложный ДинамическийСписок, который зачастую использует произвольный запрос.

Рассмотрим порядок проверки настроек списка в расширении:

  1. Откроем форму списка справочника Сотрудники в расширении.
  2. Перейдем к реквизитам формы и найдем основной реквизит Список (тип ДинамическийСписок).
  3. Проверим свойство «Настройка списка». Если в поле «Текст запроса» прописан программный код SQL-подобного языка 1С, нам нужно убедиться, что наше новое поле включено в секцию ВЫБРАТЬ.
  4. Обратим внимание на флаг «Автозаполнение». Если этот флаг снят, платформа не будет автоматически подтягивать новые поля из объекта в список. В этом случае нам придется вручную добавить поле в текст запроса расширения:

ВЫБРАТЬ
    СправочникСотрудники.Ссылка КАК Ссылка,
    СправочникСотрудники.Код КАК Код,
    СправочникСотрудники.Наименование КАК Наименование,
    СправочникСотрудники.МойНовыйРеквизитИзРасширения КАК МойНовыйРеквизитИзРасширения
ИЗ
    Справочник.Сотрудники КАК СправочникСотрудники

Проанализируем путь к данным и элементы формы

Даже если поле присутствует в запросе динамического списка, оно должно быть правильно привязано к элементам интерфейса. Выясним причину возможного разрыва связи:

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

Проверим роли и права доступа

Это одна из самых распространенных «невидимых» причин. В 1С, если у пользователя нет прав на просмотр конкретного реквизита, система скрывает колонку в динамическом списке без каких-либо предупреждений. При этом в обычных формах объектов поле может быть доступно.

Выполним следующие действия в расширении:

  1. Проверим, создана ли в расширении отдельная Роль, дающая право на чтение и просмотр нового реквизита.
  2. Если вы используете типовые роли, убедитесь, что в расширении они «заимствованы» и в них проставлены галочки напротив вашего поля.
  3. Не забудьте назначить эту роль пользователю или добавить её в соответствующий профиль групп доступа. Без явного указания прав в расширении, колонка будет пустой или скрытой.

Выясним влияние программного кода (ПриСозданииНаСервере)

В конфигурации ЗУП КОРП формы списков часто модифицируются программно. Разработчики используют общие модули для динамической настройки колонок в зависимости от учетной политики или функциональных опций. Проанализируем ситуацию в модуле формы:

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


&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    ЭлементКолонка = Элементы.Найти("СписокМойНовыйРеквизит");
    Если ЭлементКолонка <> Неопределено Тогда
        ЭлементКолонка.Видимость = Истина;
    КонецЕсли;
КонецПроцедуры

Функциональные опции и режим совместимости

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

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

Сброс кэша и настроек пользователя

Если все настройки верны, но колонки все равно нет, это может быть следствием кэширования настроек формы. Рассмотрим шаги по очистке:

  1. В режиме «1С:Предприятие» откройте форму списка, нажмите «Ещё» — «Изменить форму». В открывшемся окне выберите «Ещё» — «Установить стандартные настройки».
  2. Если это не помогло, попробуйте запустить 1С с параметром /ClearCache.
  3. В крайнем случае, можно попробовать удалить форму из расширения и заимствовать её повторно, аккуратно перенеся изменения. Иногда это помогает исправить внутренние ошибки сопоставления идентификаторов формы.

Таким образом, последовательно проверяя текст запроса динамического списка, права доступа и программные механизмы ЗУП, мы можем добиться корректного отображения любых пользовательских данных в списке сотрудников.

← На главную