Имя: Пароль:
1C
 
Как оптимизировать обращение на сервер с формы?
🠗 (Волшебник 18.03.2025 10:13)
0 program345
 
18.03.25
09:16
Добрый день!
С клиента обращаюсь на сервер, для получения Значения реквизита справочника из текущие данные.
Как я понимаю Скидка = ПолучитьСкидку(ТекДанные.Скидка); не оч хорошо, может проще создать реквизит в ТаблЧасти?

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;
	Попытка
		Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	Исключение 
		Скидка = 0;
	КонецПопытки; 
	
	ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;
	Попытка
		Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	Исключение 
		Скидка = 0;
	КонецПопытки; 
	
	ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;
	Попытка
		Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	Исключение 
		Скидка = 0;
	КонецПопытки; 
	
	//ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСкидкаПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;
	Попытка
		Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	Исключение 
		Скидка = 0;
	КонецПопытки; 
	
	//ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСуммаСкидкиПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;
	//Попытка
	//	Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	//Исключение 
	//	Скидка = 0;
	//КонецПопытки; 
	
	//ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	//ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры  

&НаСервере
Функция ПолучитьСкидку(Скидка)

	Возврат Скидка.ЗначениеСкидки;		

КонецФункции // ()
1 Волшебник
 
18.03.25
09:17
Тут нечего оптимизировать
2 ass1c
 
18.03.25
09:18
&НаСервереБезКонтекста
Функция ПолучитьСкидку(Скидка)

    Возврат Скидка.ЗначениеСкидки;        

КонецФункции // ()
3 arsik
 
гуру
18.03.25
09:18
&НаСервере
поменяй на
&НаСервереБезКонтекста
И норм
4 BDA80
 
18.03.25
09:20
Через точку от ссылки - ай ай яй
5 Маленький Вопросик
 
18.03.25
09:25
(4) выучил фразу с берестяных скрижалей?
6 ass1c
 
18.03.25
09:28
ну или если кому не нравится через точку, красиво и по БСП шному

&НаСервереБезКонтекста
Функция ПолучитьСкидку(Скидка)

    Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Скидка, "ЗначениеСкидки");        

КонецФункции // ()
7 H A D G E H O G s
 
18.03.25
09:28
ПроверятьПоМетаданным=Истина;

Скидка = пргОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекДанные.Скидка,"ЗначениеСкидки",ПроверятьПоМетаданным);
8 Маленький Вопросик
 
18.03.25
09:40
мне не нравится вот такой подход:
    Попытка
        Скидка = ПолучитьСкидку(ТекДанные.Скидка);    
    Исключение
        Скидка = 0;
    КонецПопытки;

надо работать через ТекДанные = неопределено, а не через вот эту всю шляпу...

но - мы не знаем, что за текущие данные там у него
9 H A D G E H O G s
 
18.03.25
09:42
(8) это неуверенность в завтрашнем дне новичка. Нужно смело собирать ошибки!
10 Волшебник
 
18.03.25
09:49
тут редактирование 1 строки. Что вы пытаетесь оптимизировать?
11 Прохожий
 
18.03.25
09:53
(8) Через попытку даже сам вендор часто пишет. Скоро при начале работы системы будет написано Попытка на весь сеанс. И в любой момент в исключение ПоказатьРекламу(); ЗавершитьРаботуСистемы()
12 Мультук
 
гуру
18.03.25
09:53
(9)

А потом также смело пожирать их в

  
Исключение
    //ну и хрен с ней, с ошибкой
КонецПопытки;




program345, еще немного и ваши "рыжие кудри" примелькаются

(8)
Он ниже присваивает в возможные ТекДанные = неопределено, так что медицина тут пока "нервно курит".
13 program345
 
18.03.25
10:09
(8)
14 Мультук
 
гуру
18.03.25
10:13
(13)

Вам говорят про условие (см  код)

&НаКлиенте
Процедура ТоварыСкидкаПриИзменении(Элемент)
	
	ТекДанные = Элементы.Товары.ТекущиеДанные;

        Если ТекДанные = Неопределено Тогда
             Возврат;
        КонецЕсли;


	Скидка = ПолучитьСкидку(ТекДанные.Скидка);	
	
	//ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
	ТекДанные.СуммаСкидки = ТекДанные.Сумма * Скидка/100;
	ТекДанные.Всего = ТекДанные.Сумма - ТекДанные.СуммаСкидки;  
	
КонецПроцедуры
15 Волшебник
 
18.03.25
10:13
Хватит разврата... Не надо оптимизировать учебную конфигурацию из 4 документов
16 program345
 
18.03.25
10:46
(8) (14)  Неопределено нету, есть пустая ссылка справочника Скидки, а на клиенте пустую ссылку не получить...
Закон Брукера: Даже маленькая практика стоит большой теории.