Изменение текущих данных строки.Управляемый режим

1. IrinaBasova 15.08.18 10:35 Сейчас в теме
Добрый день. В табличной части документа в событии ПриИзменении необходимо изменить данные реквизита. В обычном приложении работало так
ТекущиеДанные=Элементы.Вагоны.ТекущиеДанные;
ТекущиеДанные.ПринадлежностьВагона=Текущиеданные.Вагон.ПринадлежностьВагона;
ПринадлежностьВагона имеет тип Справочники.ПринадлежностьВагона


Видимо получение данных по принадлежности должно проходить наСервере
Найденные решения
5. sommid 15.08.18 11:06 Сейчас в теме
(4) на клиенте получаете ТекущуюСтроку - это будет Идентификатор строки, передаете его в серверную процедуру, там из таблицы Вагоны находите саму строку по идентификатору (есть такой метод у ДанныхФормыКоллекция, чем и является Объект.Вагоны), а дальше все просто
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Skromnyi 12 15.08.18 11:14 Сейчас в теме
(1)
&НаКлиенте
Процедура ВагоныВагонПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Вагоны.ТекущиеДанные;
	// Если есть БСП
	ТекущаяСтрока.ПринадлежностьВагона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСтрока.Вагон, "ПринадлежностьВагона");
	// Если нет БСП
	ТекущаяСтрока.ПринадлежностьВагона = ПолучитьПринадлежностьВагонаНаСервере(ТекущаяСтрока.Вагон);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьПринадлежностьВагонаНаСервере(Вагон)
	
	Возврат Вагон.ПринадлежностьВагона;
	
КонецФункции
Показать
8. herfis 499 15.08.18 11:19 Сейчас в теме
(6) Если БСП, то сначала серверный вызов нужно сделать. Если не БСП, то реквизит лучше получать запросом (как в БСП).
2. accounting_cons 754 15.08.18 10:44 Сейчас в теме
Да, все, что через точку вызывается, должно быть НаСервере.
3. herfis 499 15.08.18 10:45 Сейчас в теме
Да. Обращение к ссылкам через точку - это неявный запрос к базе данных. С тонкого клиента это не работает. На то он и тонкий :)
Придется либо серверный вызов делать в этот момент, либо где это возможно вычитывать нужные данные на клиент заранее, чтобы избежать лишних обращений на сервер во время работы.
4. IrinaBasova 15.08.18 10:53 Сейчас в теме
(3)и как это сделать, если сначала нужно получить текущую строку
5. sommid 15.08.18 11:06 Сейчас в теме
(4) на клиенте получаете ТекущуюСтроку - это будет Идентификатор строки, передаете его в серверную процедуру, там из таблицы Вагоны находите саму строку по идентификатору (есть такой метод у ДанныхФормыКоллекция, чем и является Объект.Вагоны), а дальше все просто
9. IrinaBasova 15.08.18 11:25 Сейчас в теме
(5)Спасибо, все получилось
10. herfis 499 15.08.18 11:32 Сейчас в теме
(9) Нет смысла искать по идентификатору строки строку источника данных. Проще работать через "ТекущиеДанные".
11. sommid 15.08.18 11:43 Сейчас в теме
(10) часто заполнение/пересчет вызывается и с клиента и с сервера..
если стремится везде к НаСервереБезКонтекста, тогда да - ТекущиеДанные и усложнение кода, чтобы на сервере получить все данные, которые не лежат "на поверхности", но я бы не сказал, что это "проще"
12. herfis 499 15.08.18 11:56 Сейчас в теме
(11) Так "ТекущиеДанные" - это и есть ссылка на соответствующий ДанныеФормыЭлементКоллекции, если мы о табличной части говорим. Проще тогда сразу ссылку на "ТекущиеДанные" передавать, чем искать их же по "ТекущаяСтрока".
7. herfis 499 15.08.18 11:16 Сейчас в теме
(4) Что именно сделать? Заранее вычитывать?
Если справочник заведомо небольшого размера (относительно), то можно кэшировать его данные заранее в полном объеме. Если большого - то ессно ничего тут не придумаешь. Придется сервер дергать. Либо если пользователь работает через форму выбора, то можно реализовать такую форму и обработку выбора, чтобы при выборе получать не только ссылку на выбранный элемент, но и сразу нужные его доп-реквизиты.
13. sommid 15.08.18 12:04 Сейчас в теме
так ТекущиеДанные не передаются с клиента на сервер
14. herfis 499 15.08.18 12:11 Сейчас в теме
(13) Ты прав. Чет я затупил.
Оставьте свое сообщение

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