Почему у разных пользователей в 1С отличается видимость колонок и как это исправить?

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

Приветствуем вас, уважаемые коллеги! При разработке и поддержке конфигураций на платформе «1С:Предприятие» (особенно это касается систем на обычных формах, таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» или «Бухгалтерия предприятия 2.0») разработчики часто сталкиваются с загадочным поведением интерфейса. Типичный сценарий: вы вносите изменения в конфигураторе, скрывая определенную колонку в табличной части или табличном поле (например, в обработке подбора номенклатуры), проверяете работу под своими правами — всё отлично. Однако на следующий день пользователи начинают жаловаться, что у них эта колонка по-прежнему отображается.

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

Выясняем причину: почему настройки конфигуратора игнорируются?

Первопричина такого поведения кроется в штатном механизме платформы «1С:Предприятие» по автоматическому сохранению и восстановлению настроек внешнего вида табличных полей. Платформа заботится о пользователях и позволяет им настраивать интерфейс «под себя»: менять ширину колонок, сдвигать их, изменять видимость и порядок вывода. Все эти персональные изменения автоматически сохраняются в локальном кэше пользователя на его рабочей машине (или в системных таблицах базы данных при клиент-серверном варианте работы).

Когда пользователь открывает форму, платформа выполняет следующую последовательность действий:

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

Именно поэтому возникает ситуация, когда у администратора (или нового тестового пользователя), который редко открывает данную форму, колонка скрыта согласно конфигуратору. А у активных менеджеров, ежедневно работающих с подбором номенклатуры, колонка ОстатокОрганизации остается видимой, так как в их локальном профиле сохранен старый вариант отображения таблицы, где эта колонка была активна.

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

Способ 1. Отключение свойства «Изменять видимость» в конфигураторе (Рекомендуемый)

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

Разберем по шагам, как это сделать:

  1. Откроем Конфигуратор и найдем нужную форму (в нашем примере это обработка ПодборНоменклатуры, форма ОсновнаяФорма).
  2. Перейдем к свойствам табличного поля СправочникНоменклатура и откроем список его колонок.
  3. Найдем проблемную колонку ОстатокОрганизации и откроем палитру ее свойств.
  4. Установим свойство «Видимость» в значение Ложь (снимаем соответствующий флажок).
  5. Найдем свойство «Изменять видимость» (в некоторых версиях платформы оно может называться «Изменять настройку») и также установим его в значение Ложь.

Как это работает: Установив флаг «Изменять видимость» в значение Ложь, мы даем платформе прямой запрет на сохранение и восстановление состояния видимости для этого конкретного реквизита. Платформа больше не будет перезаписывать это свойство из пользовательского кэша, и колонка гарантированно скроется у всех пользователей без исключения. Более того, пользователи не смогут вручную включить её через контекстное меню «Настройка списка».

Способ 2. Принудительное программное управление видимостью при открытии

Иногда бизнес-логика требует более гибкого подхода. Например, если нам нужно скрыть колонку ОстатокОрганизации, но оставить видимой колонку СвободныйОстаток, причем управление видимостью должно зависеть от определенных условий (прав доступа, роли пользователя или интерактивных флажков на форме).

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

Поэтому программное управление видимостью необходимо размещать в обработчике события ПриОткрытии. Давайте посмотрим на пример правильной реализации:


Процедура ПриОткрытии()
    
    // Принудительно отключаем видимость колонки, переопределяя кэш пользователя
    ЭлементыФормы.СправочникНоменклатура.Колонки.ОстатокОрганизации.Видимость = Ложь;
    
    // Если в форме используется интерактивный флаг "ПоказыватьОстатки"
    Если ПоказыватьОстатки Тогда
        ЭлементыФормы.СправочникНоменклатура.Колонки.СвободныйОстаток.Видимость = Истина;
    Иначе
        ЭлементыФормы.СправочникНоменклатура.Колонки.СвободныйОстаток.Видимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Проанализируем ситуацию: данный код сработает уже после того, как платформа восстановила пользовательские настройки формы из локального кэша. Наш явный вызов ЭлементыФормы.СправочникНоменклатура.Колонки.ОстатокОрганизации.Видимость = Ложь; жестко переопределит значение свойства, сделав колонку невидимой для любого зашедшего пользователя, независимо от его истории работы с формой.

Способ 3. Сброс настроек интерфейса на стороне пользователей

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

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

Вариант А: Интерактивный (выполняет сам пользователь)

  1. Зайти в режиме «1С:Предприятие» под учетной записью пользователя, у которого наблюдается проблема.
  2. Открыть форму подбора номенклатуры.
  3. Нажать правой кнопкой мыши на табличное поле СправочникНоменклатура и выбрать пункт контекстного меню «Настройка списка...».
  4. В открывшемся окне нажать кнопку «Стандартная настройка» (или кнопку «Установить стандартные настройки» в зависимости от релиза платформы).
  5. Нажать «ОК» для сохранения изменений. Настройки формы сбросятся к первоначальному состоянию из конфигуратора, и колонка скроется.

Вариант Б: Административный (выполняет программист/администратор базы данных)

Если пользователей очень много, обходить каждого физически не имеет смысла. Администратор может централизованно очистить сохраненные настройки пользователей через стандартный интерфейс:

  1. Перейти в меню Сервис -> Настройки пользователя -> Очистка настроек (или через администрирование пользователей в режиме «1С:Предприятие»).
  2. Выбрать нужных пользователей (например, группу «Менеджеры»).
  3. Найти в списке сохраняемых настроек форму подбора номенклатуры и удалить по ней записи. При следующем запуске у всех выбранных пользователей настройки формы инициализируются строго по конфигуратору.

Резюме

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

← На главную