Своя кнопка в ЗУП 3.1: общая команда и команда формы через расширение
Содержание
Команду в конфигураторе 1С:ЗУП создают не в основной конфигурации, а в расширении: Конфигурация → Расширения конфигурации → Добавить, затем в дереве расширения ветка Общие → Общие команды → Добавить или вкладка «Команды» в редакторе заимствованной формы. Дальше пишут обработчик, дают право в роли расширения и включают роль в профиль пользователей.
Частая ошибка — снять типовую ЗУП с поддержки и добавить команду прямо в неё. Кнопка заработает, но каждое обновление релиза превратится в ручное сравнение и объединение. Расширение решает ту же задачу и переживает обновления без доработки в большинстве случаев, когда разработчики 1С не меняли то, что вы заимствовали.
Подготовка: копия базы, расширение и ответственные
До первой строки кода договоритесь о трёх вещах.
- 🧑💻 Кто разрабатывает. Один человек с правом «Администрирование» и доступом в конфигуратор. Два разработчика в одном расширении без хранилища мешают друг другу.
- 🧪 Где разрабатывают. На копии рабочей базы. Выгрузите базу в
.dt(Администрирование → Выгрузить информационную базув конфигураторе) и загрузите её в отдельную тестовую базу. - ✅ Кто принимает. Расчётчик, для которого делается кнопка. Он проверяет результат на своих данных до переноса в рабочую базу.
Загрузка .dt полностью заменяет данные базы, в которую загружают. Загружайте только в пустую или тестовую базу, никогда не в рабочую.
Создайте расширение:
- Откройте тестовую базу в режиме «Конфигуратор».
- Меню
Конфигурация → Расширения конфигурации, кнопка «Добавить». - Заполните имя (например,
МоиКоманды) и префикс (мк_). Префикс конфигуратор подставит в имена новых объектов, чтобы они не пересеклись с типовыми. - Назначение — «Дополнение»: так помечают расширения с новой функциональностью.
- Откройте конфигурацию расширения двойным щелчком.
Механизм расширений появился в платформе 8.3.6. ЗУП 3.1 требует платформу заметно новее, так что расширения доступны в любой актуальной установке.
Какой вид команды выбрать
В 1С две разновидности команд, и путают их часто. От выбора зависит, где появится кнопка и как она получит данные.
| Вид | Где создаётся | Где видна | Когда выбирать |
|---|---|---|---|
| Общая команда без параметра | Общие → Общие команды | Панель раздела, если включена в подсистему | Открыть обработку, отчёт, список |
| Общая команда с параметром | Общие → Общие команды | Все формы объектов указанного типа | Действие над сотрудником, документом, видом начисления |
| Команда формы | Вкладка «Команды» редактора формы | Только на этой форме | Действие с данными открытой формы, в том числе несохранёнными |
Простое правило. Нужна одна кнопка в карточке сотрудника и в списке сотрудников — общая команда с параметром типа СправочникСсылка.Сотрудники. Нужно что-то сделать с табличной частью документа «Начисление зарплаты и взносов», пока он открыт, — команда формы.
Общая команда в конфигураторе: пошагово
Возьмём рабочий пример. Расчётчику нужна кнопка в списке сотрудников: выделить нескольких и одним щелчком получить их список, отсортированный по ФИО.
Создание объекта
- В дереве расширения раскройте
Общие → Общие команды. - Правой кнопкой — «Добавить». Имя получит префикс:
мк_СписокВыделенных. - Заполните «Синоним» — это текст кнопки, например «Список выделенных».
- В поле «Подсказка» коротко опишите действие. Пользователь увидит её при наведении.
Ключевые свойства
| Свойство | Значение в примере | Что даёт |
|---|---|---|
| Группа | Командная панель формы.Важное | Кнопка в командной панели формы списка и карточки |
| Тип параметра команды | СправочникСсылка.Сотрудники | Команда появляется только на формах сотрудников |
| Режим использования параметра | Множественный | В обработчик придёт массив выделенных строк |
| Изменяет данные | Нет | Команда видна и пользователям с правом только на чтение |
| Отображение | Авто | Текст или картинка по ситуации |
Другие полезные группы: Панель навигации формы.Перейти — ссылка слева в карточке, Командная панель формы.Создать на основании — для команд, которые создают новый объект.
Тип параметра задаёт, где окажется команда. Укажите ПланВидовРасчетаСсылка.Начисления, и кнопка появится на формах видов начислений. Укажите ссылку на документ — в его списке и форме.
Команда без параметра в панели раздела
Иногда кнопка нужна не в форме, а в разделе, рядом с типовыми пунктами. Например, ссылка «Сверка начислений» в разделе «Зарплата», которая открывает вашу обработку.
- Создайте общую команду и оставьте «Тип параметра команды» пустым.
- Группа:
Панель навигации.Обычное, если это ссылка на список или форму, илиПанель действий.Сервис, если это действие либо обработка. - В основной конфигурации найдите подсистему раздела, правой кнопкой — «Добавить в расширение».
- Откройте заимствованную подсистему в расширении, на вкладке «Состав» отметьте свою команду.
- Обновите расширение и откройте раздел в 1С:Предприятии.
Если команда в составе подсистемы не отмечена, она не появится в разделе, даже при правильной группе и правах. Порядок пунктов внутри раздела можно поменять кнопкой «Командный интерфейс» у подсистемы.
Подсистемы ЗУП имеют вложенную структуру. Если раздел «Зарплата» содержит дочерние подсистемы, команда, добавленная в родительскую, окажется на общем уровне раздела. Для конкретной группы ссылок заимствуйте именно дочернюю подсистему.
Обработчик команды и серверная часть
Откройте модуль команды: кнопка «Открыть» у свойства «Модуль команды» или пункт контекстного меню. Конфигуратор создаст заготовку обработчика.
Тяжёлую работу с базой выносите на сервер. Удобнее всего в общий модуль расширения:
Общие → Общие модули → Добавить, имямк_КомандыВызовСервера.- Флажки: «Сервер» и «Вызов сервера». Флажок «Клиент» снимите.
Код общего модуля:
Функция СписокСотрудников(Сотрудники) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Наименование КАК Наименование
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В (&Сотрудники)
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Строки = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строки.Добавить(Выборка.Наименование);
КонецЦикла;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункции
Модуль команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Текст = мк_КомандыВызовСервера.СписокСотрудников(ПараметрКоманды);
ПоказатьПредупреждение(, Текст);
КонецПроцедуры
Что здесь происходит:
- 📥
ПараметрКоманды— массив ссылок, потому что выбран множественный режим. В одиночном режиме пришла бы одна ссылка. - 🪟
ПараметрыВыполненияКоманды.Источник— форма, из которой нажали кнопку. Через него можно, например, обновить список после изменения данных. - 🖥️ Запрос выполняется на сервере за один вызов. Сто выделенных сотрудников — всё равно один серверный вызов, а не сто.
Используйте ПоказатьПредупреждение и другие немодальные методы. В ЗУП 3.1 режим модальности обычно запрещён в свойствах конфигурации, и Предупреждение() вызовет ошибку.
Сохраните и обновите расширение: Конфигурация → Обновить конфигурацию базы данных (F7) в окне расширения.
Права на команду: роль расширения и профили доступа
Команда без права не видна никому, кроме полноправного пользователя. Это самая частая причина вопроса «я сделал кнопку, а у расчётчика её нет».
Роль в расширении
Общие → Роли → Добавить, имямк_ИспользованиеКоманд.- Откройте роль. Найдите в дереве объектов свою общую команду и поставьте право «Просмотр».
- Если обработчик читает данные (как в примере), у пользователя должно быть право на чтение справочника «Сотрудники». У расчётчика оно уже есть из типовых ролей, повторять его в своей роли не нужно.
- Обновите расширение (F7).
Выдача роли пользователям
ЗУП 3.1 управляет правами через профили групп доступа, роли вручную в конфигураторе пользователям не назначают.
- Запустите 1С:Предприятие.
Администрирование → Настройки пользователей и прав → Профили групп доступа.- Скопируйте нужный поставляемый профиль, например профиль расчётчика. Поставляемые профили не редактируют, их копируют.
- В копии на вкладке ролей найдите
мк_ИспользованиеКоманди отметьте её. - Назначьте новый профиль группе доступа, в которую входят нужные сотрудники.
Такое распределение ролей позволяет дать кнопку только расчётной группе, а кадровикам — нет.
| Кто | Профиль | Видит команду |
|---|---|---|
| Расчётчик | Копия профиля расчётчика + роль расширения | Да |
| Кадровик | Поставляемый профиль кадровика | Нет |
| Администратор | Администратор | Да |
Команда на форме документа начисления
Теперь второй вид — команда формы. Пример: на форме документа «Начисление зарплаты и взносов» кнопка, которая показывает общую сумму начислений в табличной части без закрытия документа.
Заимствование формы
- В дереве основной конфигурации найдите документ «Начисление зарплаты и взносов» и его основную форму.
- Правой кнопкой по форме — «Добавить в расширение». Конфигуратор заимствует документ и форму, в расширении появится её копия.
- Откройте заимствованную форму в расширении.
Создание команды и кнопки
- В редакторе формы — вкладка «Команды», затем «Команды формы», кнопка «Добавить». Имя:
мк_ИтогНачислений. - В свойстве «Действие» нажмите лупу. Выберите «Создать на клиенте и процедуру на сервере».
- Перетащите команду из списка в нужное место дерева элементов, например в командную панель формы.
Модуль формы:
&НаКлиенте
Процедура мк_ИтогНачисленийКоманда(Команда)
Итог = мк_ИтогНачисленийНаСервере();
ПоказатьПредупреждение(, "Начислено по документу: " + Формат(Итог, "ЧДЦ=2; ЧН=0"));
КонецПроцедуры
&НаСервере
Функция мк_ИтогНачисленийНаСервере()
Возврат Объект.Начисления.Итог("Результат");
КонецФункции
Перед использованием откройте свойства реквизита «Объект» заимствованной формы и проверьте точное имя табличной части и её колонки с суммой. Если имена другие, исправьте строку с Итог.
Команда формы работает с данными на экране, в том числе несохранёнными. Это главное отличие от общей команды, которая получает только ссылку на записанный объект.
Для видов начислений, табельных данных и выработки подход тот же: заимствуйте форму нужного документа или справочника и добавьте команду. Поменяется только код обработчика.
Проверка и отладка в пользовательском режиме
Запустите базу из конфигуратора: Отладка → Начать отладку (F5). Порядок проверки:
Если кнопка ведёт себя не так, поставьте точку останова (F9) на первой строке обработчика и нажмите кнопку ещё раз. Отладчик остановится, и в табло можно посмотреть, что пришло в ПараметрКоманды.
Список подключённых расширений в пользовательском режиме ЗУП: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там видно, активно ли расширение и в каком режиме оно подключено.
Перенос в рабочую базу
- В конфигураторе тестовой базы, в окне расширений:
Конфигурация → Сохранить в файлдля расширения — получится файл.cfe. - В рабочей базе загрузите
.cfeчерез тот же список расширений в 1С:Предприятии или через конфигуратор. - Проверьте флажок «Безопасный режим». Для кода из примера он не мешает. Если команда работает с файлами или внешними компонентами, безопасный режим это запретит.
- Добавьте роль расширения в профиль уже в рабочей базе: профили хранятся в данных, а не в конфигурации.
Типичные ошибки при создании команды
Частые вопросы
Можно ли добавить команду без конфигуратора?
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Полноценную общую команду в нужной группе формы создают только в конфигураторе.