Почему в УТ 10.3 не сохраняется видимость колонки Номенклатура после настройки списка?

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

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

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

Анализ механизма управления видимостью в обычных формах

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

Рассмотрим основные факторы, влияющие на «сброс» видимости:

  1. Свойства колонки в конфигураторе: У каждой колонки табличного поля есть специфические свойства: Изменять настройку и Изменять видимость.
  2. Программная установка видимости: Если в модуле формы в процедурах ПриОткрытии или ПередОткрытием явно прописано ЭлементыФормы.Товары.Колонки.Номенклатура.Видимость = Истина;, любые пользовательские настройки будут проигнорированы.
  3. Общие модули управления интерфейсом: В типовой УТ 10.3 часто используются вызовы общих процедур (например, для настройки прав доступа или видимости в зависимости от типа операции), которые принудительно включают критически важные поля.

Шаг 1: Проверка свойств колонки в конфигураторе

Первым делом проанализируем настройки объекта в конфигураторе. Откроем форму документа (например, «Реализация товаров и услуг»), найдем табличное поле Товары и перейдем в свойства колонки Номенклатура. Нас интересуют два флага в палитре свойств:

Изменять настройку (ChangeSetting): Если этот флаг снят, пользователь вообще не увидит колонку в диалоговом окне «Настройка списка». Она будет «заморожена» для изменений.

Изменять видимость (ChangeVisibility): Это критически важное свойство. Если оно установлено в значение Ложь, платформа позволит пользователю снять флажок в интерфейсе (если разрешено изменение настроек), но не сохранит это состояние. При перезапуске формы платформа увидит, что разработчик запретил менять видимость этого поля, и восстановит значение по умолчанию.

Решение: Убедимся, что для колонки Номенклатура установлены оба флага в значение Истина.

Шаг 2: Программный аудит событий формы

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

  1. Выполняется процедура ПередОткрытием.
  2. Платформа восстанавливает сохраненные настройки пользователя (ширину, видимость колонок).
  3. Выполняется процедура ПриОткрытии.

Если код, управляющий видимостью, находится в ПриОткрытии, он гарантированно «затрет» настройки пользователя. Проанализируем код модуля формы. Нам нужно найти все обращения к колонке. Выясним причину, почему свойство ИзменятьВидимость может принимать значение Ложь программно.

Часто в типовых решениях встречается код следующего вида:


Процедура ПриОткрытии()
    // ... какой-то код ...
    ЭлементыФормы.Товары.Колонки.Номенклатура.Видимость = Истина;
    ЭлементыФормы.Товары.Колонки.Номенклатура.ИзменятьВидимость = Ложь;
КонецПроцедуры

Такой код принудительно блокирует возможность скрытия номенклатуры, так как это поле считается обязательным для бизнес-логики документа. Если мы хотим разрешить пользователю скрывать это поле (например, если выводится альтернативная колонка с расширенным наименованием), нам необходимо закомментировать данные строки или обернуть их в условие.

Шаг 3: Глобальный поиск по конфигурации

Если в модуле формы документа вы не нашли прямого обращения к видимости, стоит проверить общие модули. В УТ 10.3 управление видимостью часто выносится в специализированные процедуры, такие как РаботаСДиалогами.УстановитьВидимостьКолонок() или аналогичные. Рассмотрим ситуацию, когда видимость зависит от функциональных опций или прав доступа.

Посмотрим на пример поиска через замер производительности или глобальный поиск (Ctrl+Shift+F) по строке:

.Колонки.Номенклатура.Видимость

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

Шаг 4: Очистка кэша настроек

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

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

  1. Откроем документ в режиме «1С:Предприятие».
  2. Нажмем правой кнопкой мыши на табличную часть — «Настройка списка».
  3. Нажмем кнопку «Стандартная настройка». Это сбросит текущие настройки для данного пользователя и заставит платформу создать их заново на основе актуальных метаданных конфигуратора.

Важное замечание о логике 1С

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

Если вы заменяете типовую номенклатуру своей (например, Номенклатура_Аналог), убедитесь, что при заполнении вашей колонки данные в скрытую типовую колонку Номенклатура все равно попадают. В противном случае документ не проведется по регистрам, так как большинство движений в УТ 10.3 завязано именно на стандартное поле ссылки на справочник Номенклатура.

Итог решения задачи

Подведем итог. Чтобы кнопка «Настройка списка» корректно сохраняла видимость:

  1. Установите Изменять видимость = Истина в свойствах колонки в конфигураторе.
  2. Убедитесь, что в процедурах ПриОткрытии и ПередОткрытием нет жесткой установки Видимость = Истина.
  3. Если используется типовой механизм управления интерфейсом, найдите строку кода, которая принудительно устанавливает свойство ИзменятьВидимость = Ложь, и закомментируйте её.

После выполнения этих шагов платформа начнет корректно записывать выбор пользователя в файл настроек и восстанавливать его при каждом открытии документа.

← На главную