При работе с типовой конфигурацией «Управление торговлей» редакции 10.3 на платформе 1С:Предприятие 8.3 (в режиме обычного приложения) разработчики и пользователи часто сталкиваются со специфическим поведением табличных частей. Одной из наиболее раздражающих проблем является невозможность скрыть стандартную колонку Номенклатура. Пользователь заходит в «Настройку списка», снимает флажок видимости, нажимает «ОК» — колонка исчезает. Однако при следующем открытии документа колонка Номенклатура снова оказывается на своем месте, игнорируя сохраненные настройки.
В этой статье мы подробно разберем, почему это происходит, как работают механизмы сохранения настроек в обычных формах и что нужно изменить в конфигураторе и программном коде, чтобы дать пользователю возможность управлять интерфейсом.
Для начала разберем, как платформа 1С взаимодействует с настройками пользователя. В обычных формах (в отличие от управляемых) за сохранение состояния колонок отвечает платформенный механизм, который записывает параметры (ширину, видимость, положение) в локальный кэш пользователя. Однако этот механизм работает не безусловно. Существуют настройки метаданных и программные прерывания, которые могут блокировать или перезаписывать эти данные.
Рассмотрим основные факторы, влияющие на «сброс» видимости:
Изменять настройку и Изменять видимость.ПриОткрытии или ПередОткрытием явно прописано ЭлементыФормы.Товары.Колонки.Номенклатура.Видимость = Истина;, любые пользовательские настройки будут проигнорированы.Первым делом проанализируем настройки объекта в конфигураторе. Откроем форму документа (например, «Реализация товаров и услуг»), найдем табличное поле Товары и перейдем в свойства колонки Номенклатура. Нас интересуют два флага в палитре свойств:
Изменять настройку (ChangeSetting): Если этот флаг снят, пользователь вообще не увидит колонку в диалоговом окне «Настройка списка». Она будет «заморожена» для изменений.
Изменять видимость (ChangeVisibility): Это критически важное свойство. Если оно установлено в значение Ложь, платформа позволит пользователю снять флажок в интерфейсе (если разрешено изменение настроек), но не сохранит это состояние. При перезапуске формы платформа увидит, что разработчик запретил менять видимость этого поля, и восстановит значение по умолчанию.
Решение: Убедимся, что для колонки Номенклатура установлены оба флага в значение Истина.
Даже если в конфигураторе все настройки верны, программный код имеет приоритет над пользовательскими установками. Разберем последовательность событий при открытии формы:
ПередОткрытием.ПриОткрытии.Если код, управляющий видимостью, находится в ПриОткрытии, он гарантированно «затрет» настройки пользователя. Проанализируем код модуля формы. Нам нужно найти все обращения к колонке. Выясним причину, почему свойство ИзменятьВидимость может принимать значение Ложь программно.
Часто в типовых решениях встречается код следующего вида:
Процедура ПриОткрытии()
// ... какой-то код ...
ЭлементыФормы.Товары.Колонки.Номенклатура.Видимость = Истина;
ЭлементыФормы.Товары.Колонки.Номенклатура.ИзменятьВидимость = Ложь;
КонецПроцедуры
Такой код принудительно блокирует возможность скрытия номенклатуры, так как это поле считается обязательным для бизнес-логики документа. Если мы хотим разрешить пользователю скрывать это поле (например, если выводится альтернативная колонка с расширенным наименованием), нам необходимо закомментировать данные строки или обернуть их в условие.
Если в модуле формы документа вы не нашли прямого обращения к видимости, стоит проверить общие модули. В УТ 10.3 управление видимостью часто выносится в специализированные процедуры, такие как РаботаСДиалогами.УстановитьВидимостьКолонок() или аналогичные. Рассмотрим ситуацию, когда видимость зависит от функциональных опций или прав доступа.
Посмотрим на пример поиска через замер производительности или глобальный поиск (Ctrl+Shift+F) по строке:
.Колонки.Номенклатура.Видимость
Если вы нашли вызов в общем модуле, не спешите его удалять. Проанализируйте, не нарушит ли это работу других документов. Лучшим решением будет добавить условие, проверяющее тип формы или конкретный документ.
Иногда возникает ситуация, когда код исправлен, свойства в конфигураторе заданы верно, но колонка все равно ведет себя непредсказуемо. Это может быть связано с «битым» кэшем настроек. Платформа 1С хранит настройки обычных форм в файлах с расширением .pfl в локальном профиле пользователя.
Для исправления ситуации выполним следующие действия:
Разберем подробнее, почему поле Номенклатура так защищено. В типовых решениях на это поле завязаны обработчики событий ПриИзменении. Если колонка скрыта программно (Видимость = Ложь), платформа иногда может оптимизировать работу и не инициализировать определенные механизмы связи данных. Однако, если пользователь скрывает колонку через «Настройку списка», данные в строке все равно присутствуют, просто они не отрисовываются.
Если вы заменяете типовую номенклатуру своей (например, Номенклатура_Аналог), убедитесь, что при заполнении вашей колонки данные в скрытую типовую колонку Номенклатура все равно попадают. В противном случае документ не проведется по регистрам, так как большинство движений в УТ 10.3 завязано именно на стандартное поле ссылки на справочник Номенклатура.
Подведем итог. Чтобы кнопка «Настройка списка» корректно сохраняла видимость:
Изменять видимость = Истина в свойствах колонки в конфигураторе.ПриОткрытии и ПередОткрытием нет жесткой установки Видимость = Истина.ИзменятьВидимость = Ложь, и закомментируйте её.После выполнения этих шагов платформа начнет корректно записывать выбор пользователя в файл настроек и восстанавливать его при каждом открытии документа.