как упростить данный код?

1. olo_lo4 09.03.15 00:41 Сейчас в теме
доброго дня!

есть код:
+ Code

//

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

&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена,
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", Товар.Наименование);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

Возврат ВыборкаДетальныеЗаписи.Цена;

КонецЕсли;

КонецФункции
//


можно ли его упростить?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 09.03.15 01:00 Сейчас в теме
(1) olo_lo4, Это самописная конфигурация? В типовых регистр сведений для цены используется.
А так, что-то вроде этого:
&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Товар);

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
 Возврат 0;
КонецЕсли;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

ВыборкаДетальныеЗаписи.Следующий()

Возврат ВыборкаДетальныеЗаписи.Цена;

КонецФункции 
Показать


UPD: &НаСервере тут лишнее. Лучше &НаСервереБезКонтекста
4. TMV 14 09.03.15 08:01 Сейчас в теме
Вариант в (2) получше выглядит.
3. Prince_1 4 09.03.15 01:13 Сейчас в теме
(1) olo_lo4, Ну если все-таки свое писать, то
&НаКлиенте 
Процедура ТоварыНоменклатураПриИзменении(Элемент) 
ТД = Элементы.Товары.ТекущиеДанные;
ТД.Цена = ТоварыНоменклатураПриИзмененииСервер(ТД.Номенклатура); 
КонецПроцедуры 

&НаСервере 
Функция ТоварыНоменклатураПриИзмененииСервер(Товар) 

Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
| Номенклатура.Цена КАК Цена
|  
|ИЗ 
| Справочник.Номенклатура КАК Номенклатура 
|ГДЕ 
| НЕ Номенклатура.ЭтоГруппа
| И Номенклатура.Ссылка = &Ссылка"; 

Запрос.УстановитьПараметр("Ссылка", Товар); 

РезультатЗапроса = Запрос.Выполнить(); 
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); 

Если ВыборкаДетальныеЗаписи.Следующий() Тогда 
Возврат ВыборкаДетальныеЗаписи.Цена; 
Иначе 
Возврат 0;
КонецЕсли; 

КонецФункции 
Показать

Но, лучше имеющиеся механизмы использовать
10. sssss_aaaaa_2011 09.03.15 21:31 Сейчас в теме
Ну, если в (3) кусок:
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;

заменить на
Результат = Запрос.Выполнить().Выгрузить(); 

Возврат ?(Результат.Количество>0,Результат[0].Цена,0);
то будет еще интереснее.
11. minimajack 80 10.03.15 09:31 Сейчас в теме
(10) sssss_aaaaa_2011,
Главное не забывать править запрос, если результат ожидается 1
ВЫБРАТЬ ПЕРВЫЕ 1
12. Prince_1 4 10.03.15 10:20 Сейчас в теме
(10) sssss_aaaaa_2011, да, так оно интереснее)
Но, все-таки, цену в справочнике хранить... А если завтра другой тип цен добавится - автор будет новый реквизит добавлять?
5. kofr1c 09.03.15 08:39 Сейчас в теме
(1) olo_lo4,
1. А зачем в данном случае вообще запрос использовать? У Вас есть ссылка на номенклатуру,из которой получаем цену!
2. Процедуру ТоварыНоменклатураПриИзмененииСервер(Товар) использовать &НаСервереБезКонтекста
6. spacecraft 09.03.15 09:53 Сейчас в теме
(5) kofr1c, на клиенте нет данных о реквизитах справочника Номенклатура - цена. Все равно на сервер идти получать. Запросом быстрее и экономичнее.
7. kofr1c 09.03.15 10:38 Сейчас в теме
(6) spacecraft, да,кто ж спорит?Да,на сервер все равно идти,но только смешите меня тем,что в данном случае запросом быстрее будет и экономичнее (тем более)!
8. spacecraft 09.03.15 10:45 Сейчас в теме
(7) kofr1c, смеяться полезно, продлевает жизнь.
Только неплохо бы знать структуру предметной области.
Запросом мы выбираем из таблицы только одно значение, в данном случае - "цена".
При Вашем решение будет считываться из базы весь объект Номенклатура со всеми реквизитами для получения только одного нужного.
Это и медленнее и затратнее.
9. kofr1c 09.03.15 10:50 Сейчас в теме
(8) spacecraft, Сколько людей - столько и мнений!Свое видение я выразил,а дальще - решать автору
13. AllexSoft 10.03.15 10:29 Сейчас в теме
думаю у автора стоит спросить зачем и что он хочет упрощать )
Оставьте свое сообщение

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