Как узнать, какие команды объектов конфигурации задействованы в командных интерфейсах 1С
Содержание
Быстрее всего узнать, где задействована команда объекта конфигурации, в Конфигураторе: щёлкните правой кнопкой по команде (или по самому объекту) в дереве метаданных и выберите Найти ссылки на объект. В списке результатов будут подсистемы, в командных интерфейсах которых она выведена, и формы, где она стоит в командной панели. Полную картину видимости по ролям даёт редактор командного интерфейса подсистемы, а массовый анализ — выгрузка конфигурации в XML и поиск по файлам CommandInterface.xml.
Задача обычно возникает в двух случаях. Пользователь не видит команду, которая «точно есть». Или разработчик хочет удалить команду и боится, что она где-то ещё нужна. Ниже — способы от самого простого к массовому, с примерами кода и командами пакетного запуска.
Как устроен командный интерфейс и откуда в нём берутся команды
В управляемом приложении 1С 8.3 пользователь видит не объекты, а команды. Их источников три:
- 📦 Стандартные команды объекта. Платформа создаёт их сама: открыть список справочника, создать документ
, открыть журнал. Выводятся, если объект входит в подсистему и у него включено свойство
Использовать стандартные команды. - 🧩 Собственные команды объекта — ветка
Командывнутри справочника, документа, обработки. Где команда появится, решает её свойствоГруппа: панель навигации , панель действий или командная панель формы. - 🌐 Общие команды — ветка
Общие → Общие команды. Работают так же, но не принадлежат конкретному объекту.
Попадание команды в конкретный раздел определяется составом подсистем. Объект или общая команда, включённые в подсистему, дают свои команды в её командный интерфейс. Дальше разработчик настраивает в редакторе порядок, видимость по ролям и размещение.
Отдельная история — параметризуемые команды. У них задан тип параметра (например, ссылка на контрагента). Такие команды не попадают в разделы, а появляются в формах объектов этого типа: в панели навигации формы или в её командной панели.
Отсюда главный вывод для поиска. Чтобы понять, где показывается команда, нужно проверить три вещи: состав подсистем, свойство Группа самой команды и тип её параметра.
Какой способ поиска выбрать
| Способ | Что показывает | Когда подходит |
|---|---|---|
Найти ссылки на объект | Подсистемы, формы, модули, где упомянута команда | Одна команда, быстрый ответ |
| Редактор командного интерфейса подсистемы | Видимость, порядок, группы, роли | Разбор одного раздела |
| Окно «Все подсистемы» | Какие объекты в каких подсистемах | Проверка состава разделов |
| Командный интерфейс формы | Команды в навигации и панели формы | Параметризуемые команды |
| Выгрузка в XML + поиск | Все вхождения по всей конфигурации | Аудит, удаление, сравнение версий |
| Код на метаданных | Состав подсистем и команды объектов | Отчёт для команды разработки |
Поиск команд объектов конфигурации штатными средствами Конфигуратора
Найти ссылки на объект
- Откройте Конфигуратор и дерево конфигурации.
- Раскройте объект, например справочник
Номенклатура, затем веткуКоманды. - Щёлкните правой кнопкой по нужной команде →
Найти ссылки на объект. - Внизу откроется окно результатов. Двойной щелчок по строке переводит к месту использования.
Для стандартных команд такой ветки нет. Тогда ищите ссылки на сам объект: в результатах увидите подсистемы, в которые он входит, а значит, и разделы, где выведены его стандартные команды.
Редактор командного интерфейса подсистемы
Откройте подсистему (Общие → Подсистемы → нужная) и в контекстном меню выберите Открыть командный интерфейс. Откроется окно с двумя частями: панель навигации и панель действий.
Что в нём видно:
- ✅ флажок «Видимость» — общая видимость команды в разделе;
- 👥 колонки по ролям — видимость для конкретной роли, если она отличается от общей;
- ↕️ порядок команд и группы:
Важное,Обычное,См. также,Создать,Отчеты,Сервис.
Команда, у которой сняты все флажки, в конфигурации есть, но пользователь её не увидит. Это частая причина обращений «пропал пункт меню».
Для корня конфигурации есть свои редакторы: в контекстном меню корневого узла Открыть командный интерфейс конфигурации (порядок и видимость разделов) и редактор рабочей области начальной страницы.
Окно «Все подсистемы»
Его вызывают из контекстного меню ветки Подсистемы. Слева — дерево подсистем, справа — объекты. Можно выбрать объект и увидеть все подсистемы, в которые он входит. Удобно, когда нужно понять, в каких разделах окажутся стандартные команды справочника.
Командный интерфейс формы
Параметризуемые команды ищите в формах. Откройте форму объекта в редакторе и перейдите на вкладку Командный интерфейс. Там две ветки: панель навигации формы и командная панель. Платформа сама подставляет сюда команды, у которых тип параметра совпадает с типом объекта. В редакторе их можно скрыть или переставить.
Программный анализ команд через метаданные
Встроенный язык даёт доступ к составу подсистем и командам объектов. А вот настройки видимости из редактора командного интерфейса (флажки по ролям, порядок) через Метаданные не читаются. Для них нужна выгрузка в XML, о ней ниже.
Пример серверной процедуры: обходит все подсистемы рекурсивно и выводит, какие объекты и общие команды в них входят и какие собственные команды есть у этих объектов.
&НаСервереБезКонтекста
Процедура ВывестиКомандыПодсистем()
Для Каждого Подсистема Из Метаданные.Подсистемы Цикл
ОбойтиПодсистему(Подсистема, "");
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОбойтиПодсистему(Подсистема, Отступ)
Сообщить(Отступ + "Подсистема: " + Подсистема.ПолноеИмя());
Для Каждого Объект Из Подсистема.Состав Цикл
Если Метаданные.ОбщиеКоманды.Содержит(Объект) Тогда
Сообщить(Отступ + " общая команда: " + Объект.Имя);
Продолжить;
КонецЕсли;
Сообщить(Отступ + " объект: " + Объект.ПолноеИмя());
Попытка
КомандыОбъекта = Объект.Команды;
Исключение
КомандыОбъекта = Неопределено; // у объекта этого вида нет ветки «Команды»
КонецПопытки;
Если КомандыОбъекта <> Неопределено Тогда
Для Каждого Команда Из КомандыОбъекта Цикл
Сообщить(Отступ + " команда: " + Команда.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого Вложенная Из Подсистема.Подсистемы Цикл
ОбойтиПодсистему(Вложенная, Отступ + " ");
КонецЦикла;
КонецПроцедуры
Проверить обратное — входит ли объект хоть в одну подсистему — можно методом Подсистема.Состав.Содержит(Объект). Объект без подсистем не даёт стандартных команд ни в одном разделе: пользователь найдёт его только через «Все функции».
Если нужен результат в виде таблицы, замените Сообщить на запись в таблицу значений и выведите её в табличный документ. Для большой конфигурации вроде ERP вывод сообщениями займёт тысячи строк.
Как проверить срабатывание команды: отладчик и журнал регистрации
Метаданные показывают, где команда может появиться. Чтобы понять, вызывается ли она на самом деле, нужен запуск.
Отладчик
- Откройте модуль команды: в её свойствах —
Модуль команды→Открыть. - Поставьте точку останова в процедуре
ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды). - Запустите отладку и нажмите в пользовательском режиме ту кнопку, которую проверяете.
- Если остановка сработала — кнопка вызывает именно эту команду. В
ПараметрыВыполненияКоманды.Источниквидно, из какой формы её вызвали.
Так удобно разоблачать «двойников»: в типовых конфигурациях встречаются команды с одинаковым представлением, но разными именами.
Журнал регистрации
По умолчанию платформа не пишет в журнал каждое нажатие команды. Если нужна статистика использования перед удалением, добавьте в ОбработкаКоманды запись:
ЗаписьЖурналаРегистрации("Аудит команд.Вызов",
УровеньЖурналаРегистрации.Информация, , ,
"Вызвана команда ВыгрузкаПрайса");
Через месяц откройте журнал (Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и ЗУП 3.1 или Администрирование → Журнал регистрации в Конфигураторе) и отберите события по имени. Ни одного вызова за месяц — весомый довод, что команду можно убирать.
Вносите такую запись через расширение или на копии, а не правкой типовой конфигурации на поддержке: правка снимает объект с поддержки и усложняет обновления.
Команды из расширений конфигурации
Расширения добавляют свои общие команды, команды у собственных объектов, а также включают объекты в заимствованные подсистемы. Поэтому при анализе основной конфигурации часть кнопок не найдётся.
Что учесть:
- 🔌 В Конфигураторе откройте дерево расширения (
Конфигурация → Расширения конфигурации→ выбрать расширение →Конфигурация) и повторите поиск ссылок там. - 🧭 В коде пользовательского режима
Метаданныеуже включают объекты подключённых расширений. Отличить их помогает методОбъект.РасширениеКонфигурации(): для объектов основной конфигурации он возвращаетНеопределено. - 📄 Выгружать в файлы расширение нужно отдельно: ключ
-Extensionс именем расширения у/DumpConfigToFiles.
Если пользователь видит команду, которой нет в основной конфигурации, почти всегда её принесло расширение или внешняя обработка, подключённая как дополнительная (в конфигурациях на БСП она выводится через раздел дополнительных обработок).
Массовый анализ: выгрузка в XML и внешняя обработка
Выгрузка конфигурации в файлы
Это самый полный способ. В Конфигураторе: Конфигурация → Выгрузить конфигурацию в файлы. Или пакетно:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /DumpConfigToFiles "D:\Dump\Buh" /Out "D:\Dump\log.txt"
Путь к 1cv8.exe подставьте свой, по установленной версии платформы. Выгрузка не требует монопольного доступа и базу не меняет.
Настройки командного интерфейса подсистемы лежат в файле Subsystems\ИмяПодсистемы\Ext\CommandInterface.xml. Команды записаны полным именем: CommonCommand.ИмяКоманды, Catalog.Номенклатура.Command.ИмяКоманды, Catalog.Номенклатура.StandardCommand.OpenList. Там же видны блоки видимости по ролям.
Найти все интерфейсы, где упомянута команда:
findstr /S /M /C:"CommonCommand.ЗагрузкаКурсовВалют" D:\Dump\Buh\*.xml
Или в PowerShell, с выводом строк:
Get-ChildItem D:\Dump\Buh -Recurse -Filter CommandInterface.xml |
Select-String -Pattern "Catalog.Номенклатура" |
Select-Object Path, LineNumber
💡 Выгрузку удобно положить в git: тогда видно, кто и когда снял видимость команды в разделе. Сравнение двух выгрузок показывает изменения командного интерфейса между релизами точнее, чем сравнение конфигураций в Конфигураторе.
Внешняя обработка для аудита
Код из раздела про метаданные легко оформить во внешнюю обработку
: форма с кнопкой «Сформировать», табличный документ с колонками «Подсистема — Объект — Команда — Вид (стандартная, собственная, общая)». Добавьте колонку «Расширение» через РасширениеКонфигурации(), и одна таблица ответит на большинство вопросов поддержки.
Для проверки прав добавьте цикл по Метаданные.Роли и метод ПравоДоступа("Просмотр", Объект, Роль). Команда объекта, на который у роли нет права просмотра, пользователю с этой ролью не покажется, даже если в редакторе интерфейса стоит флажок.
Почему команда есть в конфигурации, но не видна пользователю
Не включайте видимость команды для всех ролей, чтобы «быстро починить» — так вы откроете раздел тем, кому он не положен. Сначала найдите, какое из ограничений сработало.
Как держать командные интерфейсы в порядке
Анализ обычно вскрывает лишнее. Несколько правил, которые упрощают жизнь и пользователям, и поддержке:
- Группа «Важное» — короткая. 5–7 команд на раздел. Остальное — в «Обычное» и «См. также».
- Одна команда — один основной раздел. Если справочник нужен в трёх разделах, в двух из них выводите его в «См. также».
- Права через роли, не через флажки. Скрывать команду флажком в колонке роли — временная мера. Надёжнее не давать роли права на объект.
- Свои команды — в расширении и в своей подсистеме или заимствованной. Типовая конфигурация остаётся на поддержке.
- Проверяйте под реальным пользователем. Конфигуратор показывает, как задумано; рабочий сеанс под пользователем с его ролями и опциями показывает, как есть.