Нужна помощь с кодом

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

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


Вопрос в следующем как бы сделать, чтобы при нажатии на кнопку оплатить наличными, сначала выскакивало окно ввода карты лояльности, а после того как оно закроется, выскакивала бы уже форма оплаты. Есть ли такая процедура или условие?
По теме из базы знаний
Найденные решения
5. user5300 1035 23.09.21 14:39 Сейчас в теме
Примерно так:

Процедура ОплатитьНаличными(Команда)
      
    ОчиститьСообщения();
       Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
        Возврат;
    КонецЕсли;
    
    ПараметрыОткрытия = Новый Структура(
        "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
        Не ПраваДоступа.ИзменениеКартЛояльности, Истина);
		
	ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные",              Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы",         Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты",        Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);	
		
		
	ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект,ВыбраннаяФормаОплаты);
	
    ОткрытьФорму(
        "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
        ПараметрыОткрытия,
        ЭтотОбъект,
        ЭтотОбъект.УникальныйИдентификатор,,,ОП);
		
    
КонецПроцедуры
	
Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт
	     
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);
    
    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
        ЭтотОбъект,
        Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));
	
КонецПроцедуры
	
Показать
11. user5300 1035 23.09.21 15:56 Сейчас в теме
(10)
напрямую:

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

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);
    
    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
        ЭтотОбъект,
        Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));
    
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. DBV 23.09.21 14:22 Сейчас в теме
(1) Надо смотреть событие формы РМК "ОбработкаОповещения", там уже обрабатывать
2. user1404821 23.09.21 13:51 Сейчас в теме
Я к сожалению не знаю даже как загуглить( чтобы пример посмотреть таких условий
3. user1404821 23.09.21 14:02 Сейчас в теме
Нужна конструкция, которая позволит продолжить код, после закрытия окна.
5. user5300 1035 23.09.21 14:39 Сейчас в теме
Примерно так:

Процедура ОплатитьНаличными(Команда)
      
    ОчиститьСообщения();
       Если ТолькоПросмотр Тогда // Чек пробит. Изменение информации запрещено.
        Возврат;
    КонецЕсли;
    
    ПараметрыОткрытия = Новый Структура(
        "НеИспользоватьРучнойВвод, НеПодключатьОборудование",
        Не ПраваДоступа.ИзменениеКартЛояльности, Истина);
		
	ВыбраннаяФормаОплаты = Новый Структура;
    ВыбраннаяФормаОплаты.Вставить("Наличные",              Истина);
    ВыбраннаяФормаОплаты.Вставить("БонусныеБаллы",         Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПлатежныеКарты",        Ложь);
    ВыбраннаяФормаОплаты.Вставить("ПодарочныеСертификаты", Ложь);	
		
		
	ОП = Новый ОписаниеОповещения("ПриЗакрытииФормыКартыЛояльности", ЭтотОбъект,ВыбраннаяФормаОплаты);
	
    ОткрытьФорму(
        "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
        ПараметрыОткрытия,
        ЭтотОбъект,
        ЭтотОбъект.УникальныйИдентификатор,,,ОП);
		
    
КонецПроцедуры
	
Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт
	     
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);
    
    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
        ЭтотОбъект,
        Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));
	
КонецПроцедуры
	
Показать
6. user1404821 23.09.21 15:00 Сейчас в теме
(5) Спасибо, я тоже нашёл этот метод. По вашему коду почему-то ругается сервер на предпоследнюю строку
{Документ.ЧекККМ.Форма.ФормаДокументаРМК.Форма(1156,9)}: Тип не определен (ОписаниеОповещения)
Новый <<?>>ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры)); (Проверка: Сервер)
7. user5300 1035 23.09.21 15:05 Сейчас в теме
(6) процедура на клиенте

&НаКлиенте
Процедура ПриЗакрытииФормыКартыЛояльности()
8. user1404821 23.09.21 15:16 Сейчас в теме
(7) Понял Вас, теперь работает, спасибо большое.
10. user1404821 23.09.21 15:44 Сейчас в теме
(7)
Подскажите, если грубо, то этим кодом
Процедура ПриЗакрытииФормыКартыЛояльности(Результат,ВыбраннаяФормаОплаты) экспорт


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


?
9. user1404821 23.09.21 15:19 Сейчас в теме
При вводе карты лояльности, скидку он не считает, просто потом появляется форма оплаты, где-то механизм расчёта скидок вызывается до появления форма карт лояльности, буду думать
11. user5300 1035 23.09.21 15:56 Сейчас в теме
(10)
напрямую:

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

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ВыбраннаяФормаОплаты", ВыбраннаяФормаОплаты);
    
    РозничныеПродажиКлиент.ОбработатьСостояниеСмены(
        ЭтотОбъект,
        Новый ОписаниеОповещения("ОплатитьНаличнымиОбработкаОповещения", ЭтотОбъект, ДополнительныеПараметры));
    
КонецПроцедуры
Показать
12. user1404821 23.09.21 16:59 Сейчас в теме
Спасибо большое за помощь. Скидки не рассчитываются, не пойму почему. Карта клиента добавляется в документ и сразу выскакивает окно оплаты без скидки, если его закрыть и повторить процедуру, то уже рассчитываются
13. user1404821 23.09.21 17:02 Сейчас в теме
Надо как-то между ними вставить

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот