Имя: Пароль:
1C
1С v8
Вопрос по методологической правильности кода для УФ
0 simol
 
21.12.11
18:09
Делаю упр. форму документа с табличной частью товары. Хочу обычные действия при изменении номенклатуры прописать. Проанализировав типовые конфы получился такой код:

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
   
   СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
   
   ДанныеОбменаССервером = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент");
   ЗаполнитьЗначенияСвойств(ДанныеОбменаССервером, СтрокаТабличнойЧасти);
   
   ЗначенияДляЗаполнения = ПриИзмененииНоменклатурыНаСервере(ДанныеОбменаССервером);
   ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, ЗначенияДляЗаполнения);
   
КонецПроцедуры    

&НаСервереБезКонтекста
Функция ПриИзмененииНоменклатурыНаСервере(ДанныеОбменаССервером)
   
   Если ЗначениеЗаполнено(ДанныеОбменаССервером.ХарактеристикаНоменклатуры) И ДанныеОбменаССервером.Номенклатура <> ДанныеОбменаССервером.ХарактеристикаНоменклатуры.Владелец Тогда
       ДанныеОбменаССервером.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
   КонецЕсли;    
   Если ДанныеОбменаССервером.Номенклатура <> ДанныеОбменаССервером.ЕдиницаИзмерения.Владелец Тогда
       ДанныеОбменаССервером.ЕдиницаИзмерения = ДанныеОбменаССервером.Номенклатура.ЕдиницаХраненияОстатков;
   КонецЕсли;
   Если ДанныеОбменаССервером.Коэффициент <> ДанныеОбменаССервером.ЕдиницаИзмерения.Коэффициент Тогда
       ДанныеОбменаССервером.Коэффициент = ДанныеОбменаССервером.ЕдиницаИзмерения.Коэффициент;    
   КонецЕсли;
   
   Возврат ДанныеОбменаССервером;
   
КонецФункции

но он меня смущает, ну не верится что это так правильно делать. особенно смущает набирание руками состава структуры.

Может есть правильный способ попроще?
1 Deon
 
21.12.11
18:22
(0) Ну, если я правильно понимаю, то всё это нужно лишь для того, чтобы уменьшить объем передаваемых данных между клиентом и сервером. Поэтому и передаваемые поля приходится выбирать самому в структуре.
2 GLazNik
 
21.12.11
18:26
(0) Код вполне. Функция с дерективой &НаСервереБезКонтекста работает значительно быстрее чем &НаСервере. Ручной определение состава ограничивает передаваемый объем данных.
3 apokrit
 
21.12.11
18:30
(0) Вроде, вполне нормальный код.
Только нужно Знач подписать перед именем параметра, что бы стало:
ПриИзмененииНоменклатурыНаСервере(Знач ДанныеОбменаССервером)
Иначе структура обратно на клиент поедет вместе с возвращаемым значением, хотя это мелочь конечно.
4 simol
 
21.12.11
18:34
Как это громоздко выглядит после обычных форм :)
5 Vladimirr
 
21.12.11
18:37
(0) почему нельзя через номер строки действовать? (вопрос для расширения кругозора)
6 simol
 
21.12.11
18:39
(5) А подробней? передать на сервер номер строки и ее править на сервере?
7 Deon
 
21.12.11
18:39
(5) В смысле передавать на сервер номер строки? Тогда придется передавать и всю табличную часть, что куда больше, чем маленькая структурка в 0
8 GLazNik
 
21.12.11
18:41
(5) Все возможно. И выбор конечного решения зависит от ситуации.
9 Vladimirr
 
21.12.11
18:41
(6)(7) &НаСервере использовать в модуле формы. Кроме скорости работы, есть проблемы?
10 GLazNik
 
21.12.11
18:43
(9) Нет. Но тогда смысл теряется в этой структуре. В этом случае в процедуре/функции будет доступна табличная часть со всеми вытекающими.