Новая команда в интерфейсе 1С: от конфигуратора до расширения

· 9 мин

Содержание

В 1С 8.3 с интерфейсом «Такси» нет меню в старом понимании. Есть разделы в панели сверху и команды внутри каждого раздела. Чтобы добавить пункт, нужно создать команду и поставить её в нужную подсистему в конфигураторе. Для пользователя без доступа к конфигуратору есть два обходных пути: внешняя обработка и личные настройки.

Разработчику хватит десяти минут, если он понимает, где живёт команда: в самом объекте или в общих командах. Ниже — полный путь от выбора способа до проверки результата и типовых промахов.

Как устроена навигация: подсистемы, группы и команды

Всё, что пользователь видит в верхней панели и в левой колонке раздела, собирается из трёх сущностей.

  • Подсистема — раздел верхнего уровня («Продажи», «Банк и касса»). Вложенные подсистемы дают подразделы.
  • Группа команд — место в окне раздела: панель навигации (слева), панель действий (сверху). Есть и стандартные группы вроде «Создать», «Отчёты», «Сервис».
  • Команда — то, что нажимается. У неё есть обработчик: открыть форму, выполнить процедуру, запустить отчёт.

Команды бывают двух видов, и от выбора зависит дальнейший путь:

Вид командыГде создаётсяКогда подходит
Команда объектаВ дереве: объект → «Команды»Действие относится к одному справочнику, документу, отчёту. Параметр — ссылка на объект
Общая командаВетка «Общие» → «Общие команды»Действие не привязано к объекту или должно появляться у многих типов сразу
Команда формыВ редакторе формы, закладка «Команды»Кнопка внутри конкретной формы, в разделы не попадает

Пункт в разделе («в меню») создают из команды объекта или из общей команды. Команда формы в разделе не появится: она живёт только в форме.

Подготовка: что проверить перед правкой в конфигураторе

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

  1. Определите, что именно добавляется: открытие формы, запуск обработки, отчёт.
  2. Посмотрите, поставлена ли конфигурация на поддержку: Конфигурация → Поддержка → Настройка поддержки.
  3. Если конфигурация типовая, а обновления вы ставите, выбирайте расширение (отдельный раздел ниже). Свою собственную конфигурацию без поддержки можно править напрямую.
  4. Сделайте выгрузку информационной базы в .dt или копию каталога файловой базы. Правка конфигурации обычно безопасна, но откат из резервной копии надёжнее, чем память о десятке мелких изменений.
  5. Если базу обновляют в рабочее время, предупредите пользователей: при обновлении конфигурации базы данных сеансы завершаются.

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

Пошагово: создаём команду и ставим её в подсистему

Разберём самый частый случай — общую команду, которая открывает форму существующей обработки.

Шаг 1. Создайте общую команду

  1. Откройте конфигурацию в режиме «Конфигуратор».
  2. В дереве метаданных разверните Общие, затем Общие команды. Правой кнопкой — Добавить.
  3. Задайте имя без пробелов, например ОткрытьСверкуВручную. Синоним — это то, что увидит пользователь. Пишите его по-человечески: «Сверка вручную».
  4. Откройте закладку со свойствами команды и заполните ключевые:
    • Группа — куда команда попадёт в окне раздела. Для списка слева выберите группу панели навигации, для быстрых действий — панель действий.
    • Тип параметра команды — оставьте пустым, если команда не зависит от объекта. Если нужна ссылка на элемент справочника, укажите тип.
    • Модуль команды — здесь находится процедура-обработчик.

Шаг 2. Напишите обработчик

В модуле команды единственная процедура. Она открывает форму:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	ОткрытьФорму("Обработка.СверкаВручную.Форма",
		,
		ПараметрыВыполненияКоманды.Источник,
		ПараметрыВыполненияКоманды.Уникальность,
		ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры

Имя обработки в строке замените на своё. Если вместо формы нужен вызов серверной логики, обработчик клиента вызывает серверную процедуру модуля через &НаСервере.

Шаг 3. Разместите команду в подсистеме

Команда сама по себе в разделе не появится. Для неё нужна подсистема.

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

Шаг 4. Запустите и проверьте

Нажмите F5 (запуск в режиме 1С:Предприятие) и выберите отладку или обычный запуск. Платформа предложит обновить конфигурацию базы данных — согласитесь. Откройте нужный раздел и проверьте, что пункт виден и открывает то, что задумано.

Проверка новой команды
Выполнено: 0 / 5

Видимость и права: почему пункт есть у вас и пропал у коллег

Самый частый вопрос после добавления: «У меня видно, а у бухгалтера нет». Причин обычно три, и проверять их надо в таком порядке.

Роль. Видимость пункта определяется правами роли на команду. В роли найдите объект «Общие команды → ваша команда» и убедитесь, что включено право Просмотр. Для команды объекта нужны права на сам объект: без права просмотра на справочник пункта не будет.

Подсистема. Права на подсистему тоже задаются в роли. Если у роли нет права Просмотр на подсистему, раздел целиком скрыт. Добавили команду в раздел, которого у пользователя нет, — он её не увидит.

Функциональные опции. У команды и подсистемы можно указать функциональные опции. Если опция выключена в настройках программы (Администрирование → Настройки программы), пункт скрыт для всех. Проверьте свойство «Функциональные опции» у команды.

Отдельный случай — видимость по умолчанию. В командном интерфейсе подсистемы у каждого пункта есть флажок видимости, и пользователь может переопределить его в своих настройках. Если вы добавили новый пункт, а у сотрудника сохранена личная настройка раздела, пункт может не появиться. Тогда помогает сброс настроек: в окне настройки панели разделов есть пункт «Установить стандартные настройки» (название соответствует интерфейсу «Такси»; если нужного пункта нет, настройка не менялась).

СимптомЧто проверить
Пункта нет ни у когоСостав подсистемы, флажок видимости в командном интерфейсе, функциональные опции
Пункт есть у администратора, у остальных нетПраво Просмотр на команду и подсистему в ролях пользователя
Пункт есть, а при нажатии ошибка правПрава на объект, который открывает команда (форма, регистр, обработка)
У одного сотрудника нет, у других естьЛичная настройка командного интерфейса, сброс на стандартную

Безопасная доработка: добавляем пункт через расширение

Если конфигурация типовая и вы обновляете её по релизам, меняйте её через расширение. Тогда основная конфигурация остаётся на поддержке без изменений, а ваши команды лежат отдельно. Расширения появились в платформе 8.3.6.

Порядок такой.

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

Стандартные свойства расширения вроде «Безопасный режим» и «Защита от опасных действий» полезно оставить включёнными для расширений, которые вы получили не от своего разработчика. Для собственных они не нужны, но и не мешают.

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

Добавляем пункт без конфигуратора

Бывает, что конфигуратор недоступен: база на поддержке у франчайзи или нет прав. Тогда есть два пути.

Внешняя обработка с командой

В типовых конфигурациях на БСП есть раздел для подключаемых обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Включите флажок использования дополнительных отчётов и обработок, затем добавьте обработку из файла .epf.

У обработки вида «Дополнительная обработка» задаются команды и размещение. Команда будет видна в выбранном разделе или в списке объекта. Обработку должен написать разработчик по правилам подсистемы: в модуле объекта экспортная процедура описывает сведения о внешней обработке и список команд.

Личная настройка интерфейса

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

Добавляем кнопку программно: динамическое создание в форме

Иногда пункт нужен только при условии, например для одного вида пользователей. Тогда команда создаётся из кода при открытии формы.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Не ПравоДоступа("Просмотр", Метаданные.Обработки.СверкаВручную) Тогда
		Возврат;
	КонецЕсли;

	Команда = Команды.Добавить("СверкаВручную");
	Команда.Действие = "Подключаемый_СверкаВручную";
	Команда.Заголовок = "Сверка вручную";

	Кнопка = Элементы.Добавить("СверкаВручнуюКнопка", Тип("КнопкаФормы"), Элементы.ФормаКомандыПодвала);
	Кнопка.ИмяКоманды = "СверкаВручную";
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_СверкаВручную(Команда)
	ОткрытьФорму("Обработка.СверкаВручную.Форма");
КонецПроцедуры

Группа ФормаКомандыПодвала в примере условная: подставьте существующую группу из вашей формы. Динамически созданная кнопка живёт только в этой форме, в верхних разделах она не появится.

Для разделов верхнего уровня программное добавление пунктов в стандартный командный интерфейс не используется: состав разделов задаётся метаданными. Единственный способ повлиять на них из кода — управлять видимостью через функциональные опции и права.

Типичные промахи при добавлении пункта

  • Команда создана, но не в подсистеме. Пункт не появится. Проверьте закладку «Состав» подсистемы.
  • Не обновили конфигурацию базы данных. Платформа предлагает это при запуске. Если отказались, в базе остаётся прошлая структура.
  • Длинное название. Синоним команды обрезается в панели навигации. Сокращайте до двух-трёх слов, подробности убирайте в подсказку.
  • Команда добавлена в группу, которую интерфейс не показывает. Для панели навигации и панели действий группы разные. Если пункт нужен слева, ищите группу навигации.
  • Правите типовую конфигурацию напрямую и ставите релизы. Первое же обновление потребует объединения. Используйте расширение.
  • Параметр команды указан, а команда в общем разделе. Команда с параметром работает только из списков и форм этого типа, в раздел её не ставят.
Диагностика: выберите симптом

Частые вопросы

Можно ли добавить пункт в верхнее меню без конфигуратора?
Новую команду нельзя. Можно подключить внешнюю обработку с командой через раздел дополнительных отчётов и обработок либо включить уже существующий скрытый пункт в настройках интерфейса.
Чем общая команда отличается от команды объекта?
Команда объекта получает параметром ссылку на элемент этого объекта и живёт в его списках и формах. Общая команда не привязана к типу, её выносят в разделы.
Нужно ли перезапускать 1С после добавления через расширение?
Да. Загрузите расширение в базу, обновите конфигурацию БД и перезапустите клиент: открытые сеансы старый интерфейс не обновляют.
Как поставить пункт первым в списке раздела?
В командном интерфейсе подсистемы перетащите его в начало нужной группы. Порядок в окне настройки определяет порядок у пользователей.
Можно ли скрыть команду только для одной группы пользователей?
Да, уберите право Просмотр на эту команду у нужных ролей или ограничьте её функциональной опцией.