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