К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как добавить кнопку в документе 1С

Как добавить кнопку на форму документа в 1С через конфигуратор: создание команды, обработчика, размещение в командной панели и типичные ошибки.

Кнопка на форме документа в 1С решает самые разные задачи: быстрый расчёт суммы, заполнение табличной части по шаблону, вызов печатной формы, отправка данных во внешний сервис. Добавить её можно двумя способами — через конфигуратор с изменением формы документа или программно, без правки конфигурации, через расширение. Выбор зависит от того, есть ли у вас доступ к конфигуратору и стоит ли база на поддержке.

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

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

Что нужно подготовить перед добавлением кнопки

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

Сделайте резервную копию базы или хотя бы выгрузку конфигурации в файл cf. Это позволит вернуться к рабочему состоянию, если доработка формы приведёт к ошибкам. Для типовой конфигурации дополнительно проверьте, стоит ли она на поддержке: меню «Конфигурация → Поддержка → Настройка поддержки».

Способ 1: добавление кнопки через конфигуратор

Откройте конфигуратор, в дереве конфигурации найдите ветку «Документы», раскройте нужный документ и дважды щёлкните по форме документа (обычно она называется «ФормаДокумента»). Если формы нет, создайте её: правой кнопкой по документу — «Добавить» — «Форма документа».

В редакторе формы перейдите на вкладку «Команды» — «Команды формы» и нажмите «Добавить». Задайте имя команды, например «ЗаполнитьПоШаблону», и заголовок — именно он будет отображаться на кнопке. В поле «Действие» нажмите кнопку выбора, чтобы платформа автоматически создала процедуру-обработчик в модуле формы.

Теперь разместите кнопку: перетащите команду из списка команд в дерево элементов формы — в «КоманднаяПанель» или в конкретную группу, например рядом с табличной частью. Платформа создаст элемент типа «Кнопка формы», связанный с вашей командой. Обновите конфигурацию базы данных (F7) и проверьте результат в режиме предприятия.

Порядок действий в конфигураторе
  1. 1
    Откройте форму документа в конфигураторе
  2. 2
    На вкладке «Команды» добавьте новую команду формы с именем и заголовком
  3. 3
    Создайте обработчик команды через поле «Действие»
  4. 4
    Перетащите команду в дерево элементов — в командную панель или группу
  5. 5
    Сохраните форму и обновите конфигурацию базы данных (F7)
  6. 6
    Откройте документ в режиме 1С:Предприятие и проверьте кнопку

Написание обработчика команды

Обработчик команды — это процедура в модуле формы, которая выполняется при нажатии кнопки. Если команда работает только с данными на клиенте (например, показывает предупреждение или открывает другую форму), достаточно клиентской процедуры. Если нужно изменить данные документа на сервере — добавьте серверный вызов.

Типичный шаблон выглядит так: клиентская процедура обрабатывает нажатие и вызывает серверную процедуру с директивой &НаСервере, которая работает с объектом документа через РеквизитФормыВЗначение("Объект") и возвращает изменения обратно.

bsl
&НаКлиенте
Процедура ЗаполнитьПоШаблону(Команда)
	ЗаполнитьПоШаблонуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПоШаблонуНаСервере()
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	// здесь логика заполнения табличной части
	ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры

После изменения данных на сервере форма может потребовать обновления отображения — используйте ЭтаФорма.Прочитать() или установите признак модифицированности ЭтаФорма.Модифицированность = Истина, чтобы пользователь не потерял изменения при закрытии.

Способ 2: кнопка через расширение конфигурации

Расширение — рекомендуемый способ для типовых конфигураций. В конфигураторе откройте «Конфигурация → Расширения конфигурации», создайте новое расширение с осмысленным именем и префиксом. Затем в дереве конфигурации найдите форму документа, вызовите контекстное меню и выберите «Добавить в расширение».

В заимствованной форме добавьте команду и кнопку так же, как в основной конфигурации. Обработчик пишется в модуле формы расширения с директивами &После("ИмяПроцедуры") или как полностью новая процедура, если команда ваша собственная. Изменения из расширения применяются без обновления конфигурации базы данных — достаточно перезапустить сеанс.

Где разместить кнопку: командная панель, группа, табличная часть

Место размещения влияет на удобство. Общие действия над документом (заполнение, пересчёт, печать) логично размещать в основной командной панели формы. Действия над конкретной табличной частью — в её собственной командной панели, чтобы пользователь видел связь кнопки с данными.

Для редко используемых команд добавьте кнопку в подменю «Ещё», чтобы не перегружать интерфейс. Для важных действий можно задать свойство «Картинка» у кнопки и «Отображение» — «Картинка и надпись» или «Надпись». Проверяйте, что кнопка видна при типовой ширине окна: длинные заголовки обрезаются.

Сравнение способов добавления

Изменение формы в конфигураторе

Подходит для собственных и снятых с поддержки конфигураций. Просто и наглядно, но усложняет обновление типовых решений.

Расширение конфигурации

Рекомендуется для типовых конфигураций на поддержке. Не затрагивает основную конфигурацию, обновления проходят штатно. Ограничение: не все элементы типовой формы можно изменить.

Программное создание кнопки

Кнопка создаётся кодом в обработчике ПриСозданииНаСервере. Гибко, но сложнее сопровождать; обычно применяется в дополнительных отчётах и обработках БСП.

Проверка результата и типичные ошибки

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

Если кнопка не появилась, чаще всего причина в том, что команда создана, но не перенесена в дерево элементов формы, либо форма документа не обновилась из-за активных сеансов. Если при нажатии возникает ошибка «Процедура или функция с указанным именем не определена» — имя обработчика в свойстве «Действие» не совпадает с именем процедуры в модуле.

Типичные ошибки
01
Команда создана, но не добавлена в дерево элементов — кнопка не видна на форме
02
Обработчик объявлен как &НаСервере, но вызывается напрямую из клиентского контекста без клиентской обёртки — ошибка компиляции
03
Изменение данных объекта на сервере без ЗначениеВРеквизитФормы — изменения не отображаются на форме
04
Доработка типовой формы напрямую вместо расширения — конфликты при обновлении конфигурации
05
Отсутствие проверки прав: кнопка удаления или изменения данных доступна пользователям без соответствующих прав

Ограничения и частые вопросы

В обычных формах (платформа 8.2, режим обычного приложения) механика другая: кнопка добавляется прямо в редакторе формы, а обработчик привязывается через событие «Нажатие». В управляемых формах такого события нет — только команды. Если ваша конфигурация старая, уточните тип формы перед началом работы.

Учитывайте, что доработка формы — это изменение конфигурации, которое унаследуют все пользователи базы. Для разовой задачи одного сотрудника иногда проще использовать внешнюю обработку с командой заполнения, подключаемую через механизм «Дополнительные отчеты и обработки» — тогда конфигурация вообще не меняется.

Итог

Что важно запомнить

Кнопка в управляемой форме документа — это команда формы плюс элемент «Кнопка» в дереве элементов плюс обработчик в модуле. Для типовых конфигураций используйте расширение, всегда делайте резервную копию и проверяйте результат на тестовом документе.

Можно ли добавить кнопку в документ 1С без конфигуратора?

Частично да. Через механизм «Дополнительные отчеты и обработки» (в конфигурациях на БСП) можно подключить внешнюю обработку заполнения, и кнопка появится в меню «Заполнение» или «Ещё» без изменения конфигурации. Полностью произвольную кнопку в произвольном месте формы без конфигуратора или расширения добавить нельзя.

Почему кнопка видна в конфигураторе, но не отображается у пользователя?

Основные причины: не обновлена конфигурация базы данных, у пользователя открыт старый сеанс, у расширения снят флаг активности или у пользователя нет прав на объект. Также проверьте свойство «Видимость» кнопки и родительской группы — оно могло быть отключено программно.

Как сделать кнопку недоступной до заполнения обязательных полей?

Используйте свойство «Доступность» элемента формы и управляйте им программно в обработчиках ПриОткрытии и ПриИзменении нужных полей: Элементы.ЗаполнитьПоШаблону.Доступность = ЗначениеЗаполнено(Объект.Контрагент);.

Чем отличается команда формы от команды объекта?

Команда объекта (документа) описывается в метаданных документа и доступна в командном интерфейсе списка и объекта. Команда формы существует только внутри конкретной формы и используется для кнопок на ней. Для кнопки на форме обычно достаточно команды формы.

Можно ли добавить кнопку в табличную часть документа?

Да. Создайте команду формы и перетащите её в командную панель табличной части в дереве элементов. В обработчике обращайтесь к текущей строке через Элементы.Товары.ТекущиеДанные. Для работы с выделенными строками используйте Элементы.Товары.ВыделенныеСтроки.