Как настроить доступность кнопок оплаты в РМК «1С:Управление торговлей 11.4»?

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

При разработке или кастомизации рабочего места кассира (РМК) в конфигурациях на базе 1С:УТ 11.4 (а также в ERP 2.4 и КА 2.4) программисты часто сталкиваются с загадочным поведением интерфейса. Типичная ситуация: вы программно прописываете Элементы.ОплатитьНаличными.Доступность = Ложь;, отладчик подтверждает изменение свойства, но на экране кнопка остается активной и на нее можно нажать. Рассмотрим подробнее, почему это происходит и как правильно управлять кнопками в этой форме.

Разберем причину: почему стандартные методы не работают

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

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

Шаг 1: Использование расширения и правильной точки входа

Поскольку типовая конфигурация постоянно переопределяет видимость и доступность кнопок при открытии формы и выборе товаров, наши изменения в ПриСозданииНаСервере или ПриОткрытии будут просто перезаписаны. Для надежного решения нам потребуется создать расширение. Рассмотрим пошагово, как это реализовать.

Нам необходимо перехватить управление сразу после того, как типовой код завершит свою настройку. Самым подходящим местом является процедура НастроитьРМК. В расширении мы будем использовать аннотацию &После.

Проанализируем пример кода для расширения формы ЧекККМ:


&НаСервере
&После("НастроитьРМК")
Процедура ср_НастроитьРМК_После()
    
    // Блокируем оплату наличными по нашему условию
    Если МоеСпециальноеУсловие Тогда
        
        // Попытка заблокировать основной элемент
        Если Элементы.Найти("ОплатитьНаличными") <> Неопределено Тогда
            Элементы.ОплатитьНаличными.Доступность = Ложь;
        КонецЕсли;
        
        // Проверка на наличие «Дублей», которые создает система при перегруппировке
        Если Элементы.Найти("ОплатитьНаличнымиДубль") <> Неопределено Тогда
            Элементы.ОплатитьНаличнымиДубль.Доступность = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Шаг 2: Управление командами вместо кнопок

Рассмотрим более продвинутый и надежный метод. Кнопки в РМК не просто существуют сами по себе — они привязаны к командам формы. Более того, у кнопок часто настроены «горячие клавиши» (например, F6 для наличных). Если вы просто отключите видимость кнопки, опытный кассир все равно сможет вызвать оплату нажатием клавиши на клавиатуре.

Посмотрим на пример, как заблокировать действие на уровне всей команды формы. Это автоматически сделает недоступными все кнопки (включая все «Дубли» и элементы в меню «Еще»), связанные с этой командой:


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

Шаг 3: Учет особенностей «Смешанной оплаты»

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

Однако, если вы хотите принудительно управлять этим процессом, обязательно посмотрите на структуру группы кнопок. Иногда система управляет доступностью целой родительской группы (например, ГруппаСпособыОплаты). В этом случае индивидуальная настройка кнопок может игнорироваться, пока не изменена доступность всей группы.

Рекомендации для стабильной работы

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

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

← На главную