Добавление новых элементов управления в интерфейс рабочего места кассира (РМК) — задача, с которой часто сталкиваются разработчики при адаптации конфигурации «1С:Розница 2.3» под нужды бизнеса. Несмотря на кажущуюся простоту, этот процесс имеет множество нюансов, связанных с динамическим формированием интерфейса. Рассмотрим подробно, как правильно интегрировать свою кнопку, чтобы она не только отображалась, но и корректно выполняла заложенный в нее программный код.
Прежде чем приступать к разработке, проанализируем, как система формирует состав кнопок. В РМК нижняя панель строится не статично на форме, а динамически, опираясь на настройки, хранящиеся в базе данных, и предопределенные макеты. Основным «источником знаний» для системы является макет СтандартныеДействияКнопокНижнейПанели, который находится в справочнике НастройкиРМК.
Простая вставка кнопки на форму обработки РМКУправляемыйРежим зачастую не дает результата, так как при открытии формы срабатывают процедуры инициализации, которые перестраивают панель согласно настройкам пользователя. Если вашей кнопки нет в этих настройках, она будет либо скрыта, либо ее нажатие не будет обрабатываться стандартным диспетчером команд.
Разберем типичную ошибку: копирование существующих объектов. Как было отмечено в обсуждении, использование заимствованных объектов или простое копирование имен (например, КартинкаПО12ПогаситьДолг) ведет к конфликтам. Выясним, как сделать правильно:
СтандартныеДействияКнопокНижнейПанели в расширении или основной конфигурации (если база снята с поддержки).НижняяПанельКомандаМоеДействие.Важный нюанс: Имя кнопки в макете должно строго соответствовать имени команды, которую мы добавим на форму или в расширение формы РМК.
Одной правки макета недостаточно. Чтобы система «узнала» вашу кнопку и позволила выбрать ее в пользовательских настройках, ее необходимо зарегистрировать в коде. Проанализируем общие модули, отвечающие за работу РМК (обычно это МенеджерРМК или РМКСервер).
Нам необходимо найти функцию, которая формирует список доступных действий. Чаще всего это ПолучитьДоступныеДействияРМК. Рассмотрим пример того, как может выглядеть добавление вашей команды в массив доступных действий:
// Пример добавления в общий модуль
Процедура ПриПолученииДоступныхДействий(ДоступныеДействия) Экспорт
НовоеДействие = ДоступныеДействия.Добавить();
НовоеДействие.Имя = "МоеДействие";
НовоеДействие.Представление = "Моя супер кнопка";
НовоеДействие.ТипКнопки = "Команда";
КонецПроцедуры
Без этой регистрации кнопка не появится в списке «Доступные действия» в настройках РМК, и вы не сможете вывести ее на экран штатным способом.
Выясним причину, по которой кнопка может не отображаться даже после внесения изменений в код. После того как макет изменен и команда зарегистрирована, необходимо выполнить настройку в самой программе:
Только после этого шага система физически отрисует кнопку на панели при запуске РМК.
Часто разработчики жалуются, что «отладчик не останавливается». Проанализируем ситуацию: в РМК используется централизованный обработчик событий. Вместо того чтобы назначать действие напрямую в свойствах кнопки, система перехватывает нажатия в процедуре ПриКоманде или аналогичном диспетчере в модуле формы.
Рассмотрим, как правильно прописать обработку нажатия:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если Команда.Имя = "НижняяПанельКомандаМоеДействие" Тогда
// Вызываем наш эксклюзивный код
ВыполнитьМоеДействие();
Иначе
// Передаем управление стандартному обработчику
ПродажиКлиент.ВыполнитьКомандуРМК(Команда, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
Если вы ставите точку останова внутри своей процедуры ВыполнитьМоеДействие, но она не срабатывает, проверьте, заходит ли управление в Подключаемый_ВыполнитьКоманду. Если нет — значит, имя команды на форме не совпадает с тем, что ожидает система, или обработчик события «Нажатие» у самой кнопки в свойствах указан неверно.
Если замер производительности не показывает активность при нажатии, это верный признак того, что событие не доходит до сервера и даже до клиентского кода 1С. Выясним возможные причины:
ИмяКоманды.Изменять вместе с владельцем. В противном случае система может продолжать использовать типовой макет из основной конфигурации.При использовании расширений (что является наиболее правильным подходом), помните: макет СтандартныеДействияКнопокНижнейПанели нужно заимствовать целиком. Проверьте, что в процедуре ПриСозданииНаСервере формы РМК не происходит жесткой очистки панели, которая могла бы удалить ваши изменения. Иногда требуется программно добавлять кнопку прямо в коде процедуры ПриСозданииНаСервере, используя метод Элементы.Добавить(), если макеты по какой-то причине не подхватываются автоматически.
Следуя этой структуре — от макета и регистрации до пользовательской настройки и диспетчеризации команд — вы сможете гарантированно добавить любой функционал в нижнюю панель РМК.