Как сделать видимыми стандартные колонки в РМК УТ 11: инструкция по управлению видимостью

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

В процессе настройки рабочего места кассира (РМК) в конфигурации "1С:Управление торговлей 11" (УТ 11) программисты часто сталкиваются с тем, что стандартные колонки таблицы товаров — такие как Номер строки, Сумма или Единица измерения — не отображаются на форме. Даже под учетной записью администратора с полными правами и при сбросе настроек формы до стандартных эти поля остаются скрытыми. Проанализируем причины такого поведения системы и разберем по шагам, как вернуть необходимые колонки в интерфейс.

Различие между свойствами Видимость и Пользовательская видимость

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

  1. Видимость (Visibility): Это свойство определяет, доступен ли элемент на форме в принципе. Если в коде или в конфигураторе установлена Видимость = Ложь, элемент не будет отрисован, но его данные могут передаваться между сервером и клиентом.
  2. Пользовательская видимость (User Visibility): Это более "сильное" свойство. Оно позволяет задать видимость элемента в разрезе конкретных ролей пользователей. Если для определенной роли (или для всех ролей) галочка "Пользовательская видимость" снята, то элемент не просто скрывается — он исключается из состава доступных полей формы для этого пользователя.

Проанализируем ситуацию: если вы в отладчике видите, что Элементы.ТоварыНомерСтроки.Видимость = Истина, но колонки на экране нет, значит, для нее отключена именно Пользовательская видимость. В типовом решении УТ 11 разработчики намеренно отключают эти колонки в дизайнере формы, чтобы упростить интерфейс РМК "из коробки", предполагая, что кассиру лишняя информация не нужна.

Решение проблемы через расширение конфигурации

Наиболее правильным и безопасным методом включения колонок является использование механизма расширений. Это позволит нам не снимать основную конфигурацию с поддержки и сохранить возможность автоматического обновления. Разберем алгоритм действий:

  1. Создадим новое расширение или используем существующее.
  2. Найдем в основной конфигурации форму документа ЧекККМ (обычно это Документ.ЧекККМ.Форма.ФормаДокументаРМК).
  3. Добавим эту форму в наше расширение.
  4. В редакторе формы расширения найдем нужную колонку в дереве элементов (например, ТоварыНомерСтроки).
  5. В палитре свойств найдем строку Пользовательская видимость и нажмем на кнопку с лупой (открыть диалог настройки).
  6. В открывшемся окне установим флажки напротив нужных ролей (или в колонке "Видимость" для всех ролей сразу).

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

Программное управление пользовательской настройкой

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

Рассмотрим ситуацию, когда нам нужно принудительно сбросить настройки или программно установить параметры. Мы можем обратиться к хранилищу общих настроек. Выясним причину, по которой обычный "Сброс до стандартных" не помогает: он возвращает форму к тому состоянию, которое прописано в конфигураторе. Если в конфигураторе (или в расширении) "Пользовательская видимость" выключена, то и после сброса она останется выключенной.

Для полной очистки настроек формы у конкретного пользователя можно использовать следующий код (выполняется на сервере):


Процедура ОчиститьНастройкиФормыРМК(ИмяПользователя)
    КлючОбъекта = "Документ.ЧекККМ.Форма.ФормаДокументаРМК/НастройкиФормы";
    ХранилищеОбщихНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
КонецПроцедуры

Почему 1С скрывает колонки: технический аспект

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

В случае с РМК это критично для производительности на слабых компьютерах кассиров и мониторах с низким разрешением.

Влияние функциональных опций

Прежде чем приступать к правке формы, обязательно проверим настройки системы. Например, видимость колонки Единица измерения (или Упаковка) в УТ 11 напрямую зависит от функциональной опции ИспользоватьУпаковкиНоменклатуры. Если эта опция выключена в "НСИ и администрирование", колонка будет скрыта программно в процедуре ПриСозданииНаСервере или через механизм функциональных опций самой платформы, даже если вы включите все галочки видимости в расширении.

Проанализируем процедуру инициализации в модуле формы. Часто там можно встретить подобный код:


// Пример логики в типовом РМК
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
    Элементы.ТоварыУпаковка.Видимость = Ложь;
КонецЕсли;

Если вы хотите переопределить это поведение, вам придется в расширении создать метод-обертку (после выполнения основной процедуры):


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

Культура разработки и сопровождение

Завершая разбор, обратим внимание на важный аспект, упомянутый в дискуссии — культуру кода. При изменении видимости элементов через "галочки" в расширении, обязательно оставляйте комментарии в модуле формы или в описании расширения. Будущий программист, который придет сопровождать вашу базу, может потратить много времени на поиски причин появления колонки, если она включена интерактивно в дизайнере расширения, а не программно. Хорошим тоном считается дублирование критически важных настроек интерфейса в коде метода ПриСозданииНаСервере, чтобы намерения разработчика были прозрачны при чтении текста модуля.

← На главную