При разработке и администрировании систем на платформе 1С:Предприятие (особенно при работе с обычными формами и классическим интерфейсом) разработчики часто сталкиваются с неприятной ситуацией: новый интерфейс создан в Конфигураторе, права доступа в ролях настроены, пользователю интерфейс назначен, но при запуске клиентского приложения перед пользователем открывается пустое окно без панели меню или со стандартным набором системных команд.
Эта проблема способна отнять немало времени, так как причин ее возникновения может быть несколько — от неочевидных платформенных свойств до программного переключения интерфейсов в коде конфигурации. В этой статье мы подробно разберем, почему скрывается интерфейс пользователя в 1С, и изучим пошаговые методики решения этой задачи.
В обычных формах 1С реализован важный механизм взаимодействия нескольких интерфейсов — принцип их автосложения. Если у пользователя настроено несколько ролей, платформа пытается объединить доступные ему командные панели. Ключевую роль в этом процессе играет свойство интерфейса «Переключаемый».
Выясним причину, почему это свойство может скрывать интерфейс:
Рассмотрим по шагам, как решить эту проблему:
Если специфика вашей конфигурации требует, чтобы интерфейс оставался именно переключаемым (например, в крупных корпоративных базах типа УПП или Комплексной автоматизации), то пользователь должен иметь физическую возможность его активировать. По умолчанию платформа не выведет этот интерфейс, пока вы явно не добавите его в общее меню переключения.
Разберем, как устроен этот механизм на примере типовых конфигураций:
В большинстве баз на обычных формах существует так называемый Общий интерфейс (обычно он называется Общий или ГлавныйИнтерфейс). В этом интерфейсе присутствует специальное подменю «Переключить интерфейс». Чтобы ваш новый интерфейс стал доступен пользователю:
Только после выполнения этих действий переключаемый интерфейс появится в списке доступных для ручной активации.
Иногда разработчики сталкиваются с тем, что все настройки прав и свойств выставлены верно, но платформа упорно игнорирует интерфейс. Это может быть связано со сбоем внутреннего кэша СУБД или платформы (особенно на релизах платформы семейства 8.3.13 и аналогичных), когда нарушаются внутренние XML-описания структуры меню.
В таком случае отлично помогает практический прием — пересоздание интерфейса через копирование. Проанализируем алгоритм действий:
Ctrl + C / Ctrl + V или через контекстное меню).Этот способ позволяет платформе заново сгенерировать корректную структуру дескрипторов меню в базе данных, минуя накопленные ошибки кэширования старого интерфейса.
Очень распространенная техническая ошибка, о которой часто забывают разработчики, — несоответствие используемого клиентского приложения. Классические интерфейсы, созданные в ветке метаданных «Интерфейсы», физически могут отображаться только в режиме Толстого клиента (Обычное приложение).
Посмотрим на ситуацию: если пользователь запускает информационную базу через Тонкий клиент или веб-клиент, платформа пытается интерпретировать интерфейс под управляемые формы. В результате обычный интерфейс полностью игнорируется, и перед пользователем предстает пустое окно.
Проанализируем шаги для проверки режима запуска:
В крупных типовых конфигурациях (УПП, КА, УТ 10.3) управление интерфейсом часто делегировано программному коду. Платформа честно пытается применить назначенный вами интерфейс при старте, но в модуле обычного приложения срабатывает процедура ПриНачалеРаботыСистемы, которая принудительно переключает интерфейс на тот, что записан в персональных настройках пользователя в режиме Предприятия.
Рассмотрим пример типичного кода, управляющего этим процессом:
Процедура ПриНачалеРаботыСистемы()
// Платформа считывает настройки конкретного пользователя из справочника или регистра сведений
ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;
ОсновнойИнтерфейс = НастройкиПользователей.ПолучитьОсновнойИнтерфейс(ТекущийПользователь);
Если ЗначениеЗаполнено(ОсновнойИнтерфейс) Тогда
Попытка
// Происходит программный сброс назначенного в Конфигураторе интерфейса
ГлавныйИнтерфейс.ПереключитьИнтерфейс(ОсновнойИнтерфейс);
Исключение
ЗаписьЖурналаРегистрации("Интерфейс", УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Если в вашей системе присутствует подобная логика, то любые изменения в Конфигураторе будут нивелироваться кодом. Чтобы решить эту проблему:
Бывают случаи, когда пользователь случайно скрыл панель инструментов главного меню программы вручную. Платформа 1С сохраняет эти визуальные настройки индивидуально для каждого пользователя в базе данных или в локальном профиле операционной системы в файлах с расширением .pfl.
Обычная очистка кэша конфигурации здесь не поможет, так как настройки расположения окон привязаны к конкретному имени пользователя информационной базы. Проанализируем, как сбросить эти настройки:
Процедура СброситьНастройкиИнтерфейсаПользователя(ИмяПользователя)
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ <> Неопределено Тогда
// Очищаем сохраненные системные настройки окон и панелей
СистемныеНастройки.Очистить(ПользовательИБ);
Сообщить("Визуальные настройки для пользователя " + ИмяПользователя + " успешно сброшены.");
КонецЕсли;
КонецПроцедуры
Для того чтобы гарантировать отображение нового интерфейса у пользователя в 1С на обычных формах, всегда проверяйте три главных фактора: отключение свойства «Переключаемый» в палитре свойств интерфейса, использование режима запуска «Толстый клиент» и отсутствие программного переопределения интерфейсов в персональных настройках пользователя внутри режима Предприятия. Сочетание этих методов позволяет быстро локализовать и устранить проблему отображения панели меню.