Добавление команды в УТ 11: общие, объектные и команды формы
Содержание
Новая команда в 1С:Управление Торговлей — это объект метаданных со своим обработчиком, который вы создаёте в Конфигураторе. Есть три варианта: общая команда (ветка Общие команды), команда объекта (ветка Команды внутри справочника или документа) и команда формы (создаётся прямо в форме). От выбора зависит, где появится кнопка и в каком модуле будет жить код.
Важный момент именно для УТ: это типовая конфигурация на поддержке. Чтобы добавить команду и не потерять её при очередном обновлении, правьте не саму конфигурацию, а подключаемое расширение. Прямая правка типовой тоже возможна, но тянет за собой ручной перенос изменений после каждого релиза.
Ниже — как выбрать тип команды, где её разместить, какой код написать в обработчике и почему кнопка иногда не появляется на форме.
Какую команду добавить: общая, объекта или формы
Прежде чем открывать Конфигуратор, определитесь, где должна появиться кнопка и к чему привязано действие. От этого зависит, какой объект создавать.
Общие команды. Можно привязать к типу (параметр команды) — тогда она появится в формах объектов этого типа.Команды этого объекта. Параметр команды платформа подставит автоматически — ссылку на текущий объект.Команды, обработчик пишется в модуле формы.Разница по сути такая:
- 🌐 Общая команда — не принадлежит ни одному объекту. Удобна для сервисных действий: открыть внешний отчёт, запустить обработку, перейти на сайт.
- 📄 Команда объекта — живёт внутри справочника или документа и работает с его ссылкой. Пример: «Создать на основании», «Распечатать ярлык» в карточке номенклатуры.
- 🧾 Команда формы — самая локальная. Нужна, когда кнопка должна нажиматься только на этой форме и управлять её реквизитами.
Для 70% задач по доработке УТ хватает общей команды или команды формы.
Доработка типовой УТ без потери обновлений
УТ 11 поставляется на полной поддержке поставщика. Если открыть Конфигуратор и начать добавлять объекты напрямую, при следующем обновлении придётся вручную решать конфликты по каждому изменённому объекту.
Чистый способ — расширение конфигурации
. Это отдельный файл .cfe, который хранит только ваши доработки и подключается поверх типовой. При обновлении УТ расширение, как правило, остаётся рабочим и переноса не требует.
Расширения появились в платформе 8.3.6. Заимствовать существующую форму и добавить в неё команду формы можно начиная с этой версии. Добавлять в расширение собственные объекты, включая общие команды, позволяют более новые релизы платформы — ориентируйтесь на версию не ниже 8.3.11.
Как создать расширение в Конфигураторе:
- Откройте
Конфигурация → Расширения конфигурации. - Нажмите «Добавить», задайте имя, префикс и назначение (обычно «Адаптация»).
- В дереве расширения правым кликом добавляйте свои объекты или заимствуйте типовые (
Добавить в расширение).
Префикс расширения добавляется к именам ваших объектов автоматически. Это защищает от совпадения имён с будущими объектами типовой конфигурации.
Прямая правка типовой оправдана только тогда, когда расширение задачу не тянет. Чтобы разрешить редактирование, зайдите в Конфигурация → Поддержка → Настройка поддержки и включите возможность изменения. После этого конфигурация перестаёт обновляться автоматически без сравнения-объединения.
Создание общей команды в Конфигураторе
Разберём на примере общей команды — у объектной и у команды формы логика похожа.
- В дереве конфигурации (или в дереве расширения) найдите ветку
Общие команды. - Правый клик →
Добавить. Откроется окно свойств новой команды. - Заполните
Имя— латиницей, без пробелов, напримерПроверкаОстатков.Синонимподставится сам — это текст, который увидит пользователь на кнопке. - Если команда должна работать с конкретным объектом, укажите
Параметр команды— тип, напримерСправочникСсылка.Номенклатура. Тогда команда появится только в формах, где есть объект этого типа. - В свойстве
Режим использования параметров командывыберитеЕдинственный(команда для одной карточки) илиМножественный(для списков с выделением нескольких строк).
После создания у команды появляется собственный модуль — в нём и пишется код. Открыть его можно по ссылке Открыть модуль команды в палитре свойств.
Команду объекта создают так же, только в ветке Команды нужного справочника или документа. Параметр команды там уже задан типом самого объекта, поэтому поле трогать не нужно.
Размещение команды: свойство «Группа» и панели
Свойство Группа определяет, в какой панели интерфейса окажется кнопка. Это ключевая настройка — если её не заполнить, команда не отобразится нигде.
Доступные группы для общей команды:
| Группа | Где появится кнопка |
|---|---|
Панель навигации.Важное | Верх панели навигации, выделена |
Панель навигации.Обычное | Панель навигации, обычный блок |
Панель навигации.См. также | Нижний блок панели навигации |
Панель действий.Создать | Кнопки создания в разделе |
Панель действий.Отчеты | Группа отчётов раздела |
Панель действий.Сервис | Сервисные команды раздела |
Командная панель формы.Важное | Командная панель формы, слева |
Командная панель формы.Обычное | Командная панель формы |
Для команды, которая должна быть кнопкой в карточке номенклатуры, выбирайте группу командной панели формы. Для команды, запускающей обработку из раздела, — панель действий сервиса.
Группа задаёт лишь потенциальное место. Реально команда станет видимой только после того, как её включат в командный интерфейс подсистемы (см. раздел ниже) и у пользователя будет роль с правом на неё.
У команды формы свойства Группа нет. Там кнопка создаётся иначе: команду перетаскивают из списка команд на закладку Элементы формы, и платформа создаёт кнопку. Её положение задаётся местом в дереве элементов.
Модуль команды: обработчик и код
Логика команды живёт в её модуле. У общей команды и команды объекта обработчик называется ОбработкаКоманды и вызывается на клиенте.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПоказатьПредупреждение(, "Команда выполнена для: " + ПараметрКоманды);
КонецПроцедуры
Здесь ПараметрКоманды — это ссылка на объект (если задан параметр команды) или массив ссылок в множественном режиме. ПараметрыВыполненияКоманды хранит данные об источнике вызова — окно, навигационную ссылку.
Если команде нужны серверные данные, не пишите серверный код прямо в обработчике — он компилируется на клиенте. Вынесите запрос в серверную процедуру общего модуля и вызовите её:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Остаток = ПолучитьОстатокНаСервере(ПараметрКоманды);
ПоказатьПредупреждение(, "Свободный остаток: " + Остаток);
КонецПроцедуры
Процедуру ПолучитьОстатокНаСервере разместите в общем модуле с флагом «Сервер» и «Вызов сервера».
Для команды с параметром пригодится свойство Режим автоподстановки в параметры командной формы. Если его включить, команда сама подставит текущий объект формы как параметр, и пользователю не придётся ничего выбирать вручную.
Кнопка на форме: команда формы шаг за шагом
Когда кнопка нужна только на одной форме — например, на форме документа «Реализация товаров и услуг», — проще обойтись командой формы. Её не видно в дереве конфигурации: она живёт внутри формы.
Порядок действий в редакторе формы:
- Откройте форму и перейдите на закладку
Команды → Команды формы. - Нажмите «Добавить» и задайте имя команды, например
ЗаполнитьКомментарий. - В свойстве
Действиенажмите кнопку с лупой — платформа создаст пустой обработчик в модуле формы и перейдёт к нему. - Напишите код обработчика. Директива по умолчанию —
&НаКлиенте:
&НаКлиенте
Процедура ЗаполнитьКомментарий(Команда)
Объект.Комментарий = "Проверено " + ТекущаяДата();
Модифицированность = Истина;
КонецПроцедуры
- Вернитесь на закладку
Элементыи перетащите команду из списка команд в дерево элементов. Появится кнопка. - В свойствах кнопки задайте
Заголовок, при желанииКартинкуи способОтображение(текст, картинка или оба).
Такой обработчик напрямую видит реквизиты формы — например, Объект или Модифицированность, — чего не может команда общего типа. Это и есть главное преимущество команды формы: прямой доступ к данным открытой формы.
В типовой УТ форму нельзя править напрямую без снятия с поддержки. Чистый путь — заимствовать форму в расширение: в дереве расширения правый клик по нужной форме → Добавить в расширение, после чего команду и кнопку добавляют уже в заимствованную копию. Типовая форма при этом не меняется, а доработка переживает обновления.
Заимствуйте только саму форму, а не весь объект целиком. Чем меньше заимствовано в расширение, тем реже доработка конфликтует с обновлениями типовой.
Порядок и видимость через командный интерфейс
Свойство Группа отвечает за панель, а порядок кнопок внутри панели и видимость по ролям настраиваются в командном интерфейсе подсистемы.
Откройте нужную подсистему в дереве конфигурации, правый клик → Открыть командный интерфейс. В редакторе команды сгруппированы по панелям. Здесь можно:
- включить или выключить
Видимостькоманды галочкой; - настроить видимость отдельно для каждой роли в соседних колонках;
- менять порядок команд стрелками вверх-вниз.
Разделы УТ (Продажи, Закупки, Склад и доставка, НСИ и администрирование) в Конфигураторе — это и есть подсистемы верхнего уровня. Добавляя команду в панель действий, вы фактически подключаете её к командному интерфейсу конкретного раздела.
Ещё два механизма влияют на видимость, и их легко упустить:
- 🔒 Роли. Если у команды не стоит право доступа ни для одной роли пользователя, он её не увидит. Права настраиваются в ролях или в самом командном интерфейсе.
- 🎚️ Функциональные опции. В УТ многие возможности включаются опциями в
НСИ и администрирование. Если команда привязана к объекту, скрытому отключённой опцией, она тоже не появится.
Почему команда не появляется на панели
Самая частая жалоба после добавления команды — «создал, а кнопки нет». Разберём, что проверить по шагам, от самого вероятного к редкому.
- Не заполнена группа. У общей или объектной команды пустое свойство
Группа— платформе некуда поставить кнопку. Задайте группу панели. - Команда не включена в командный интерфейс. Даже с заданной группой её видимость могла остаться снятой в подсистеме. Откройте командный интерфейс и поставьте галочку.
- Нет прав у роли. Текущий пользователь работает под ролью без доступа к команде. Проверьте права или протестируйте под полными правами.
- Не обновлена конфигурация базы. Изменения в Конфигураторе не применились. Нажмите
Обновить конфигурацию базы данных(F7) и перезапустите 1С:Предприятие. Для расширения — тоже обновите базу. - Параметр команды не совпал. Команда с заданным типом параметра появляется только в формах объектов этого типа. Если тип указан неверно, кнопки в карточке не будет.
- Для команды формы кнопку не создали. Сама команда формы кнопкой не становится. Её нужно перетащить на закладку
Элементы.
Перед обновлением рабочей базы предупредите пользователей: обновление конфигурации базы данных в монопольном режиме прервёт активные сеансы. Выполняйте его в нерабочее время или в технологическое окно.
Отдельная причина именно для УТ — доработку вели в расширении, а оно не подключилось или отключено. Проверьте список в Конфигурация → Расширения конфигурации: расширение должно быть активно и без ошибок применения.
Частые вопросы
Можно ли добавить команду без Конфигуратора, прямо в пользовательском режиме?
Еще → Изменить форму и настройку панелей. Новая логика — это объект метаданных, он создаётся в Конфигураторе или расширении.Чем команда отличается от стандартной команды?
Создать, Найти, Провести, Пометить на удаление) платформа генерирует сама по объекту — их можно только включать и выключать. Добавляемая команда несёт вашу собственную логику в обработчике.После обновления УТ команда пропала — что не так?
Почему обработчик выдаёт ошибку компиляции или не срабатывает?
&НаКлиенте), а обращение к базе выносите в серверную процедуру общего модуля.Нужно ли перезапускать программу после добавления команды?
Обновить конфигурацию базы данных (F7) и перезайдите в 1С:Предприятие. Пока база не обновлена, новая команда в режиме предприятия не появится.