Новая команда в интерфейсе 1С: от конфигуратора до расширения
Содержание
В 1С 8.3 с интерфейсом «Такси» нет меню в старом понимании. Есть разделы в панели сверху и команды внутри каждого раздела. Чтобы добавить пункт, нужно создать команду и поставить её в нужную подсистему в конфигураторе. Для пользователя без доступа к конфигуратору есть два обходных пути: внешняя обработка и личные настройки.
Разработчику хватит десяти минут, если он понимает, где живёт команда: в самом объекте или в общих командах. Ниже — полный путь от выбора способа до проверки результата и типовых промахов.
Как устроена навигация: подсистемы, группы и команды
Всё, что пользователь видит в верхней панели и в левой колонке раздела, собирается из трёх сущностей.
- Подсистема — раздел верхнего уровня («Продажи», «Банк и касса»). Вложенные подсистемы дают подразделы.
- Группа команд — место в окне раздела: панель навигации (слева), панель действий (сверху). Есть и стандартные группы вроде «Создать», «Отчёты», «Сервис».
- Команда — то, что нажимается. У неё есть обработчик: открыть форму, выполнить процедуру, запустить отчёт.
Команды бывают двух видов, и от выбора зависит дальнейший путь:
| Вид команды | Где создаётся | Когда подходит |
|---|---|---|
| Команда объекта | В дереве: объект → «Команды» | Действие относится к одному справочнику, документу, отчёту. Параметр — ссылка на объект |
| Общая команда | Ветка «Общие» → «Общие команды» | Действие не привязано к объекту или должно появляться у многих типов сразу |
| Команда формы | В редакторе формы, закладка «Команды» | Кнопка внутри конкретной формы, в разделы не попадает |
Пункт в разделе («в меню») создают из команды объекта или из общей команды. Команда формы в разделе не появится: она живёт только в форме.
Подготовка: что проверить перед правкой в конфигураторе
Правка типовой конфигурации на поддержке меняет её состояние. Конфигуратор спросит, включать ли возможность изменения. После этого каждое обновление релиза потребует объединения ваших правок с новыми. Поэтому сначала решите, подходит ли способ.
- Определите, что именно добавляется: открытие формы, запуск обработки, отчёт.
- Посмотрите, поставлена ли конфигурация на поддержку:
Конфигурация → Поддержка → Настройка поддержки. - Если конфигурация типовая, а обновления вы ставите, выбирайте расширение (отдельный раздел ниже). Свою собственную конфигурацию без поддержки можно править напрямую.
- Сделайте выгрузку информационной базы в
.dtили копию каталога файловой базы. Правка конфигурации обычно безопасна, но откат из резервной копии надёжнее, чем память о десятке мелких изменений. - Если базу обновляют в рабочее время, предупредите пользователей: при обновлении конфигурации базы данных сеансы завершаются.
Правьте конфигурацию на копии базы. Рабочую базу обновляйте после проверки, в нерабочее время: при обновлении конфигурации базы данных другие сеансы будут отключены.
Пошагово: создаём команду и ставим её в подсистему
Разберём самый частый случай — общую команду, которая открывает форму существующей обработки.
Шаг 1. Создайте общую команду
- Откройте конфигурацию в режиме «Конфигуратор».
- В дереве метаданных разверните
Общие, затемОбщие команды. Правой кнопкой —Добавить. - Задайте имя без пробелов, например
ОткрытьСверкуВручную. Синоним — это то, что увидит пользователь. Пишите его по-человечески: «Сверка вручную». - Откройте закладку со свойствами команды и заполните ключевые:
- Группа — куда команда попадёт в окне раздела. Для списка слева выберите группу панели навигации, для быстрых действий — панель действий.
- Тип параметра команды — оставьте пустым, если команда не зависит от объекта. Если нужна ссылка на элемент справочника, укажите тип.
- Модуль команды — здесь находится процедура-обработчик.
Шаг 2. Напишите обработчик
В модуле команды единственная процедура. Она открывает форму:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Обработка.СверкаВручную.Форма",
,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Имя обработки в строке замените на своё. Если вместо формы нужен вызов серверной логики, обработчик клиента вызывает серверную процедуру модуля через &НаСервере.
Шаг 3. Разместите команду в подсистеме
Команда сама по себе в разделе не появится. Для неё нужна подсистема.
- В дереве найдите
Общие → Подсистемыи откройте подсистему, в которую хотите добавить пункт, например «Продажи». - На закладке «Состав» нажмите «Добавить» или перетащите туда созданную команду. Для команды объекта в состав добавляется сам объект.
- Нажмите кнопку «Командный интерфейс» в окне подсистемы. Откроется дерево групп: панель навигации, панель действий и вложенные.
- Найдите в нужной группе вашу команду. Если флажок видимости снят, поставьте его.
- Перетаскиванием поставьте команду на нужное место. Порядок сверху вниз соответствует порядку, в котором пункты увидят пользователи.
Шаг 4. Запустите и проверьте
Нажмите F5 (запуск в режиме 1С:Предприятие) и выберите отладку или обычный запуск. Платформа предложит обновить конфигурацию
базы данных — согласитесь. Откройте нужный раздел и проверьте, что пункт виден и открывает то, что задумано.
Видимость и права: почему пункт есть у вас и пропал у коллег
Самый частый вопрос после добавления: «У меня видно, а у бухгалтера нет». Причин обычно три, и проверять их надо в таком порядке.
Роль. Видимость пункта определяется правами роли на команду. В роли найдите объект «Общие команды → ваша команда» и убедитесь, что включено право Просмотр. Для команды объекта нужны права на сам объект: без права просмотра на справочник пункта не будет.
Подсистема. Права на подсистему тоже задаются в роли. Если у роли нет права Просмотр на подсистему, раздел целиком скрыт. Добавили команду в раздел, которого у пользователя нет, — он её не увидит.
Функциональные опции. У команды и подсистемы можно указать функциональные опции. Если опция выключена в настройках программы (Администрирование → Настройки программы), пункт скрыт для всех. Проверьте свойство «Функциональные опции» у команды.
Отдельный случай — видимость по умолчанию. В командном интерфейсе подсистемы у каждого пункта есть флажок видимости, и пользователь может переопределить его в своих настройках. Если вы добавили новый пункт, а у сотрудника сохранена личная настройка раздела, пункт может не появиться. Тогда помогает сброс настроек: в окне настройки панели разделов есть пункт «Установить стандартные настройки» (название соответствует интерфейсу «Такси»; если нужного пункта нет, настройка не менялась).
| Симптом | Что проверить |
|---|---|
| Пункта нет ни у кого | Состав подсистемы, флажок видимости в командном интерфейсе, функциональные опции |
| Пункт есть у администратора, у остальных нет | Право Просмотр на команду и подсистему в ролях пользователя |
| Пункт есть, а при нажатии ошибка прав | Права на объект, который открывает команда (форма, регистр, обработка) |
| У одного сотрудника нет, у других есть | Личная настройка командного интерфейса, сброс на стандартную |
Безопасная доработка: добавляем пункт через расширение
Если конфигурация типовая и вы обновляете её по релизам, меняйте её через расширение. Тогда основная конфигурация остаётся на поддержке без изменений, а ваши команды лежат отдельно. Расширения появились в платформе 8.3.6.
Порядок такой.
- В конфигураторе откройте
Конфигурация → Расширения конфигурации. Добавьте новое расширение: задайте имя и назначение (например, «Адаптация»). - В расширении добавьте новую общую команду так же, как в основной конфигурации. Собственные объекты расширения не конфликтуют с обновлением типовой.
- Чтобы поставить команду в существующий раздел, подсистему нужно заимствовать. Через контекстное меню выберите в основной конфигурации подсистему и добавьте её в расширение (команда «Добавить в расширение»). Откройте заимствованную подсистему и добавьте команду в состав и в командный интерфейс.
- Сохраните расширение в базу:
Конфигурация → Расширения конфигурации → Обновить конфигурацию БД(в окне расширений есть отдельная кнопка). Загрузка файла.cfeи обновление конфигурации БД — разные действия, выполните оба. - Перезапустите клиент, чтобы увидеть результат.
Стандартные свойства расширения вроде «Безопасный режим» и «Защита от опасных действий» полезно оставить включёнными для расширений, которые вы получили не от своего разработчика. Для собственных они не нужны, но и не мешают.
Минус подхода — при смене структуры типовой подсистемы в новом релизе заимствованная копия может устареть. Если после обновления пункт пропал или раздел выглядит странно, откройте расширение и сверьте заимствованные объекты: в дереве они отмечены как изменённые относительно основной конфигурации.
Добавляем пункт без конфигуратора
Бывает, что конфигуратор недоступен: база на поддержке у франчайзи или нет прав. Тогда есть два пути.
Внешняя обработка с командой
В типовых конфигурациях на БСП есть раздел для подключаемых обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Включите флажок использования дополнительных отчётов и обработок, затем добавьте обработку из файла .epf.
У обработки вида «Дополнительная обработка» задаются команды и размещение. Команда будет видна в выбранном разделе или в списке объекта. Обработку должен написать разработчик по правилам подсистемы: в модуле объекта экспортная процедура описывает сведения о внешней обработке и список команд.
Личная настройка интерфейса
Пользователь сам может поменять состав и порядок разделов. Обычно эта настройка доступна из меню главного окна (значок шестерёнки или пункт «Настройки» с подпунктами навигации и действий). В ней можно включить скрытый раздел или команду, которая уже есть в конфигурации. Новую команду таким способом не создать — только показать существующую.
Добавляем кнопку программно: динамическое создание в форме
Иногда пункт нужен только при условии, например для одного вида пользователей. Тогда команда создаётся из кода при открытии формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПравоДоступа("Просмотр", Метаданные.Обработки.СверкаВручную) Тогда
Возврат;
КонецЕсли;
Команда = Команды.Добавить("СверкаВручную");
Команда.Действие = "Подключаемый_СверкаВручную";
Команда.Заголовок = "Сверка вручную";
Кнопка = Элементы.Добавить("СверкаВручнуюКнопка", Тип("КнопкаФормы"), Элементы.ФормаКомандыПодвала);
Кнопка.ИмяКоманды = "СверкаВручную";
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СверкаВручную(Команда)
ОткрытьФорму("Обработка.СверкаВручную.Форма");
КонецПроцедуры
Группа ФормаКомандыПодвала в примере условная: подставьте существующую группу из вашей формы. Динамически созданная кнопка живёт только в этой форме, в верхних разделах она не появится.
Для разделов верхнего уровня программное добавление пунктов в стандартный командный интерфейс не используется: состав разделов задаётся метаданными. Единственный способ повлиять на них из кода — управлять видимостью через функциональные опции и права.
Типичные промахи при добавлении пункта
- Команда создана, но не в подсистеме. Пункт не появится. Проверьте закладку «Состав» подсистемы.
- Не обновили конфигурацию базы данных. Платформа предлагает это при запуске. Если отказались, в базе остаётся прошлая структура.
- Длинное название. Синоним команды обрезается в панели навигации. Сокращайте до двух-трёх слов, подробности убирайте в подсказку.
- Команда добавлена в группу, которую интерфейс не показывает. Для панели навигации и панели действий группы разные. Если пункт нужен слева, ищите группу навигации.
- Правите типовую конфигурацию напрямую и ставите релизы. Первое же обновление потребует объединения. Используйте расширение.
- Параметр команды указан, а команда в общем разделе. Команда с параметром работает только из списков и форм этого типа, в раздел её не ставят.