Добавление команды в УТ 11: общие, объектные и команды формы

· 9 мин

Содержание

Новая команда в 1С:Управление Торговлей — это объект метаданных со своим обработчиком, который вы создаёте в Конфигураторе. Есть три варианта: общая команда (ветка Общие команды), команда объекта (ветка Команды внутри справочника или документа) и команда формы (создаётся прямо в форме). От выбора зависит, где появится кнопка и в каком модуле будет жить код.

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

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

Какую команду добавить: общая, объекта или формы

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

Какую команду вам нужно добавить?

Разница по сути такая:

  • 🌐 Общая команда — не принадлежит ни одному объекту. Удобна для сервисных действий: открыть внешний отчёт, запустить обработку, перейти на сайт.
  • 📄 Команда объекта — живёт внутри справочника или документа и работает с его ссылкой. Пример: «Создать на основании», «Распечатать ярлык» в карточке номенклатуры.
  • 🧾 Команда формы — самая локальная. Нужна, когда кнопка должна нажиматься только на этой форме и управлять её реквизитами.

Для 70% задач по доработке УТ хватает общей команды или команды формы.

Доработка типовой УТ без потери обновлений

УТ 11 поставляется на полной поддержке поставщика. Если открыть Конфигуратор и начать добавлять объекты напрямую, при следующем обновлении придётся вручную решать конфликты по каждому изменённому объекту.

Чистый способ — расширение конфигурации . Это отдельный файл .cfe, который хранит только ваши доработки и подключается поверх типовой. При обновлении УТ расширение, как правило, остаётся рабочим и переноса не требует.

Расширения появились в платформе 8.3.6. Заимствовать существующую форму и добавить в неё команду формы можно начиная с этой версии. Добавлять в расширение собственные объекты, включая общие команды, позволяют более новые релизы платформы — ориентируйтесь на версию не ниже 8.3.11.

Как создать расширение в Конфигураторе:

  1. Откройте Конфигурация → Расширения конфигурации.
  2. Нажмите «Добавить», задайте имя, префикс и назначение (обычно «Адаптация»).
  3. В дереве расширения правым кликом добавляйте свои объекты или заимствуйте типовые (Добавить в расширение).

Префикс расширения добавляется к именам ваших объектов автоматически. Это защищает от совпадения имён с будущими объектами типовой конфигурации.

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

Создание общей команды в Конфигураторе

Разберём на примере общей команды — у объектной и у команды формы логика похожа.

  1. В дереве конфигурации (или в дереве расширения) найдите ветку Общие команды.
  2. Правый клик → Добавить. Откроется окно свойств новой команды.
  3. Заполните Имя — латиницей, без пробелов, например ПроверкаОстатков. Синоним подставится сам — это текст, который увидит пользователь на кнопке.
  4. Если команда должна работать с конкретным объектом, укажите Параметр команды — тип, например СправочникСсылка.Номенклатура. Тогда команда появится только в формах, где есть объект этого типа.
  5. В свойстве Режим использования параметров команды выберите Единственный (команда для одной карточки) или Множественный (для списков с выделением нескольких строк).

После создания у команды появляется собственный модуль — в нём и пишется код. Открыть его можно по ссылке Открыть модуль команды в палитре свойств.

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

Размещение команды: свойство «Группа» и панели

Свойство Группа определяет, в какой панели интерфейса окажется кнопка. Это ключевая настройка — если её не заполнить, команда не отобразится нигде.

Доступные группы для общей команды:

ГруппаГде появится кнопка
Панель навигации.ВажноеВерх панели навигации, выделена
Панель навигации.ОбычноеПанель навигации, обычный блок
Панель навигации.См. такжеНижний блок панели навигации
Панель действий.СоздатьКнопки создания в разделе
Панель действий.ОтчетыГруппа отчётов раздела
Панель действий.СервисСервисные команды раздела
Командная панель формы.ВажноеКомандная панель формы, слева
Командная панель формы.ОбычноеКомандная панель формы

Для команды, которая должна быть кнопкой в карточке номенклатуры, выбирайте группу командной панели формы. Для команды, запускающей обработку из раздела, — панель действий сервиса.

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

У команды формы свойства Группа нет. Там кнопка создаётся иначе: команду перетаскивают из списка команд на закладку Элементы формы, и платформа создаёт кнопку. Её положение задаётся местом в дереве элементов.

Модуль команды: обработчик и код

Логика команды живёт в её модуле. У общей команды и команды объекта обработчик называется ОбработкаКоманды и вызывается на клиенте.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

	ПоказатьПредупреждение(, "Команда выполнена для: " + ПараметрКоманды);

КонецПроцедуры

Здесь ПараметрКоманды — это ссылка на объект (если задан параметр команды) или массив ссылок в множественном режиме. ПараметрыВыполненияКоманды хранит данные об источнике вызова — окно, навигационную ссылку.

Если команде нужны серверные данные, не пишите серверный код прямо в обработчике — он компилируется на клиенте. Вынесите запрос в серверную процедуру общего модуля и вызовите её:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

	Остаток = ПолучитьОстатокНаСервере(ПараметрКоманды);
	ПоказатьПредупреждение(, "Свободный остаток: " + Остаток);

КонецПроцедуры

Процедуру ПолучитьОстатокНаСервере разместите в общем модуле с флагом «Сервер» и «Вызов сервера».

Для команды с параметром пригодится свойство Режим автоподстановки в параметры командной формы. Если его включить, команда сама подставит текущий объект формы как параметр, и пользователю не придётся ничего выбирать вручную.

Кнопка на форме: команда формы шаг за шагом

Когда кнопка нужна только на одной форме — например, на форме документа «Реализация товаров и услуг», — проще обойтись командой формы. Её не видно в дереве конфигурации: она живёт внутри формы.

Порядок действий в редакторе формы:

  1. Откройте форму и перейдите на закладку Команды → Команды формы.
  2. Нажмите «Добавить» и задайте имя команды, например ЗаполнитьКомментарий.
  3. В свойстве Действие нажмите кнопку с лупой — платформа создаст пустой обработчик в модуле формы и перейдёт к нему.
  4. Напишите код обработчика. Директива по умолчанию — &НаКлиенте:
&НаКлиенте
Процедура ЗаполнитьКомментарий(Команда)

	Объект.Комментарий = "Проверено " + ТекущаяДата();
	Модифицированность = Истина;

КонецПроцедуры
  1. Вернитесь на закладку Элементы и перетащите команду из списка команд в дерево элементов. Появится кнопка.
  2. В свойствах кнопки задайте Заголовок, при желании Картинку и способ Отображение (текст, картинка или оба).

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

В типовой УТ форму нельзя править напрямую без снятия с поддержки. Чистый путь — заимствовать форму в расширение: в дереве расширения правый клик по нужной форме → Добавить в расширение, после чего команду и кнопку добавляют уже в заимствованную копию. Типовая форма при этом не меняется, а доработка переживает обновления.

Заимствуйте только саму форму, а не весь объект целиком. Чем меньше заимствовано в расширение, тем реже доработка конфликтует с обновлениями типовой.

Порядок и видимость через командный интерфейс

Свойство Группа отвечает за панель, а порядок кнопок внутри панели и видимость по ролям настраиваются в командном интерфейсе подсистемы.

Откройте нужную подсистему в дереве конфигурации, правый клик → Открыть командный интерфейс. В редакторе команды сгруппированы по панелям. Здесь можно:

  • включить или выключить Видимость команды галочкой;
  • настроить видимость отдельно для каждой роли в соседних колонках;
  • менять порядок команд стрелками вверх-вниз.

Разделы УТ (Продажи, Закупки, Склад и доставка, НСИ и администрирование) в Конфигураторе — это и есть подсистемы верхнего уровня. Добавляя команду в панель действий, вы фактически подключаете её к командному интерфейсу конкретного раздела.

Ещё два механизма влияют на видимость, и их легко упустить:

  • 🔒 Роли. Если у команды не стоит право доступа ни для одной роли пользователя, он её не увидит. Права настраиваются в ролях или в самом командном интерфейсе.
  • 🎚️ Функциональные опции. В УТ многие возможности включаются опциями в НСИ и администрирование. Если команда привязана к объекту, скрытому отключённой опцией, она тоже не появится.

Почему команда не появляется на панели

Самая частая жалоба после добавления команды — «создал, а кнопки нет». Разберём, что проверить по шагам, от самого вероятного к редкому.

  • Не заполнена группа. У общей или объектной команды пустое свойство Группа — платформе некуда поставить кнопку. Задайте группу панели.
  • Команда не включена в командный интерфейс. Даже с заданной группой её видимость могла остаться снятой в подсистеме. Откройте командный интерфейс и поставьте галочку.
  • Нет прав у роли. Текущий пользователь работает под ролью без доступа к команде. Проверьте права или протестируйте под полными правами.
  • Не обновлена конфигурация базы. Изменения в Конфигураторе не применились. Нажмите Обновить конфигурацию базы данных (F7) и перезапустите 1С:Предприятие. Для расширения — тоже обновите базу.
  • Параметр команды не совпал. Команда с заданным типом параметра появляется только в формах объектов этого типа. Если тип указан неверно, кнопки в карточке не будет.
  • Для команды формы кнопку не создали. Сама команда формы кнопкой не становится. Её нужно перетащить на закладку Элементы.

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

Отдельная причина именно для УТ — доработку вели в расширении, а оно не подключилось или отключено. Проверьте список в Конфигурация → Расширения конфигурации: расширение должно быть активно и без ошибок применения.

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

Можно ли добавить команду без Конфигуратора, прямо в пользовательском режиме?
Создать новую команду с собственным кодом — нет. В режиме предприятия пользователь может только вынести на панель уже существующие команды через Еще → Изменить форму и настройку панелей. Новая логика — это объект метаданных, он создаётся в Конфигураторе или расширении.
Чем команда отличается от стандартной команды?
Стандартные команды (Создать, Найти, Провести, Пометить на удаление) платформа генерирует сама по объекту — их можно только включать и выключать. Добавляемая команда несёт вашу собственную логику в обработчике.
После обновления УТ команда пропала — что не так?
Почти наверняка доработку делали прямо в типовой конфигурации, и обновление её затёрло. Перенесите команду в расширение конфигурации — оно переживает обновления без ручного переноса.
Почему обработчик выдаёт ошибку компиляции или не срабатывает?
Чаще всего перепутаны директивы: серверный метод вызван в клиентском обработчике. Обработчик команды выполняется на клиенте (&НаКлиенте), а обращение к базе выносите в серверную процедуру общего модуля.
Нужно ли перезапускать программу после добавления команды?
Да. Сохраните конфигурацию, выполните Обновить конфигурацию базы данных (F7) и перезайдите в 1С:Предприятие. Пока база не обновлена, новая команда в режиме предприятия не появится.