|
Подскажите по расширению | ☑ | ||
---|---|---|---|---|
0
Pro1001C
27.03.18
✎
18:53
|
Есть типовая розница, в обработке РМК если следующая процедура:
&НаКлиенте Процедура ВыполнитьЧО08ОплатаБонусами() Отказ = Ложь; ПараметрыИнформации = Неопределено; Если Объект.Товары.Количество() = 0 Тогда Возврат; КонецЕсли; ПроверитьКассовыеСмены(Отказ, ПараметрыИнформации); Если Отказ Тогда ОбщегоНазначенияРТКлиент.ОткрытьФормуИнформацииДляРМКУправляемой(ПараметрыИнформации); Возврат; КонецЕсли; ДополнительныеПараметры = Новый Структура; ВозможнаОплата = ВозможнаОплатаБонусами(ДополнительныеПараметры); Если ВозможнаОплата Тогда // Скидки ПараметрыДействия = Новый Структура; ПараметрыДействия.Вставить("Отказ", Отказ); ПараметрыДействия.Вставить("ПараметрыИнформации", ПараметрыИнформации); ПараметрыДействия.Вставить("БонуснаяПрограммаЛояльности", ДополнительныеПараметры.БонуснаяПрограммаЛояльности); ПараметрыДействия.Вставить("ИмяОбработкиОповещения", "ОплатаБонусамиПослеВыводаСообщений"); ПараметрыДействия.Вставить("БудетОплатаБонусами", Истина); ПараметрыДействия.Вставить("УменьшатьСуммуЧекаДляСкидокНаСуммуБонусов", ДополнительныеПараметры.УменьшатьСуммуЧекаДляСкидокНаСуммуБонусов); Если ДополнительныеПараметры.УменьшатьСуммуЧекаДляСкидокНаСуммуБонусов Тогда ОтменитьСкидкиИОплатуБонусамиСервер(); Иначе Если (НЕ Объект.ПродажаПоЗаказу) И (НЕ Объект.СкидкиРассчитаны) Тогда НазначитьАвтоматическиеСкидкиКлиент( , , ПараметрыДействия); КонецЕсли; КонецЕсли; Если ПараметрыДействия.Свойство("ВыведеныСообщения") Тогда Возврат; Иначе ОплатаБонусамиПослеВыводаСообщений(Неопределено, ПараметрыДействия); КонецЕсли; Иначе ОбщегоНазначенияРТКлиент.ОткрытьФормуИнформацииДляРМКУправляемой(ДополнительныеПараметры); КонецЕсли; КонецПроцедуры Мне вот тут Если (НЕ Объект.ПродажаПоЗаказу) И (НЕ Объект.СкидкиРассчитаны) Тогда НазначитьАвтоматическиеСкидкиКлиент( , , ПараметрыДействия); КонецЕсли; нужно сделать вот так: Если (НЕ Объект.ПродажаПоЗаказу) Тогда НазначитьАвтоматическиеСкидкиКлиент( , , ПараметрыДействия); КонецЕсли; Подскажите, как сделать через расширение? Форму засунул, а вот что в коде писать, пока не соображу. Признаюсь, только начал смотреть расширение, до этого не сталкивался |
|||
1
Sj
27.03.18
✎
18:57
|
Когда не знаешь, как делать правильно, делай, как умеешь.
|
|||
2
Pro1001C
27.03.18
✎
19:00
|
Сам я пока вижу так:
В расширение, в форме &Вместо(«ВыполнитьЧО08ОплатаБонусами») Процедура Расширение_ВыполнитьЧО08ОплатаБонусами() ///сюда копирую все из процедуры основной конфигурации за ///исключением моего условия КонецПроцедуры получается я типовую процедуру меняю на свою. Но из-за одного условия не очень хорошо, как мне видется, будет обновляться конца, эта процедура будет изменяться/добавляться что-то. Возможно как-то только одно условие изменить, а все остальное оставить в коде основной конфигурации? |
|||
3
Pro1001C
27.03.18
✎
19:02
|
(1) в особых условия так и приходится делать. Но сейчас хочется научится правильно, просто потому, что нельзя снимать конфу с поддержки.
|
|||
4
Ц_У
27.03.18
✎
19:03
|
Чтобы избавиться от этой несправедливости, мы реализовали во встроенном языке новый метод – ПродолжитьВызов(). Если вы вызовете этот метод внутри своей функции-перехватчика, то исполнится та функция, которую вы перекрыли, после чего исполнение кода вернётся в ваш перехватчик:
http://v8.1c.ru/o7/201603module/index.htm |
|||
5
Ц_У
27.03.18
✎
19:12
|
Ну можно "Перед" нивелировать условие (НЕ Объект.СкидкиРассчитаны)
А "После" вернуть в исходное состояние, в итоге: &Вместо.. Было = Объект.СкидкиРассчитаны; Объект.СкидкиРассчитаны = Ложь; ПродолжитьВызов(...) Объект.СкидкиРассчитаны = Было; |
|||
6
AlvlSpb
27.03.18
✎
19:21
|
(5) + 1 Самый правильный способ
|
|||
7
Pro1001C
27.03.18
✎
21:29
|
(5) кстати да, прикольно выглядит, буду пробовать. Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |