Подскажите, на конфигурации УТ 11.4 кто-нибудь реализовывал подобное? В настройках не нашел.

Задача свести к минимуму нажатие кнопок. Если в интерфейсе кассира нажали "Оплатить картой" - должно сразу открыться окно эквайринга с принятием оплаты и после успешной оплаты пробиться чек ККМ. Т.е. принятие оплаты картой в одно касание :)

Кто реализовывал, подскажите, что где добавить?
---
В общем - задачу решил. Может кому-то пригодиться.

На примере конфигурации Комплексная автоматизация, 2.4.14.64 (в УТ 11.4 думаю все 1 в 1). Доработать пришлось 2 модуля (все доработки через расширение).

1. Общий модуль РозничныеПродажи, процедура ОчиститьДанныеФискальнойОперации:

```1c
    &Вместо("ОчиститьДанныеФискальнойОперации")
    Процедура Доп_ОчиститьДанныеФискальнойОперации(ДанныеФискальнойОперации)

    ДанныеФискальнойОперации.ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять; //+АняновМА, было: Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ПустаяСсылка()
    ДанныеФискальнойОперации.КонтактныеДанныеЭлектронногоЧека = ";

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

Если вариант оплаты не заполнен, то после эквайринговой операции (даже если она на всю сумму чека) открывается окно с кнопкой "Пробить чек". Если клиенту необходимо отправлять чеки по СМС или e-mail, это указывается в карточке клиента, которая к дисконтной карте привязана. По умолчанию всегда печатаем сразу чек.

2. Общий модуль РозничныеПродажиКлиент, процедура ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала:

```1c
    &Вместо("ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала")
    Процедура Доп_ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала­(СтруктураЭквайринговыйТерминал, ДополнительныеПараметры)

    Если СтруктураЭквайринговыйТерминал <> Неопределено Тогда
    ИдентификаторУстройстваЭТ = СтруктураЭквайринговыйТерминал.ПодключаемоеОборудование;
    Иначе
    ИдентификаторУстройстваЭТ = Неопределено;
    КонецЕсли;

    ДополнительныеПараметры.ИдентификаторУстройстваЭТ = ИдентификаторУстройстваЭТ;
    ДополнительныеПараметры.СтруктураЭквайринговыйТерминал = СтруктураЭквайринговыйТерминал;

    Если ЗначениеЗаполнено(ИдентификаторУстройстваЭТ)
    Или (СтруктураЭквайринговыйТерминал <> Неопределено
    И СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования) Тогда

    Если Не СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда
    РезультатЭТ = МенеджерОборудованияУТКлиент.ОборудованиеПодключено(ИдентификаторУстройстваЭТ);
    Иначе
    РезультатЭТ = Истина;
    КонецЕсли;

    Если РезультатЭТ Тогда

    //+АняновМА
    Если ДополнительныеПараметры.ФормаАвторизации_Сумма = ДополнительныеПараметры.ФормаАвторизации_ПределСуммы
    И НЕ СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда

    СтруктураВозврата = Новый Структура();
    СтруктураВозврата.Вставить("Сумма" , ДополнительныеПараметры.ФормаАвторизации_Сумма);
    СтруктураВозврата.Вставить("ДанныеКарты" , ");
    СтруктураВозврата.Вставить("СсылочныйНомер", ");
    СтруктураВозврата.Вставить("ТипКарты" , 0);
    СтруктураВозврата.Вставить("НомерКарты" , ");
    СтруктураВозврата.Вставить("НомерЧека" , ");
    СтруктураВозврата.Вставить("НомерЧекаЭТ" , ");

    ДобавитьОплатуКартойЗавершение(СтруктураВозврата, ДополнительныеПараметры);
    Возврат;
    КонецЕсли;
    //-АняновМА

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Сумма", ДополнительныеПараметры.ФормаАвторизации_Сумма);
    ПараметрыФормы.Вставить("ПределСуммы", ДополнительныеПараметры.ФормаАвторизации_ПределСуммы);
    ПараметрыФормы.Вставить("Валюта", ДополнительныеПараметры.Валюта);

    Если СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда
    ПараметрыФормы.Вставить("ПоказыватьНомерКарты", Истина);
    КонецЕсли;

    ОткрытьФорму(
    "Справочник.ПодключаемоеОборудование.Форма.ФормаАвторизацииЭТ", ПараметрыФормы,,,,,
    Новый ОписаниеОповещения(
    "ДобавитьОплатуКартойЗавершение",
    РозничныеПродажиКлиент,
    ДополнительныеПараметры),
    РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

    Иначе

    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    НСтр("ru = 'Эквайринговый терминал не подключен. Операция по карте не выполнена.'"));

    ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, Неопределено);

    КонецЕсли;

    Иначе

    // Не выбран эквайринговый терминал

    ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, Неопределено);

    КонецЕсли;

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

Тут все просто - если у нас сумма оплаты = сумме чека и используется реальный эквайринговый терминал, то не показываем окно авторизации оплаты (Справочник.ПодключаемоеОборудование.Форма.ФормаАвторизацииЭТ), а сразу отправляем команду на эквайринговый терминал.

Надеюсь кому-то пригодится.
---
День добрый. Взять код из Розницы (там такое реализовано) и пытаться адаптировать под свою конфигурацию.
---
что-то не припомню ничего похожего в рознице. Точно так же нужно нажать на кнопку с видом оплаты. Принять оплату. Потом пробить чек. Может это какой-то настройкой в рознице регулируется?
---
Нет такого в Рознице. При нажатии на кнопку безналичной оплаты выходит окно формы сложной оплаты, затем окно с суммой авторизации, в нем нажимаем Enter, идет обращение к терминалу, затем снова выходит форма сложной оплаты - в ней еще раз Enter.

Чтобы изменить это поведение - нужно дорабатывать РМК, так как при безналичной оплате используется код сложной оплаты и просто так его изменить нельзя.
---
вот и я смотрю, розница вроде последняя, а пару лишних кнопок нажимать приходится :) Да и в целом по типовым конфигурациям вроде одинаково.
---
В Рабочем месте кассира в Рознице 2 кнопки оплата наличными и оплата по карте. Если подключен эквайринговый терминал, созданы соответствующие справочники, все настроено, то при нажатии оплата по карте запускается приложение банка для оплаты по терминалу, дальше, если все успешно, идет проведение документа.
---
Не запускается, требуется еще одно нажатие до и одно после. Как происходит я вам описал.
---
Видимо, не так Вас понял. Функциональность уже есть и все работает, нужно уменьшить число нажатий кнопок? Смотреть процедуры, "висящие" на этих кнопках, попробовать выполнить их в ПриОткрытии.
---
Так делать нельзя, так как в этом случае вы сломаете сложную оплату. По сути придется создавать и поддерживать альтернативную ветку кода, ну или перепахать основную кучей проверок и ветвлений.
---
Расширение написать под это все. Похоже влез по запарке, не разобравшись, сейчас насоветую... Извиняйте)
---
Хоть в модуль, хоть в расширение. Оплата платежной картой в рознице и сложная оплата реализованы одной формой и одним алгоритмом. Просто при оплате картой туда сразу подставляется 100% суммы. Если вы начнете его менять - сломаете сложную оплату.

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

И не понятно что проще, с учетом того, что там и так весьма сложный код, так как только налом и картами способы оплаты не исчерпываются.
---
что сделать нужно, понятно. Вопрос по сути был к тем, кто такое возможно уже реализовал :) Видимо придется погружаться. Где взять только эмулятор эквайрингового терминала под управляемые формы.
---
https://infostart.ru/public/875053/
---
да, уже тестирую, спасибо.
---
В общем - задачу решил. Может кому-то пригодиться.

На примере конфигурации Комплексная автоматизация, 2.4.14.64 (в УТ 11.4 думаю все 1 в 1). Доработать пришлось 2 модуля (все доработки через расширение).

1. Общий модуль РозничныеПродажи, процедура ОчиститьДанныеФискальнойОперации:

```1c
    &Вместо("ОчиститьДанныеФискальнойОперации")
    Процедура Доп_ОчиститьДанныеФискальнойОперации(ДанныеФискальнойОперации)

    ДанныеФискальнойОперации.ВариантОтправкиЭлектронногоЧека = Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.НеОтправлять; //+АняновМА, было: Перечисления.ВариантыОтправкиЭлектронногоЧекаПокупателю.ПустаяСсылка()
    ДанныеФискальнойОперации.КонтактныеДанныеЭлектронногоЧека = ";

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

Если вариант оплаты не заполнен, то после эквайринговой операции (даже если она на всю сумму чека) открывается окно с кнопкой "Пробить чек". Если клиенту необходимо отправлять чеки по СМС или e-mail, это указывается в карточке клиента, которая к дисконтной карте привязана. По умолчанию всегда печатаем сразу чек.

2. Общий модуль РозничныеПродажиКлиент, процедура ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала:

```1c
    &Вместо("ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала")
    Процедура Доп_ОплатаКартойПослеЗавершенияВыбораЭквайринговогоТерминала­(СтруктураЭквайринговыйТерминал, ДополнительныеПараметры)

    Если СтруктураЭквайринговыйТерминал <> Неопределено Тогда
    ИдентификаторУстройстваЭТ = СтруктураЭквайринговыйТерминал.ПодключаемоеОборудование;
    Иначе
    ИдентификаторУстройстваЭТ = Неопределено;
    КонецЕсли;

    ДополнительныеПараметры.ИдентификаторУстройстваЭТ = ИдентификаторУстройстваЭТ;
    ДополнительныеПараметры.СтруктураЭквайринговыйТерминал = СтруктураЭквайринговыйТерминал;

    Если ЗначениеЗаполнено(ИдентификаторУстройстваЭТ)
    Или (СтруктураЭквайринговыйТерминал <> Неопределено
    И СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования) Тогда

    Если Не СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда
    РезультатЭТ = МенеджерОборудованияУТКлиент.ОборудованиеПодключено(ИдентификаторУстройстваЭТ);
    Иначе
    РезультатЭТ = Истина;
    КонецЕсли;

    Если РезультатЭТ Тогда

    //+АняновМА
    Если ДополнительныеПараметры.ФормаАвторизации_Сумма = ДополнительныеПараметры.ФормаАвторизации_ПределСуммы
    И НЕ СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда

    СтруктураВозврата = Новый Структура();
    СтруктураВозврата.Вставить("Сумма" , ДополнительныеПараметры.ФормаАвторизации_Сумма);
    СтруктураВозврата.Вставить("ДанныеКарты" , ");
    СтруктураВозврата.Вставить("СсылочныйНомер", ");
    СтруктураВозврата.Вставить("ТипКарты" , 0);
    СтруктураВозврата.Вставить("НомерКарты" , ");
    СтруктураВозврата.Вставить("НомерЧека" , ");
    СтруктураВозврата.Вставить("НомерЧекаЭТ" , ");

    ДобавитьОплатуКартойЗавершение(СтруктураВозврата, ДополнительныеПараметры);
    Возврат;
    КонецЕсли;
    //-АняновМА

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Сумма", ДополнительныеПараметры.ФормаАвторизации_Сумма);
    ПараметрыФормы.Вставить("ПределСуммы", ДополнительныеПараметры.ФормаАвторизации_ПределСуммы);
    ПараметрыФормы.Вставить("Валюта", ДополнительныеПараметры.Валюта);

    Если СтруктураЭквайринговыйТерминал.ИспользоватьБезПодключенияОборудования Тогда
    ПараметрыФормы.Вставить("ПоказыватьНомерКарты", Истина);
    КонецЕсли;

    ОткрытьФорму(
    "Справочник.ПодключаемоеОборудование.Форма.ФормаАвторизацииЭТ", ПараметрыФормы,,,,,
    Новый ОписаниеОповещения(
    "ДобавитьОплатуКартойЗавершение",
    РозничныеПродажиКлиент,
    ДополнительныеПараметры),
    РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

    Иначе

    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    НСтр("ru = 'Эквайринговый терминал не подключен. Операция по карте не выполнена.'"));

    ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, Неопределено);

    КонецЕсли;

    Иначе

    // Не выбран эквайринговый терминал

    ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОЗавершении, Неопределено);

    КонецЕсли;

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

Тут все просто - если у нас сумма оплаты = сумме чека и используется реальный эквайринговый терминал, то не показываем окно авторизации оплаты (Справочник.ПодключаемоеОборудование.Форма.ФормаАвторизацииЭТ), а сразу отправляем команду на эквайринговый терминал.

Надеюсь кому-то пригодится.