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