Разработка и Конфигурация · 10 мин
Как добавить кнопку в конфигураторе 1С
Как добавить кнопку на форму в конфигураторе 1С: командная панель, команды формы, обработчики на клиенте и сервере, типовые ошибки и проверка результата.
Кнопка в 1С — это почти всегда не самостоятельный элемент, а визуальное представление команды. Поэтому добавление кнопки в конфигураторе сводится к трём действиям: создать команду, разместить на форме элемент, связанный с этой командой, и написать обработчик, который выполнится при нажатии. Понимание этой связки избавляет от главной ошибки новичков — кнопки, которая отображается, но ничего не делает.
Способ добавления зависит от того, где нужна кнопка: на форме документа или справочника, в командной панели списка, в общем интерфейсе через подсистемы или в расширении конфигурации без изменения типового кода. Ниже разобраны основные сценарии для управляемых форм, которые используются в подавляющем большинстве современных конфигураций на платформе 1С:Предприятие 8.3.
Все действия выполняются в конфигураторе и требуют права на изменение конфигурации. Перед любыми доработками рабочей базы сделайте выгрузку информационной базы (файл .dt) или хотя бы сохраните конфигурацию в файл .cf — это единственный способ быстро откатить изменения при ошибке.
Где именно нужна кнопка: выбор сценария
Прежде чем открывать конфигуратор, определите место размещения кнопки, потому что от этого зависит способ реализации. Кнопка на форме объекта (документа, элемента справочника) создаётся через команду формы. Кнопка в командной панели списка обычно тоже делается командой формы списка, но часто удобнее использовать стандартную команду объекта, которая автоматически появится и в форме списка, и в форме элемента.
Если кнопка должна быть доступна из разных мест системы — например, открывать обработку из нескольких документов — рассмотрите глобальную команду интерфейса или общую команду. А если конфигурация типовая и находится на поддержке, правильнее добавлять кнопку через расширение, чтобы не потерять изменения при обновлении.
Как выбрать способ добавления
Добавление кнопки на форму объекта
Откройте конфигуратор, найдите нужный объект (например, документ «Реализация товаров»), разверните его ветку и дважды щёлкните по форме (например, «ФормаДокумента»). Откроется редактор формы с тремя ключевыми областями: дерево элементов слева вверху, вкладка «Команды» и модуль формы.
Перейдите на вкладку «Команды» и на закладке «Команды формы» нажмите «Добавить». Задайте имя команды, например «ЗаполнитьПоОстаткам», и заголовок — именно заголовок увидит пользователь на кнопке. В свойствах команды можно задать картинку, подсказку, сочетание клавиш и режим отображения (важность: обычное или важное — влияет на выделение кнопки в интерфейсе).
Теперь перетащите созданную команду из списка в дерево элементов формы — в то место, где должна находиться кнопка: в командную панель, в группу или рядом с нужным полем. Платформа автоматически создаст элемент типа «Кнопка формы», связанный с командой. Менять тип элемента вручную не требуется.
- 1Откройте форму объекта в конфигураторе
- 2На вкладке «Команды» добавьте новую команду формы, задайте имя и заголовок
- 3В свойствах команды назначьте обработчик (кнопка с лупой у поля «Действие»)
- 4Перетащите команду в дерево элементов формы в нужное место
- 5Напишите код обработчика в модуле формы
- 6Обновите конфигурацию базы данных (F7) и проверьте кнопку в режиме предприятия
Написание обработчика команды
Команда без обработчика при нажатии не выполнит ничего. Чтобы создать обработчик, в свойствах команды нажмите кнопку с лупой возле поля «Действие» — конфигуратор предложит создать процедуру в модуле формы и спросит, где она должна выполняться: на клиенте, на сервере или клиент-серверный вариант.
Выбирайте директиву осознанно. Директива &НаКлиенте подходит для действий с интерфейсом: открыть форму, показать предупреждение, задать вопрос пользователю. Директива &НаСервере нужна для обращения к данным: запросы, запись объектов, пересчёт. Типовой приём — клиентская процедура-обработчик, которая вызывает серверную процедуру для работы с данными, а затем обновляет интерфейс.
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
ЗаполнитьПоОстаткамНаСервере();
Элементы.Товары.Обновить();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
// запрос к остаткам и заполнение табличной части
КонецПроцедурыОбратите внимание: в серверной процедуре без контекста (&НаСервереБезКонтекста) недоступны данные формы напрямую — объект нужно получать через РеквизитФормыВЗначение("Объект"). Для большинства кнопок на форме документа удобнее контекстный серверный вызов &НаСервере, где реквизиты формы доступны напрямую.
Кнопка в командной панели списка и команде объекта
Если кнопка должна быть в форме списка (например, «Печать реестра» над списком документов), логика та же: откройте форму списка, добавьте команду формы, перетащите её в командную панель. Но учтите особенность: в форме списка нет текущего объекта в реквизитах, есть только выделенные строки. Получить выбранные документы можно через Элементы.Список.ВыделенныеСтроки.
Альтернатива — команда самого объекта метаданных. Откройте документ или справочник в дереве конфигурации, перейдите на вкладку «Команды» (или «Команды объекта» в свойствах) и добавьте команду там. Такая команда автоматически появляется в командной панели формы списка и формы элемента, а её обработчик пишется в модуле менеджера объекта с параметром — ссылкой на объект или массивом ссылок.
Команда объекта предпочтительнее, когда действие привязано к самому прикладному объекту (печать, создание на основании, обработка выбранных элементов), потому что не требует доработки каждой формы отдельно и централизованно хранится в одном месте.
Добавление кнопки через расширение конфигурации
Для типовых конфигураций на поддержке прямое изменение форм приведёт к сложностям при обновлении. Расширение решает эту проблему: в меню «Конфигурация» выберите «Расширения конфигурации», создайте новое расширение, задайте имя и префикс. Затем в основной конфигурации найдите нужную форму, вызовите контекстное меню и выберите «Добавить в расширение».
В расширенной форме добавляйте команду и кнопку точно так же, как описано выше. Обработчики пишутся в модуле формы расширения с директивами &После("ИмяПроцедуры"), &Вместо("ИмяПроцедуры") или как отдельные процедуры для новых команд. Новые команды расширения не конфликтуют с типовыми, если имена уникальны — используйте префикс расширения в имени команды.
Проверка результата и типичные ошибки
После добавления кнопки обновите конфигурацию базы данных (клавиша F7 или меню «Конфигурация — Обновить конфигурацию базы данных»), запустите режим предприятия и откройте нужную форму. Проверьте: кнопка видна, имеет понятный заголовок, при нажатии выполняется ожидаемое действие, при повторном нажатии нет ошибок и дублирования данных.
Как проверить результат
Кнопка видна в ожидаемом месте формы с заданным заголовком
Кнопки нет — команда не перетащена в дерево элементов или скрыта функциональной опцией
Выполняется код обработчика, форма обновляется
Ничего не происходит — не назначен обработчик в свойстве «Действие» команды
Данные записываются и читаются корректно
Ошибка «Поле не обнаружено» — обращение к данным объекта в клиентской процедуре
Кнопка работает у целевых пользователей
У пользователя нет права на объект — кнопка падает с ошибкой доступа
Ещё одна частая ситуация: кнопка добавлена, но не видна конкретному пользователю. Проверьте функциональные опции, роли и права на объект, а также свойство «Видимость» элемента — оно может управляться программно в типовом коде формы.
Что важно запомнить
Кнопка в 1С = команда + элемент формы + обработчик. Создавайте команду формы для частных случаев, команду объекта — для действий, общих для списка и элемента, расширение — для типовых конфигураций. Обработчик на клиенте отвечает за интерфейс, на сервере — за данные. Перед доработкой рабочей базы всегда делайте резервную копию.
Частые вопросы
Можно ли добавить кнопку без программирования?
Частично. Стандартные команды (записать, провести, печать) уже имеют обработчики — достаточно перетащить их в нужное место формы. Но любая кнопка с прикладной логикой требует написания обработчика на встроенном языке.
Почему кнопка есть в конфигураторе, но не видна в режиме предприятия?
Чаще всего не обновлена конфигурация базы данных (F7), команда не перенесена в дерево элементов, либо видимость элемента отключена функциональной опцией или программно в коде формы. Проверьте также права пользователя на объект.
Как добавить кнопку в табличную часть документа?
У табличной части есть своя командная панель. Создайте команду формы и перетащите её в элемент «КоманднаяПанель» внутри группы табличной части. В обработчике текущая строка доступна через Элементы.ИмяТаблицы.ТекущиеДанные.
Чем команда формы отличается от глобальной команды?
Команда формы существует только внутри конкретной формы и её обработчик пишется в модуле этой формы. Глобальная (общая) команда доступна из интерфейса всей прикладной решения и её обработчик размещается в общем модуле.
Как сделать кнопку с картинкой?
В свойствах команды задайте картинку из библиотеки картинок или общей картинки конфигурации. В свойствах элемента-кнопки выберите отображение: только картинка, картинка с текстом или автоматически. Для кнопок командной панели рекомендуется формат PNG с прозрачным фоном.
Можно ли временно скрыть кнопку, не удаляя её?
Да. Установите у элемента формы свойство «Видимость» в значение «Ложь» или управляйте видимостью программно: Элементы.ИмяКнопки.Видимость = Ложь. Это удобно, когда кнопка должна появляться только при определённых условиях, например при конкретном статусе документа.