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