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

```1c
    Процедура ОплатитьНаличными(Команда)

    ОчиститьСообщения();
    Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
    Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура(
    "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
    Не ПраваДоступа.ИзменениеКартЛояльности, Истина);

    ОткрытьФорму(
    "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
    ПараметрыОткрытия,
    ЭтотОбъект,
    ЭтотОбъект.УникальныйИдентификатор);
    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);

    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
    ЭтотОбъект,
    Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));

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

Вопрос в следующем как бы сделать, чтобы при нажатии на кнопку оплатить наличными, сначала выскакивало окно ввода карты лояльности, а после того как оно закроется, выскакивала бы уже форма оплаты. Есть ли такая процедура или условие?
---
Примерно так:

```1c
    Процедура ОплатитьНаличными(Команда)

    ОчиститьСообщения();
    Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
    Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура(
    "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
    Не ПраваДоступа.ИзменениеКартЛояльности, Истина);

    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);

    ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект,ВыбраннаяФормаОплаты);

    ОткрытьФорму(
    "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
    ПараметрыОткрытия,
    ЭтотОбъект,
    ЭтотОбъект.УникальныйИдентификатор,,,ОП);

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

    Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);

    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
    ЭтотОбъект,
    Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));

    КонецПроцедуры
```
---
напрямую:

```1c
    Процедура ОплатитьНаличными(Команда)

    ОчиститьСообщения();
    Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
    Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура(
    "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
    Не ПраваДоступа.ИзменениеКартЛояльности, Истина);

    ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект);

    ОткрытьФорму(
    "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
    ПараметрыОткрытия,
    ЭтотОбъект,
    ЭтотОбъект.УникальныйИдентификатор,,,ОП);

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

    &НаКлиенте
    Процедура ПриЗакрытииФормыКартыЛояльности(Результат) экспорт

    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);

    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
    ЭтотОбъект,
    Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));

    КонецПроцедуры
```
---
Надо смотреть событие формы РМК "ОбработкаОповещения", там уже обрабатывать
---
Я к сожалению не знаю даже как загуглить( чтобы пример посмотреть таких условий
---
Нужна конструкция, которая позволит продолжить код, после закрытия окна.
---
Примерно так:

```1c
    Процедура ОплатитьНаличными(Команда)

    ОчиститьСообщения();
    Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
    Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура(
    "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
    Не ПраваДоступа.ИзменениеКартЛояльности, Истина);

    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);

    ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект,ВыбраннаяФормаОплаты);

    ОткрытьФорму(
    "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
    ПараметрыОткрытия,
    ЭтотОбъект,
    ЭтотОбъект.УникальныйИдентификатор,,,ОП);

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

    Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);

    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
    ЭтотОбъект,
    Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));

    КонецПроцедуры
```
---
Спасибо, я тоже нашёл этот метод. По вашему коду почему-то ругается сервер на предпоследнюю строку
{Документ.ЧекККМ.Форма.ФормаДокументаРМК.Форма(1156,9)}: Тип не определен (ОписаниеОповещения)
  Новый <<?>>ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры)); (Проверка: Сервер)
---
процедура на клиенте

&НаКлиенте
Процедура ПриЗакрытииФормыКартыЛояльности()
---
Понял Вас, теперь работает, спасибо большое.
---
Подскажите, если грубо, то этим кодом

```1c
    Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт
```

Вы как бы переносите в эту процедуру вот этот участок?

```1c
    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);
```

?
---
При вводе карты лояльности, скидку он не считает, просто потом появляется форма оплаты, где-то механизм расчёта скидок вызывается до появления форма карт лояльности, буду думать
---
напрямую:

```1c
    Процедура ОплатитьНаличными(Команда)

    ОчиститьСообщения();
    Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
    Возврат;
    КонецЕсли;

    ПараметрыОткрытия = Новый Структура(
    "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
    Не ПраваДоступа.ИзменениеКартЛояльности, Истина);

    ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект);

    ОткрытьФорму(
    "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
    ПараметрыОткрытия,
    ЭтотОбъект,
    ЭтотОбъект.УникальныйИдентификатор,,,ОП);

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

    &НаКлиенте
    Процедура ПриЗакрытииФормыКартыЛояльности(Результат) экспорт

    ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные", Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты", Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);

    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
    ЭтотОбъект,
    Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));

    КонецПроцедуры
```
---
Спасибо большое за помощь. Скидки не рассчитываются, не пойму почему. Карта клиента добавляется в документ и сразу выскакивает окно оплаты без скидки, если его закрыть и повторить процедуру, то уже рассчитываются
---
Надо как-то между ними вставить

```1c
    Процедура НазначитьАвтоматическиеСкидки(Команда)

    Объект.ФормаОплаты = ПредопределенноеЗначение("Перечисление.ФормыОплаты.ПустаяСсылка");

    Оповещение = Новый ОписаниеОповещения("НазначитьАвтоматическиеСкидкиЗавершение", ЭтотОбъект);
    Если ПараметрыПримененияСкидок.НазначеныУправляемыеСкидки Тогда
    СкидкиНаценкиКлиент.ОткрытьФормуНазначенияУправляемыхСкидокНаценок(
    ВыполнитьПредварительныйРасчетСкидокНаСервере(),
    Оповещение);
    Иначе
    ВыполнитьОбработкуОповещения(Оповещение, УправляемыеСкидки);
    КонецЕсли;

    КонецПроцедуры
```
---
Если вдруг у кого-нибудь будут идеи, напишите пожалуйста