Имя: Пароль:
1C
 
Подскажите по расширению
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) кстати да, прикольно выглядит, буду пробовать. Спасибо!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.