Вход | Регистрация

1С:Предприятие ::

Метки: 

Подскажите по расширению

Я
   Pro1001C
 
27.03.18 - 18:53
Есть типовая розница, в обработке РМК если следующая процедура:

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

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

Мне вот тут 

Если (НЕ Объект.ПродажаПоЗаказу)
                И (НЕ Объект.СкидкиРассчитаны) Тогда
                НазначитьАвтоматическиеСкидкиКлиент( , , ПараметрыДействия);
            КонецЕсли;


нужно сделать вот так:
Если (НЕ Объект.ПродажаПоЗаказу) Тогда
                НазначитьАвтоматическиеСкидкиКлиент( , , ПараметрыДействия);
            КонецЕсли;



Подскажите, как сделать через расширение? Форму засунул, а вот что в коде писать, пока не соображу. 
Признаюсь, только начал смотреть расширение, до этого не сталкивался
 
 
   Sj
 
1 - 27.03.18 - 18:57
Когда не знаешь, как делать правильно, делай, как умеешь.
   Pro1001C
 
2 - 27.03.18 - 19:00
Сам я пока вижу так:

В расширение, в форме
&Вместо(«ВыполнитьЧО08ОплатаБонусами»)
Процедура Расширение_ВыполнитьЧО08ОплатаБонусами()

///сюда копирую все из процедуры основной конфигурации за ///исключением моего условия


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


получается я типовую процедуру меняю на свою. Но из-за одного условия не очень хорошо, как мне видется, будет обновляться конца, эта процедура будет изменяться/добавляться что-то. Возможно как-то только одно условие изменить, а все остальное оставить в коде основной конфигурации?
   Pro1001C
 
3 - 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
Ну можно "Перед" нивелировать условие (НЕ Объект.СкидкиРассчитаны)
А "После" вернуть в исходное состояние, в итоге:

&Вместо..
Было = Объект.СкидкиРассчитаны;
Объект.СкидкиРассчитаны = Ложь;
ПродолжитьВызов(...)
Объект.СкидкиРассчитаны = Было;
   AlvlSpb
 
6 - 27.03.18 - 19:21
(5) + 1 Самый правильный способ
   Pro1001C
 
7 - 27.03.18 - 21:29
(5) кстати да, прикольно выглядит, буду пробовать. Спасибо!


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует