Своя кнопка в ЗУП 3.1: общая команда и команда формы через расширение

· 9 мин

Содержание

Команду в конфигураторе 1С:ЗУП создают не в основной конфигурации, а в расширении: Конфигурация → Расширения конфигурации → Добавить, затем в дереве расширения ветка Общие → Общие команды → Добавить или вкладка «Команды» в редакторе заимствованной формы. Дальше пишут обработчик, дают право в роли расширения и включают роль в профиль пользователей.

Частая ошибка — снять типовую ЗУП с поддержки и добавить команду прямо в неё. Кнопка заработает, но каждое обновление релиза превратится в ручное сравнение и объединение. Расширение решает ту же задачу и переживает обновления без доработки в большинстве случаев, когда разработчики 1С не меняли то, что вы заимствовали.

Подготовка: копия базы, расширение и ответственные

До первой строки кода договоритесь о трёх вещах.

  • 🧑‍💻 Кто разрабатывает. Один человек с правом «Администрирование» и доступом в конфигуратор. Два разработчика в одном расширении без хранилища мешают друг другу.
  • 🧪 Где разрабатывают. На копии рабочей базы. Выгрузите базу в .dt (Администрирование → Выгрузить информационную базу в конфигураторе) и загрузите её в отдельную тестовую базу.
  • ✅ Кто принимает. Расчётчик, для которого делается кнопка. Он проверяет результат на своих данных до переноса в рабочую базу.

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

Создайте расширение:

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

Механизм расширений появился в платформе 8.3.6. ЗУП 3.1 требует платформу заметно новее, так что расширения доступны в любой актуальной установке.

Какой вид команды выбрать

В 1С две разновидности команд, и путают их часто. От выбора зависит, где появится кнопка и как она получит данные.

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

Простое правило. Нужна одна кнопка в карточке сотрудника и в списке сотрудников — общая команда с параметром типа СправочникСсылка.Сотрудники. Нужно что-то сделать с табличной частью документа «Начисление зарплаты и взносов», пока он открыт, — команда формы.

Общая команда в конфигураторе: пошагово

Возьмём рабочий пример. Расчётчику нужна кнопка в списке сотрудников: выделить нескольких и одним щелчком получить их список, отсортированный по ФИО.

Создание объекта

  1. В дереве расширения раскройте Общие → Общие команды.
  2. Правой кнопкой — «Добавить». Имя получит префикс: мк_СписокВыделенных.
  3. Заполните «Синоним» — это текст кнопки, например «Список выделенных».
  4. В поле «Подсказка» коротко опишите действие. Пользователь увидит её при наведении.

Ключевые свойства

СвойствоЗначение в примереЧто даёт
ГруппаКомандная панель формы.ВажноеКнопка в командной панели формы списка и карточки
Тип параметра командыСправочникСсылка.СотрудникиКоманда появляется только на формах сотрудников
Режим использования параметраМножественныйВ обработчик придёт массив выделенных строк
Изменяет данныеНетКоманда видна и пользователям с правом только на чтение
ОтображениеАвтоТекст или картинка по ситуации

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

Тип параметра задаёт, где окажется команда. Укажите ПланВидовРасчетаСсылка.Начисления, и кнопка появится на формах видов начислений. Укажите ссылку на документ — в его списке и форме.

Команда без параметра в панели раздела

Иногда кнопка нужна не в форме, а в разделе, рядом с типовыми пунктами. Например, ссылка «Сверка начислений» в разделе «Зарплата», которая открывает вашу обработку.

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

Если команда в составе подсистемы не отмечена, она не появится в разделе, даже при правильной группе и правах. Порядок пунктов внутри раздела можно поменять кнопкой «Командный интерфейс» у подсистемы.

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

Обработчик команды и серверная часть

Откройте модуль команды: кнопка «Открыть» у свойства «Модуль команды» или пункт контекстного меню. Конфигуратор создаст заготовку обработчика.

Тяжёлую работу с базой выносите на сервер. Удобнее всего в общий модуль расширения:

  1. Общие → Общие модули → Добавить, имя мк_КомандыВызовСервера.
  2. Флажки: «Сервер» и «Вызов сервера». Флажок «Клиент» снимите.

Код общего модуля:

Функция СписокСотрудников(Сотрудники) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Сотрудники.Наименование КАК Наименование
	|ИЗ
	|	Справочник.Сотрудники КАК Сотрудники
	|ГДЕ
	|	Сотрудники.Ссылка В (&Сотрудники)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Наименование";
	Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
	
	Строки = Новый Массив;
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Строки.Добавить(Выборка.Наименование);
	КонецЦикла;
	
	Возврат СтрСоединить(Строки, Символы.ПС);
	
КонецФункции

Модуль команды:

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

Что здесь происходит:

  • 📥 ПараметрКоманды — массив ссылок, потому что выбран множественный режим. В одиночном режиме пришла бы одна ссылка.
  • 🪟 ПараметрыВыполненияКоманды.Источник — форма, из которой нажали кнопку. Через него можно, например, обновить список после изменения данных.
  • 🖥️ Запрос выполняется на сервере за один вызов. Сто выделенных сотрудников — всё равно один серверный вызов, а не сто.

Используйте ПоказатьПредупреждение и другие немодальные методы. В ЗУП 3.1 режим модальности обычно запрещён в свойствах конфигурации, и Предупреждение() вызовет ошибку.

Сохраните и обновите расширение: Конфигурация → Обновить конфигурацию базы данных (F7) в окне расширения.

Права на команду: роль расширения и профили доступа

Команда без права не видна никому, кроме полноправного пользователя. Это самая частая причина вопроса «я сделал кнопку, а у расчётчика её нет».

Роль в расширении

  1. Общие → Роли → Добавить, имя мк_ИспользованиеКоманд.
  2. Откройте роль. Найдите в дереве объектов свою общую команду и поставьте право «Просмотр».
  3. Если обработчик читает данные (как в примере), у пользователя должно быть право на чтение справочника «Сотрудники». У расчётчика оно уже есть из типовых ролей, повторять его в своей роли не нужно.
  4. Обновите расширение (F7).

Выдача роли пользователям

ЗУП 3.1 управляет правами через профили групп доступа, роли вручную в конфигураторе пользователям не назначают.

  1. Запустите 1С:Предприятие.
  2. Администрирование → Настройки пользователей и прав → Профили групп доступа.
  3. Скопируйте нужный поставляемый профиль, например профиль расчётчика. Поставляемые профили не редактируют, их копируют.
  4. В копии на вкладке ролей найдите мк_ИспользованиеКоманд и отметьте её.
  5. Назначьте новый профиль группе доступа, в которую входят нужные сотрудники.

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

КтоПрофильВидит команду
РасчётчикКопия профиля расчётчика + роль расширенияДа
КадровикПоставляемый профиль кадровикаНет
АдминистраторАдминистраторДа

Команда на форме документа начисления

Теперь второй вид — команда формы. Пример: на форме документа «Начисление зарплаты и взносов» кнопка, которая показывает общую сумму начислений в табличной части без закрытия документа.

Заимствование формы

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

Создание команды и кнопки

  1. В редакторе формы — вкладка «Команды», затем «Команды формы», кнопка «Добавить». Имя: мк_ИтогНачислений.
  2. В свойстве «Действие» нажмите лупу. Выберите «Создать на клиенте и процедуру на сервере».
  3. Перетащите команду из списка в нужное место дерева элементов, например в командную панель формы.

Модуль формы:

&НаКлиенте
Процедура мк_ИтогНачисленийКоманда(Команда)
	
	Итог = мк_ИтогНачисленийНаСервере();
	ПоказатьПредупреждение(, "Начислено по документу: " + Формат(Итог, "ЧДЦ=2; ЧН=0"));
	
КонецПроцедуры

&НаСервере
Функция мк_ИтогНачисленийНаСервере()
	
	Возврат Объект.Начисления.Итог("Результат");
	
КонецФункции

Перед использованием откройте свойства реквизита «Объект» заимствованной формы и проверьте точное имя табличной части и её колонки с суммой. Если имена другие, исправьте строку с Итог.

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

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

Проверка и отладка в пользовательском режиме

Запустите базу из конфигуратора: Отладка → Начать отладку (F5). Порядок проверки:

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

Если кнопка ведёт себя не так, поставьте точку останова (F9) на первой строке обработчика и нажмите кнопку ещё раз. Отладчик остановится, и в табло можно посмотреть, что пришло в ПараметрКоманды.

Список подключённых расширений в пользовательском режиме ЗУП: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там видно, активно ли расширение и в каком режиме оно подключено.

Перенос в рабочую базу

  1. В конфигураторе тестовой базы, в окне расширений: Конфигурация → Сохранить в файл для расширения — получится файл .cfe.
  2. В рабочей базе загрузите .cfe через тот же список расширений в 1С:Предприятии или через конфигуратор.
  3. Проверьте флажок «Безопасный режим». Для кода из примера он не мешает. Если команда работает с файлами или внешними компонентами, безопасный режим это запретит.
  4. Добавьте роль расширения в профиль уже в рабочей базе: профили хранятся в данных, а не в конфигурации.

Типичные ошибки при создании команды

Диагностика: выберите симптом

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

Можно ли добавить команду без конфигуратора?
Простое действие можно оформить внешней обработкой и подключить в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Полноценную общую команду в нужной группе формы создают только в конфигураторе.
Нужно ли снимать ЗУП с поддержки ради одной кнопки?
Нет. Расширение не трогает основную конфигурацию, она остаётся на полной поддержке и обновляется штатно.
Как задать сочетание клавиш для команды?
В свойствах общей команды или команды формы есть свойство «Сочетание клавиш». Не занимайте сочетания, которые уже используются платформой, например Ctrl+S.
Будет ли команда работать в веб-клиенте и через публикацию на веб-сервере?
Да, если обработчик не использует методы, недоступные веб-клиенту: работу с локальными файлами без расширения браузера, внешние компоненты и модальные окна.
Сколько команд держать в одном расширении?
Логически связанные доработки удобнее держать вместе: одно расширение для расчётного отдела, другое для кадров. Так проще отключить одну группу доработок, не задевая другую.