В процессе настройки рабочего места кассира (РМК) в конфигурации "1С:Управление торговлей 11" (УТ 11) программисты часто сталкиваются с тем, что стандартные колонки таблицы товаров — такие как Номер строки, Сумма или Единица измерения — не отображаются на форме. Даже под учетной записью администратора с полными правами и при сбросе настроек формы до стандартных эти поля остаются скрытыми. Проанализируем причины такого поведения системы и разберем по шагам, как вернуть необходимые колонки в интерфейс.
Основная причина проблемы кроется в архитектуре управляемой платформы "1С:Предприятие 8.3". В свойствах любого элемента формы (поля, колонки, группы) существуют два принципиально разных параметра, которые часто путают. Рассмотрим их подробнее:
Видимость = Ложь, элемент не будет отрисован, но его данные могут передаваться между сервером и клиентом.Проанализируем ситуацию: если вы в отладчике видите, что Элементы.ТоварыНомерСтроки.Видимость = Истина, но колонки на экране нет, значит, для нее отключена именно Пользовательская видимость. В типовом решении УТ 11 разработчики намеренно отключают эти колонки в дизайнере формы, чтобы упростить интерфейс РМК "из коробки", предполагая, что кассиру лишняя информация не нужна.
Наиболее правильным и безопасным методом включения колонок является использование механизма расширений. Это позволит нам не снимать основную конфигурацию с поддержки и сохранить возможность автоматического обновления. Разберем алгоритм действий:
Документ.ЧекККМ.Форма.ФормаДокументаРМК).ТоварыНомерСтроки).Важный момент: После применения расширения изменения могут не отобразиться мгновенно у тех пользователей, которые уже работали в программе. Это связано с кэшированием настроек формы в системных хранилищах.
Иногда требуется управлять видимостью динамически. Однако важно помнить, что свойство ПользовательскаяВидимость нельзя изменить напрямую программно в коде "в один клик" так же легко, как обычную Видимость. Но мы можем воздействовать на пользовательские настройки формы. Посмотрим на пример того, как система хранит настройки:
Рассмотрим ситуацию, когда нам нужно принудительно сбросить настройки или программно установить параметры. Мы можем обратиться к хранилищу общих настроек. Выясним причину, по которой обычный "Сброс до стандартных" не помогает: он возвращает форму к тому состоянию, которое прописано в конфигураторе. Если в конфигураторе (или в расширении) "Пользовательская видимость" выключена, то и после сброса она останется выключенной.
Для полной очистки настроек формы у конкретного пользователя можно использовать следующий код (выполняется на сервере):
Процедура ОчиститьНастройкиФормыРМК(ИмяПользователя)
КлючОбъекта = "Документ.ЧекККМ.Форма.ФормаДокументаРМК/НастройкиФормы";
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);
КонецПроцедуры
Выясним, зачем разработчики типовых решений используют именно этот механизм. Когда мы отключаем "Пользовательскую видимость", платформа оптимизирует передачу данных. Элемент, скрытый таким образом:
В случае с РМК это критично для производительности на слабых компьютерах кассиров и мониторах с низким разрешением.
Прежде чем приступать к правке формы, обязательно проверим настройки системы. Например, видимость колонки Единица измерения (или Упаковка) в УТ 11 напрямую зависит от функциональной опции ИспользоватьУпаковкиНоменклатуры. Если эта опция выключена в "НСИ и администрирование", колонка будет скрыта программно в процедуре ПриСозданииНаСервере или через механизм функциональных опций самой платформы, даже если вы включите все галочки видимости в расширении.
Проанализируем процедуру инициализации в модуле формы. Часто там можно встретить подобный код:
// Пример логики в типовом РМК
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
Элементы.ТоварыУпаковка.Видимость = Ложь;
КонецЕсли;
Если вы хотите переопределить это поведение, вам придется в расширении создать метод-обертку (после выполнения основной процедуры):
&НаСервере
&После("ПриСозданииНаСервере")
Процедура После_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Принудительно возвращаем колонку, даже если ФО отключена
Элементы.ТоварыНомерСтроки.Видимость = Истина;
// Но помните про Пользовательскую Видимость в свойствах элемента!
КонецПроцедуры
Завершая разбор, обратим внимание на важный аспект, упомянутый в дискуссии — культуру кода. При изменении видимости элементов через "галочки" в расширении, обязательно оставляйте комментарии в модуле формы или в описании расширения. Будущий программист, который придет сопровождать вашу базу, может потратить много времени на поиски причин появления колонки, если она включена интерактивно в дизайнере расширения, а не программно. Хорошим тоном считается дублирование критически важных настроек интерфейса в коде метода ПриСозданииНаСервере, чтобы намерения разработчика были прозрачны при чтении текста модуля.