Как изменить рабочее место кассира (РМК) в «Штрих-М» и добавить кнопку

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

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

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

Почему формы РМК нет в конфигураторе?

Разработчики отраслевых решений «Штрих-М» применили модульный подход. Основная логика интерфейса кассира вынесена во внешние библиотеки и логические модули. Объект LogicalModules (Логические модули) управляет загрузкой внешних обработок, перехватывает события формы и динамически генерирует элементы управления. Это позволяет обновлять конфигурацию без потери индивидуальных доработок конкретного торгового объекта.

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

---

Вариант 1. Визуальное добавление кнопки через Адаптивный интерфейс

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

Разберем процесс настройки по шагам:

  1. Авторизация с правами супервизора: Запустим программу в режиме «Предприятие» под пользователем, имеющим полные административные права.
  2. Переход в настройки оборудования: Откроем меню Настройки и перейдем на вкладку Оборудование.
  3. Активация режима редактирования: В правом нижнем углу окна настроек в группе параметров «Монитор» установим флаг «Адаптивный интерфейс» и нажмем кнопку «Настройка».
  4. Редактирование макета РМК: Нажмем на кнопку «Настройка формы регистрации». Перед нами откроется визуальный конструктор формы РМК. Здесь мы можем перетаскивать элементы, изменять их размеры, объединять ячейки и создавать новые кнопки на свободных местах.
  5. Привязка действия к кнопке: Кликнем правой кнопкой мыши по созданной кнопке (или свободной ячейке-заглушке) и выберем пункт «Изменить». В поле «Функция кнопки» выберем требуемое действие из обширного списка стандартных кассовых операций.
  6. Сохранение изменений: Закроем редактор макета (нажав крестик или клавишу Esc). На вопрос системы о сохранении изменений ответим «Да». Чтобы новые настройки вступили в силу, обязательно перезапустим кассовую программу.

---

Вариант 2. Программное добавление кнопки через API логических модулей

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

Правильный путь — использование API LogicalModules. Мы создадим внешнюю обработку (файл с расширением .epf), которая перехватит событие открытия формы РМК и динамически добавит на нее нашу кнопку.

Где физически располагаются логические модули?

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

...%КаталогБазыДанных%\ExtFiles\LogicalModules\ (в зависимости от релиза папка может называться ExtForms\LogicalModules).

Принцип работы перехватчиков событий

При выполнении ключевых операций (открытие формы, проведение чека, расчет скидки) ядро «Штрих-М» обращается к менеджеру логических модулей. Модули могут работать в двух режимах:

Пошаговая реализация программного добавления кнопки

Рассмотрим пример создания логического модуля для динамического добавления кнопки.

Шаг 1. Создание внешней обработки

Создадим в конфигураторе новую внешнюю обработку и назовем ее, например, ДобавлениеПользовательскойКнопки.epf. Сохраним ее в вышеуказанную папку LogicalModules.

Шаг 2. Написание процедуры инициализации модуля

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


Процедура ИнициализироватьМодуль() Экспорт
    // Регистрируем обработчик события "При открытии" формы регистрации продаж
    МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").НазначитьОбработчик(
        "Супервизор.РегистрацияПродаж.ПриОткрытии.ПостОбработка", 
        ЭтаФорма, 
        Неопределено
    );
КонецПроцедуры

Шаг 3. Реализация перехватчика и динамическое создание кнопки

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


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

Шаг 4. Написание обработчика нажатия кнопки

Осталось описать алгоритм, который будет выполняться при клике кассира по созданной кнопке:


Процедура Подключаемый_ВыполнитьПользовательскоеДействие() Экспорт
    // Здесь описываем логику вашей уникальной функции
    ПоказатьПредупреждение(, "Пользовательское действие успешно выполнено!");
КонецПроцедуры

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

← На главную