Как правильно добавить свою кнопку в нижнюю панель РМК в 1С:Розница 2.3

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

Добавление новых элементов управления в интерфейс рабочего места кассира (РМК) — задача, с которой часто сталкиваются разработчики при адаптации конфигурации «1С:Розница 2.3» под нужды бизнеса. Несмотря на кажущуюся простоту, этот процесс имеет множество нюансов, связанных с динамическим формированием интерфейса. Рассмотрим подробно, как правильно интегрировать свою кнопку, чтобы она не только отображалась, но и корректно выполняла заложенный в нее программный код.

Анализ механизма работы нижней панели РМК

Прежде чем приступать к разработке, проанализируем, как система формирует состав кнопок. В РМК нижняя панель строится не статично на форме, а динамически, опираясь на настройки, хранящиеся в базе данных, и предопределенные макеты. Основным «источником знаний» для системы является макет СтандартныеДействияКнопокНижнейПанели, который находится в справочнике НастройкиРМК.

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

Шаг 1. Работа с макетом и именованием

Разберем типичную ошибку: копирование существующих объектов. Как было отмечено в обсуждении, использование заимствованных объектов или простое копирование имен (например, КартинкаПО12ПогаситьДолг) ведет к конфликтам. Выясним, как сделать правильно:

  1. Откроем макет СтандартныеДействияКнопокНижнейПанели в расширении или основной конфигурации (если база снята с поддержки).
  2. Добавим новую строку для нашей кнопки.
  3. В колонке Имя кнопки укажем уникальный идентификатор. В «Рознице 2.3» принято использовать префикс, например: НижняяПанельКомандаМоеДействие.
  4. В колонке Действие укажем имя команды, которая будет вызываться.

Важный нюанс: Имя кнопки в макете должно строго соответствовать имени команды, которую мы добавим на форму или в расширение формы РМК.

Шаг 2. Программная регистрация команды

Одной правки макета недостаточно. Чтобы система «узнала» вашу кнопку и позволила выбрать ее в пользовательских настройках, ее необходимо зарегистрировать в коде. Проанализируем общие модули, отвечающие за работу РМК (обычно это МенеджерРМК или РМКСервер).

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


// Пример добавления в общий модуль
Процедура ПриПолученииДоступныхДействий(ДоступныеДействия) Экспорт
    НовоеДействие = ДоступныеДействия.Добавить();
    НовоеДействие.Имя = "МоеДействие";
    НовоеДействие.Представление = "Моя супер кнопка";
    НовоеДействие.ТипКнопки = "Команда";
КонецПроцедуры

Без этой регистрации кнопка не появится в списке «Доступные действия» в настройках РМК, и вы не сможете вывести ее на экран штатным способом.

Шаг 3. Настройка в пользовательском режиме

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

  1. Перейдем в раздел Администрирование — Продажи — РМК (управляемый режим).
  2. Откроем Настройки РМК, используемые для текущего рабочего места.
  3. Найдем раздел настройки кнопок нижней панели.
  4. В списке «Доступные действия» найдем нашу новую кнопку и перенесем ее в правую часть — «Выбранные действия».

Только после этого шага система физически отрисует кнопку на панели при запуске РМК.

Шаг 4. Обработка нажатия и отладка

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

Рассмотрим, как правильно прописать обработку нажатия:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    Если Команда.Имя = "НижняяПанельКомандаМоеДействие" Тогда
        // Вызываем наш эксклюзивный код
        ВыполнитьМоеДействие();
    Иначе
        // Передаем управление стандартному обработчику
        ПродажиКлиент.ВыполнитьКомандуРМК(Команда, ЭтаФорма);
    КонецЕсли;
КонецПроцедуры

Если вы ставите точку останова внутри своей процедуры ВыполнитьМоеДействие, но она не срабатывает, проверьте, заходит ли управление в Подключаемый_ВыполнитьКоманду. Если нет — значит, имя команды на форме не совпадает с тем, что ожидает система, или обработчик события «Нажатие» у самой кнопки в свойствах указан неверно.

Почему «Замер производительности» может быть пустым?

Если замер производительности не показывает активность при нажатии, это верный признак того, что событие не доходит до сервера и даже до клиентского кода 1С. Выясним возможные причины:

Рекомендации по работе через расширения

При использовании расширений (что является наиболее правильным подходом), помните: макет СтандартныеДействияКнопокНижнейПанели нужно заимствовать целиком. Проверьте, что в процедуре ПриСозданииНаСервере формы РМК не происходит жесткой очистки панели, которая могла бы удалить ваши изменения. Иногда требуется программно добавлять кнопку прямо в коде процедуры ПриСозданииНаСервере, используя метод Элементы.Добавить(), если макеты по какой-то причине не подхватываются автоматически.

Следуя этой структуре — от макета и регистрации до пользовательской настройки и диспетчеризации команд — вы сможете гарантированно добавить любой функционал в нижнюю панель РМК.

← На главную