Разработка и Конфигурация · 11 мин
Команда в 1С: что это такое и как с ней работать
Команда в 1С — это объект, который запускает действие по нажатию кнопки. Разбираем виды команд, создание своей команды формы и глобальной команды.
Команда в 1С — это именованное действие, которое система выполняет, когда пользователь нажимает кнопку, пункт меню или гиперссылку в интерфейсе. Проще говоря, команда связывает элемент интерфейса (кнопку) с программным кодом или стандартным поведением платформы. Без команд формы были бы просто набором полей: именно команды заставляют документ провестись, список — обновиться, а отчёт — сформироваться.
Команды встречаются на всех уровнях работы с 1С. Пользователь видит их как кнопки «Записать», «Провести», «Печать», «Создать». Разработчик работает с командами в конфигураторе: создаёт собственные команды форм, глобальные команды интерфейса и обработчики, которые выполняются при вызове команды. Понимание того, как устроены команды, нужно и при доработке конфигурации, и при обычной настройке формы под себя.
В этой статье разберём, какие виды команд существуют в платформе 1С:Предприятие, чем команда формы отличается от глобальной команды, как создать свою команду с обработчиком и какие ошибки при этом встречаются чаще всего.
Что такое команда в 1С простыми словами
Команда — это посредник между интерфейсом и логикой программы. Когда вы нажимаете кнопку «Провести» в документе, происходит следующее: кнопка ссылается на команду, команда запускает обработчик — фрагмент кода на встроенном языке 1С, — и этот код выполняет проведение документа. Сама кнопка ничего не «умеет»: она лишь визуальное представление команды.
Такое разделение удобно тем, что одну и ту же команду можно вывести в нескольких местах: в командной панели формы, в контекстном меню таблицы, в меню «Ещё». Меняется только размещение кнопки, а логика остаётся единой. Кроме того, платформа автоматически управляет доступностью команд: например, кнопка «Провести» недоступна, пока документ не записан.
Команды существуют и в управляемых, и в обычных формах, но механика работы отличается. В управляемых формах (современный интерфейс «Такси») команды — основной способ взаимодействия пользователя с формой, а обработчики строго разделяются на клиентские и серверные. В обычных формах устаревших приложений команды привязывались к кнопкам напрямую, без жёсткого разделения контекста.
Виды команд в платформе 1С
Платформа предоставляет несколько категорий команд, и важно понимать, чем они различаются по области действия и способу создания.
- Стандартные (встроенные) команды — поставляются самой платформой: «Записать», «Провести», «Пометить на удаление», «Обновить», «Найти». Они появляются на формах автоматически и не требуют программирования.
- Команды формы — создаются разработчиком в конкретной форме и действуют только внутри неё. Например, кнопка «Заполнить по остаткам» в документе инвентаризации.
- Глобальные команды — объекты конфигурации, доступные во всём прикладном решении: в панели навигации, в меню «Файл», в командном интерфейсе разделов. Пример — команда открытия обработки или отчёта.
- Команды объектов метаданных — команды, заданные у справочников, документов, отчётов. Отображаются в формах этих объектов и в командном интерфейсе.
- Параметризуемые команды — команды, которым при вызове передаётся параметр (например, ссылка на текущий элемент списка). На их основе строятся кнопки вида «Открыть по текущему документу».
Командa формы или глобальная команда
Подходит, когда действие нужно только внутри одной формы и работает с её данными. Не видна за пределами формы.
Подходит, когда действие должно быть доступно из интерфейса всего приложения — например, открытие обработки из раздела. Требует создания объекта метаданных.
Подходит для типовых операций (запись, проведение, поиск). Не требует кода, но её поведение нельзя изменить — только перехватить событиями.
Где пользователь встречает команды в интерфейсе
В режиме 1С:Предприятие команды распределены по нескольким зонам интерфейса. Панель навигации раздела содержит команды перехода к спискам и отчётам. Командная панель формы — верхняя полоса с кнопками — содержит основные действия над объектом. Меню «Ещё» собирает редко используемые команды, чтобы не перегружать панель.
Контекстное меню табличных частей и списков тоже построено на командах: «Копировать», «Изменить», «Установить пометку удаления». Кроме того, пользователь может вывести на форму дополнительные команды через настройку формы («Ещё» → «Изменить форму»), если они предусмотрены конфигурацией, но скрыты по умолчанию.
Полезно знать, что у многих команд есть сочетания клавиш. Например, запись объекта обычно доступна по Ctrl+S, а поиск по списку — по Ctrl+F. Сочетания назначаются в свойствах команды и могут отличаться в зависимости от конфигурации.
Как создать свою команду формы в конфигураторе
Создание собственной команды — базовая задача при доработке любой формы. Рассмотрим последовательность на примере управляемой формы документа.
- 1Откройте форму объекта в конфигураторе и перейдите на вкладку «Команды» — «Команды формы».
- 2Добавьте новую команду, задайте имя (например, ЗаполнитьПоОстаткам) и синоним — текст, который увидит пользователь.
- 3В свойствах команды нажмите кнопку открытия обработчика — конфигуратор создаст процедуру в модуле формы.
- 4Выберите контекст обработчика: клиент, сервер или клиент-сервер. Для работы с данными базы нужен серверный вызов.
- 5Напишите код обработчика на встроенном языке.
- 6Перетащите команду из списка в дерево элементов формы — появится кнопка. Разместите её в командной панели или рядом с нужным полем.
- 7Обновите конфигурацию базы данных (F7) и проверьте работу кнопки в режиме предприятия.
Минимальный обработчик команды выглядит так:
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
ЗаполнитьПоОстаткамНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
// запрос остатков и заполнение табличной части
КонецПроцедуры
Обратите внимание на разделение контекстов. Клиентский обработчик вызывается непосредственно при нажатии кнопки, но в нём недоступны запросы к базе данных. Поэтому типовой шаблон — клиентская процедура вызывает серверную, которая выполняет основную работу. Директивы &НаКлиенте и &НаСервере обязательны: без них код не скомпилируется в управляемой форме.
После создания команды проверьте её видимость. Если кнопка не появилась в режиме предприятия, чаще всего команда просто не перетащена в дерево элементов формы либо у элемента снят флаг видимости. Также убедитесь, что пользователь имеет права на объект, с которым работает обработчик, — иначе команда будет видна, но вызовет ошибку доступа.
Глобальные команды и командный интерфейс
Глобальная команда создаётся как отдельный объект в ветке «Общие» → «Команды» дерева конфигурации. У неё есть тип команды — он определяет, что произойдёт при вызове: откроется форма обработки, отчёта, выполнится произвольный код из модуля команды.
Чтобы глобальная команда появилась у пользователя, её нужно включить в командный интерфейс подсистемы. Откройте свойства подсистемы, перейдите к командному интерфейсу и установите флаг видимости для своей команды. Порядок команд и их группировка настраиваются там же — перетаскиванием в списке.
Глобальные команды удобны для выноса в интерфейс вспомогательных инструментов: обработок загрузки данных, служебных отчётов, настроек. Не стоит выносить туда действия, относящиеся к конкретному документу, — для них логичнее команды формы или команды объекта метаданных.
Типичные ошибки при работе с командами
Большинство проблем с командами возникает из-за непонимания контекстов исполнения и механики размещения кнопок на форме.
Отдельного внимания заслуживает способ доработки. Если нужно добавить команду в форму типовой конфигурации, находящейся на поддержке, правильный путь — использовать расширение конфигурации. Прямое изменение типовой формы снимет её с полной поддержки и усложнит обновления. Расширение позволяет добавить команду, обработчик и кнопку, не затрагивая исходный код поставщика.
Как проверить, что команда работает правильно
После создания или изменения команды пройдите короткий контроль. Он занимает несколько минут и отсекает большинство ошибок до того, как с кнопкой начнут работать пользователи.
Как проверить результат
Кнопка видна в командной панели и доступна для нажатия
Кнопки нет — команда не добавлена в дерево элементов или скрыта настройками
Код отрабатывает без ошибок, результат виден на форме или в данных
Ошибка вызова — проверьте контекст процедуры и права доступа
Повторный вызов не создаёт дублей и не портит данные
Каждое нажатие дублирует строки или записи — нужна защита в коде
Команда выполняется или корректно сообщает о нехватке прав
Непонятная ошибка доступа — не хватает прав в роли
Для отладки серверных обработчиков используйте точки останова в конфигураторе с запуском отладки (F5). Если обработчик клиентский, убедитесь, что в настройках отладки разрешена отладка клиентских процедур. Сообщения пользователю через метод Сообщить() помогают понять, до какого места доходит выполнение кода.
FAQ: частые вопросы о командах в 1С
Чем команда отличается от кнопки в 1С?
Кнопка — это элемент формы, визуальное представление. Команда — само действие с обработчиком. Кнопка ссылается на команду через свойство «ИмяКоманды». Одна команда может быть выведена несколькими кнопками в разных местах формы.
Можно ли добавить свою команду без программирования?
Частично. Стандартные команды можно выводить на форму через настройку формы без кода. Но команда с собственной логикой всегда требует обработчика на встроенном языке — без него кнопка ничего не сделает.
Почему команда видна администратору, но не видна пользователю?
Причина почти всегда в правах. Проверьте, есть ли у роли пользователя права на объект, с которым работает команда, и включена ли команда в командный интерфейс подсистемы, доступной этой роли.
Как добавить команду в типовую конфигурацию, не нарушая поддержку?
Используйте расширение конфигурации: создайте расширение, заимствуйте нужную форму, добавьте команду и обработчик в ней. Типовая форма останется нетронутой, а доработка сохранится при обновлениях.
Что делать, если при нажатии кнопки возникает ошибка «Метод недоступен»?
Обычно это признак неверного контекста: серверный метод вызван из клиентской процедуры или наоборот. Проверьте директивы компиляции (&НаКлиенте, &НаСервере) и перенесите работу с базой данных в серверную процедуру.
Можно ли одной командой выполнять разные действия в зависимости от условий?
Да. Внутри обработчика можно проверять любые условия — состояние объекта, права, отборы — и выполнять разные ветки кода. Но если логика принципиально разная, понятнее создать две отдельные команды с говорящими названиями.
Что важно запомнить
Команда в 1С — это действие, привязанное к кнопке или пункту меню. Команды бывают стандартные, формы и глобальные. Своя команда создаётся в конфигураторе: команда, обработчик с правильным контекстом, кнопка на форме. Типовые формы дорабатывайте через расширения и проверяйте результат на копии базы.