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

Эта статья охватывает все аспекты — от добавления кнопки через конструктор форм до написания обработчиков на встроенном языке . Мы разберём типовые сценарии (например, кнопки в документах или справочниках), нюансы работы с управляемыми и обычными формами, а также распространённые ошибки, которые мешают кнопкам функционировать. Особое внимание уделено совместимости с последними версиями платформы 8.3.20+, где изменились некоторые подходы к формированию интерфейса.

Способы добавления кнопок в 1С: обзор вариантов

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

Рассмотрим основные подходы:

  • 🔧 Через конструктор форм — самый простой способ для новичков. Подходит для управляемых форм и не требует знания программирования.
  • 💻 Программное создание — гибкий метод с использованием языка . Позволяет динамически добавлять кнопки в зависимости от условий.
  • 📄 Редактирование макета формы — ручная правка XML-кода формы (для опытных разработчиков).
  • 🔄 Наследование и переопределение — изменение стандартных форм без нарушения обновляемости.

Например, если вам нужно добавить кнопку "Печать" в документ "Реализация товаров", проще всего воспользоваться конструктором. А для динамического отображения кнопки "Утвердить" только пользователям с определённой ролью потребуется программный код.

📊 Какой способ создания кнопок в 1С вы используете чаще?
Конструктор форм
Программный код
Редактирование XML
Наследование форм

Создание кнопки через конструктор форм (пошагово)

Это базовый метод, который подойдёт даже тем, кто никогда не работал с конфигуратором . Рассмотрим процесс на примере добавления кнопки в управляемую форму справочника "Номенклатура".

  1. Откройте конфигуратор и найдите нужный объект (например, справочник "Номенклатура").
  2. Перейдите в раздел Формы → Форма элемента (или форма списка, если кнопка нужна там).
  3. В верхней панели конструктора выберите вкладку Элементы и нажмите "Добавить команду".
  4. В появившемся окне укажите:
    • 📌 Имя команды — например, ПечатьЭтикетки.
    • 📝 Заголовок — "Печать этикеток" (это текст, который увидит пользователь).
    • 🖼️ Картинка — выберите иконку из стандартной библиотеки (например, Печать).
  • Сохраните команду и перетащите её на панель действий формы (или в нужную группу команд).
  • В свойствах кнопки укажите Действие = ПечатьЭтикетки (связь с созданной командой).
  • Теперь при открытии формы справочника пользователь увидит новую кнопку. Но она пока ничего не делает — нужно написать обработчик.

    ☑️ Проверка перед сохранением формы

    Выполнено: 0 / 4

    Программное создание кнопки: когда без кода не обойтись

    Конструктор форм ограничен в возможностях. Если требуется:

    • 🔄 Динамически показывать/скрывать кнопку в зависимости от данных;
    • 🛠️ Менять её свойства (цвет, доступность) во время работы;
    • 📊 Добавлять кнопку в табличную часть или нестандартные элементы;

    — придётся писать код на встроенном языке .

    Пример: добавление кнопки "Рассчитать скидку" в форму документа "Заказ клиента", если сумма документа превышает 10 000 рублей:

    &Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    

    Если Объект.СуммаДокумента > 10000 Тогда

    Команды.Добавить("РассчитатьСкидку", Новый Команда("РассчитатьСкидку"));

    Команды.РассчитатьСкидку.Действие = Новый Действие("РассчитатьСкидкуСервер");

    Команды.РассчитатьСкидку.Заголовок = "Рассчитать скидку 5%";

    Команды.РассчитатьСкидку.Видимость = Истина;

    КонецЕсли;

    КонецПроцедуры

    &Процедура РассчитатьСкидкуСервер() Экспорт

    Объект.Скидка = 5;

    Объект.Записать();

    КонецПроцедуры

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

    💡

    Используйте префиксы для имён команд (например, cmd_ или Кнопка_), чтобы избежать конфликтов с системными идентификаторами.

    Типовые ошибки при работе с кнопками и как их избежать

    Даже опытные разработчики сталкиваются с проблемами при создании кнопок. Вот наиболее распространённые ошибки и способы их решения:

    Ошибка Причина Решение
    Кнопка не отображается Не указано действие для команды или ошибка в имени Проверьте свойство Действие в конструкторе форм
    Кнопка серого цвета (неактивна) Не прописано условие доступности или ошибка в коде Добавьте обработчик ПриОпределенииДоступности
    Двойной клик срабатывает дважды Отсутствует блокировка повторного нажатия Используйте флаг ОбрабатываетсяНажатие
    Кнопка работает только у администратора Не хватает прав на выполнение команды Настройте роли в Администрирование → Настройка прав

    Частая проблема — кнопка видна, но не реагирует на нажатие. Это обычно связано с тем, что:

    • 🔌 Не указан обработчик события (например, ПриНажатии);
    • 🔒 Ошибка в коде обработчика (исключение прерывает выполнение);
    • 📵 Команда не добавлена в коллекцию Команды формы.
    Почему кнопка может исчезнуть после обновления конфигурации?

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

    Размещение кнопок: лучшие практики UX в 1С

    Положение кнопки на форме не менее важно, чем её функциональность. Неудачное размещение может запутать пользователя или замедлить работу. Следуйте этим рекомендациям:

    Группировка по смыслу:

    • 📑 Кнопки работы с документом ("Провести", "Отменить проведение") — в группу "Действия";
    • 🖨️ Кнопки печати ("Печать", "Экспорт в Excel") — в группу "Печать";
    • 🔄 Кнопки обновления данных ("Обновить", "Синхронизировать") — в группу "Сервис".

    Приоритетность: Часто используемые кнопки (например, "Сохранить") должны быть на видном месте — в верхней панели или в начале группы. Редко используемые (например, "Архивировать") можно спрятать в выпадающее меню.

    Пример хорошего размещения для формы документа:

    ┌───────────────────────┐

    │ Заказ клиента №123 │

    ├───────┬───────────────┤

    │Сохранить│Отменить│⋮ │ ← Основные действия слева

    ├───────┴───────────────┤

    │ Табличная часть │

    │ │

    ├───────────────────────┤

    │📄 Печать │ 📊 Отчёт │ ← Вторичные действия внизу

    └───────────────────────┘

    💡

    В управляемых формах 1С кнопки автоматически адаптируются под мобильные устройства, но для лучшего UX проверяйте отображение в режиме Мобильное приложение (меню "Сервис → Параметры → Запуск 1С:Предприятие").

    Динамические кнопки: изменение свойств в зависимости от данных

    Статичные кнопки уступают по гибкости динамическим, которые меняют своё состояние на основе условий. Например, кнопка "Одобрить" может:

    • 🟢 Стать зелёной, если документ готов к одобрению;
    • 🔴 Исчезать, если у пользователя нет прав;
    • 🟡 Менять текст на "Одобрено", если документ уже обработан.

    Реализуется это через обработчики событий. Пример для управляемой формы:

    &Процедура ПриИзмененииДанных(Элемент)
    

    Если Объект.Статус = Перечисление.СтатусыДокумента.Утверждён Тогда

    Команды.Одобрить.Видимость = Ложь;

    Команды.ОтменитьОдобрение.Видимость = Истина;

    Иначе

    Команды.Одобрить.Видимость = (Права.ОдобрениеДокументов = Истина);

    Команды.ОтменитьОдобрение.Видимость = Ложь;

    КонецЕсли;

    КонецПроцедуры

    Для смены цвета кнопки используйте свойство ЦветФона (доступно в управляемых формах начиная с версии 8.3.15). Например:

    Команды.Одобрить.ЦветФона = Новый Цвет(0, 200, 0); // Зелёный
    💡

    Чтобы избежать мерцания интерфейса при динамическом изменении кнопок, оберните код в ПриостановитьОтрисовку()/ВозобновитьОтрисовку().

    Кнопки в табличных частях и списках: особенности реализации

    Добавление кнопок в строки таблиц (например, "Удалить строку" или "Копировать") имеет свои нюансы. Здесь нельзя использовать стандартный конструктор — потребуется программный код.

    Пример добавления кнопки "Посмотреть историю" в каждую строку табличной части документа:

    &Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    

    ТабличнаяЧасть = ЭлементыФормы.Товары;

    ТабличнаяЧасть.Колонки.Добавить("КнопкаИстории", Новый КолонкаТаблицы(" ", "КнопкаИстории", , 30));

    ТабличнаяЧасть.Колонки.КнопкаИстории.ТипЗначения = Новый ОписаниеТипов("Строка");

    ТабличнаяЧасть.КнопкаИстории.Заголовок = "История";

    ТабличнаяЧасть.КнопкаИстории.Картинка = Новый Картинка(БиблиотекаКартинок.История);

    КонецПроцедуры

    &Процедура ТоварыПриАктивизацииСтроки(Элемент, Строка)

    Если Элемент.ТекущаяКолонка = "КнопкаИстории" Тогда

    ОткрытьФорму("Документ.ИсторияИзменений", Новый Структура("Ссылка", Строка.Ссылка));

    КонецЕсли;

    КонецПроцедуры

    Для списков (например, в формах справочников) логика аналогична, но вместо ТабличнаяЧасть используется объект Список.

    ⚠️ Внимание: Кнопки в табличных частях не поддерживаются в мобильном клиенте 1С до версии 8.3.19. Для кросс-платформенных решений используйте альтернативные подходы (например, контекстное меню).

    FAQ: Частые вопросы о кнопках в 1С

    Как сделать кнопку видимой только для определённой роли?

    Используйте обработчик ПриОпределенииВидимости для команды. Пример:

    &Процедура ПечатьЭтикеткиПриОпределенииВидимости(Элемент, Видимость)
    

    Видимость = Роли.НаходитсяВРоли("МенеджерСклада") Или Роли.НаходитсяВРоли("Администратор");

    КонецПроцедуры

    Где Роли — это объект, возвращаемый функцией Пользователь.Роли().

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

    Нет, печатные формы (макеты) не поддерживают интерактивные элементы. Альтернатива — добавить кнопку "Печать" в основную форму документа, которая будет открывать печатную форму.

    Как сделать кнопку с выпадающим меню?

    В управляемых формах используйте элемент КнопкаСМеню. Пример:

    ЭлементыФормы.Добавить("МенюЭкспорта", Тип("КнопкаСМеню"));
    

    ЭлементыФормы.МенюЭкспорта.Заголовок = "Экспорт";

    ЭлементыФормы.МенюЭкспорта.Действия.Добавить("ЭкспортВExcel", Новый Действие("ЭкспортВExcel"));

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

    Частые причины:

    • 🔐 Отсутствуют права на выполнение команды (проверьте настройки ролей);
    • 📥 Не опубликованы изменения на сервере (обновите базу);
    • 🖥️ Код обработчика выполняется на сервере, но не передан клиенту (используйте директиву &НаКлиенте).
    Как изменить порядок кнопок на панели?

    В управляемых формах порядок определяется свойством Порядок у команды. Чем меньше число, тем левее кнопка. Пример:

    Команды.Сохранить.Порядок = 1;
    

    Команды.Провести.Порядок = 2;

    Для обычных форм порядок задаётся через свойство Индекс в коллекции ЭлементыУправления.