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