Как настроить и сохранить меню «Главное» в 1С при обновлениях?

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

Разработчики типовых решений на платформе «1С:Предприятие 8» часто сталкиваются с ситуацией, когда клиенту требуется индивидуальная настройка интерфейса. Одно из наиболее частых пожеланий — кастомизация раздела «Главное». Пользователи хотят видеть там определенный набор документов, отчетов и обработок (например, сократить всё до 8–10 ключевых пунктов), чтобы не блуждать по многочисленным стандартным разделам конфигурации.

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

Метод 1. Сохранение ручных настроек через сравнение и объединение (Без кода)

Если меню «Главное» уже было настроено вручную непосредственно в конфигураторе основной базы, его необязательно пересобирать заново при каждом накатывании нового релиза. Платформа «1С:Предприятие» позволяет гибко управлять объединением свойств интерфейса.

Проанализируем по шагам процесс обновления в этом случае:

  1. При обновлении конфигурации через поддержку или файл поставки (cf-файл) откройте окно «Сравнение и объединение конфигураций».
  2. В дереве метаданных найдите самый верхний корневой элемент (свойства конфигурации).
  3. Разверните свойства и найдите строку «Командный интерфейс основного раздела». Она отвечает за состав и порядок элементов в меню «Главное».
  4. Чтобы ваши кастомные настройки не затерлись типовыми настройками из файла обновления, снимите флажок с этого свойства. Альтернативный вариант — нажмите правой кнопкой мыши по свойству и выберите режим «Взять из основной конфигурации».
  5. Выполните объединение. Ваши настройки главного меню останутся нетронутыми.

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

Метод 2. Использование расширений конфигурации (Рекомендуемый современный подход)

Использование расширений — наиболее «чистый» способ кастомизации интерфейса, не требующий изменения основной конфигурации. Это позволяет оставить основную конфигурацию полностью на замке (на поддержке без возможности изменения), что значительно упрощает и удешевляет процесс обновления.

Разберем, как кастомизировать главное меню с помощью расширения:

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

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

Метод 3. Программная альтернатива — Собственная «Начальная страница»

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

Выясним, как реализовать этот механизм программно:

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

Рассмотрим пример кода, который считывает настройки интерфейса из регистра сведений и программно строит меню на форме в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Считаем настройки меню для текущего пользователя
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   НастройкиИнтерфейса.ИмяКоманды КАК ИмяКоманды,
        |   НастройкиИнтерфейса.Заголовок КАК Заголовок,
        |   НастройкиИнтерфейса.НавигационнаяСсылка КАК НавигационнаяСсылка
        |ИЗ
        |   РегистрСведений.НастройкиИнтерфейсаПользователей КАК НастройкиИнтерфейса
        |ГДЕ
        |   НастройкиИнтерфейса.Пользователь = &ТекущийПользователь";
        
    Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиИнформационнойБазы.ТекущийПользователь());
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        
        // Создаем группу для размещения кнопок меню
        ГруппаМеню = Элементы.Добавить("ГруппаКастомноеМеню", Тип("ГруппаФормы"), ЭтаФорма);
        ГруппаМеню.Вид = ВидГруппыФормы.ОбычнаяГруппа;
        ГруппаМеню.Отображение = ОтображениеОбычнойГруппы.Нет;
        ГруппаМеню.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
        
        Пока Выборка.Следующий() Цикл
            // Программно создаем кнопку на форме для каждого пункта меню
            ИмяКнопки = "Кнопка_" + Выборка.ИмяКоманды;
            НоваяКнопка = Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"), ГруппаМеню);
            НоваяКнопка.Заголовок = Выборка.Заголовок;
            НоваяКнопка.ИмяКоманды = "ВыполнитьПереход";
            
            // Сохраняем навигационную ссылку во внутренний массив для последующего перехода
            // (можно использовать параметры кнопки или структуру на сервере)
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

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

Метод 4. Программное управление видимостью через Функциональные опции (ФО)

Если все 8 пунктов меню, которые хочет видеть клиент в разделе «Главное», соответствуют стандартным объектам конфигурации, мы можем управлять их видимостью с помощью механизма Функциональных опций. Этот метод позволяет программно скрывать лишнее и показывать только нужное.

Проанализируем ситуацию и настроим этот механизм:

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

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


// Установка значения функциональной опции для текущего сеанса
ПараметрыФО = Новый Структура("Пользователь", Пользователи.ТекущийПользователь());
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыФО);

// Принудительное обновление командного интерфейса на клиенте
ОбновитьИнтерфейс();

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

Метод 5. Настройка интерфейса через «Хранилище Системных Настроек»

Еще один профессиональный способ «придавить» лишние разделы и настроить состав главного меню под конкретного пользователя без изменения метаданных — использование объекта НастройкиИнтерфейсаКлиентскогоПриложения.

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


Процедура НастроитьИнтерфейсПользователя(ИмяПользователя) Экспорт
    
    Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
    
    // Здесь мы можем программно определить состав видимых разделов, 
    // отключить отображение ненужных стандартных панелей 
    // и оставить для пользователя только раздел "Главное".
    
    // Сохраняем настройки в системное хранилище для конкретного пользователя
    ХранилищеСистемныхНастроек.Сохранить(
        "Общее/НастройкиИнтерфейсаКлиентскогоПриложения", 
        "", 
        Настройки, 
        , 
        ИмяПользователя
    );
    
КонецПроцедуры

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

Резюме и рекомендации

Мы подробно разобрали пять различных подходов к решению проблемы кастомизации меню «Главное». Какой из них выбрать?

← На главную