доброго дня!
есть код:
+ Code
//
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
Элементы.Товары.ТекущиеДанные.Цена = ТоварыНоменклатураПриИзмененииСервер(Элементы.Товары.ТекущиеДанные.Номенклатура);
КонецПроцедуры
&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена,
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", Товар.Наименование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецЕсли;
КонецФункции
//
можно ли его упростить?
есть код:
+ Code
//
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
Элементы.Товары.ТекущиеДанные.Цена = ТоварыНоменклатураПриИзмененииСервер(Элементы.Товары.ТекущиеДанные.Номенклатура);
КонецПроцедуры
&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена,
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", Товар.Наименование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецЕсли;
КонецФункции
//
можно ли его упростить?
По теме из базы знаний
- Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию
- Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток
- Как начать писать тесты без регистрации и СМС
- Асинхронное нечто, или так, как раньше!
- Что такое ОСень? Или как лучшие практики из мира Java прижились в экосистеме OneScript
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) olo_lo4, Это самописная конфигурация? В типовых регистр сведений для цены используется.
А так, что-то вроде этого:
UPD: &НаСервере тут лишнее. Лучше &НаСервереБезКонтекста
А так, что-то вроде этого:
&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Товар);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат 0;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий()
Возврат ВыборкаДетальныеЗаписи.Цена;
КонецФункции
ПоказатьUPD: &НаСервере тут лишнее. Лучше &НаСервереБезКонтекста
(1) olo_lo4, Ну если все-таки свое писать, то
Но, лучше имеющиеся механизмы использовать
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
ТД.Цена = ТоварыНоменклатураПриИзмененииСервер(ТД.Номенклатура);
КонецПроцедуры
&НаСервере
Функция ТоварыНоменклатураПриИзмененииСервер(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Цена КАК Цена
|
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
| И Номенклатура.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Товар);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
ПоказатьНо, лучше имеющиеся механизмы использовать
Ну, если в (3) кусок:
заменить на
то будет еще интереснее.
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
заменить на
Результат = Запрос.Выполнить().Выгрузить();
Возврат ?(Результат.Количество>0,Результат[0].Цена,0);
(7) kofr1c, смеяться полезно, продлевает жизнь.
Только неплохо бы знать структуру предметной области.
Запросом мы выбираем из таблицы только одно значение, в данном случае - "цена".
При Вашем решение будет считываться из базы весь объект Номенклатура со всеми реквизитами для получения только одного нужного.
Это и медленнее и затратнее.
Только неплохо бы знать структуру предметной области.
Запросом мы выбираем из таблицы только одно значение, в данном случае - "цена".
При Вашем решение будет считываться из базы весь объект Номенклатура со всеми реквизитами для получения только одного нужного.
Это и медленнее и затратнее.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот