1. AlexeyMalko 11.02.20 17:14 Сейчас в теме

Реквизит табличной части заполнить через точку (управляемая форма)

В документе есть табличная часть, один из реквизитов ссылка на справочник. В этом справочнике есть два реквизита строчного типа, как мне при выборе элемента справочника в табличной части заполнить ещё две ячейки реквизитами этого же справочника.
Выбираю строку :
Идентификатор = Элементы.СоставТМЦ.ТекущаяСтрока;
	Если Идентификатор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ТекСтрока = Объект.СоставТМЦ.НайтиПоИдентификатору(Идентификатор);
	Если ТекСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
Показать

Потом надо на сервере как то получить значение через точку и вернуть назад или заполнить, никак не получается правильно сделать.
Найденные решения
11. user1357043 12.02.20 11:27 Сейчас в теме
Я обычно так делаю, если нужно разные реквизиты разных объектов на клиенте получить:

&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
    
    Идентификатор = Элементы.Товары.ТекущаяСтрока;
    Если Идентификатор = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
    Если ТекСтрока = Неопределено Тогда
        Возврат;
	КонецЕсли;
	
	ТМП = ТекСтрока.КодТМЦ;
	ТекСтрока.КодГруппы1 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы1");
    ТекСтрока.КодГруппы2 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы2");
    ТекСтрока.БухСчет = ПолучитьДанныеНаСервере(ТМП , "БухСчет");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере(Объект, ИмяРеквизита)
	Возврат Объект[ИмяРеквизита];
КонецФункции
Показать


Функцию можно будет использовать и для других нужд.
Остальные ответы
Избранное Подписка Сортировка: Древо
2. RustamZz 11.02.20 17:27 Сейчас в теме
(1) Все верно. Для того что бы считать какой-то реквизит из базы данных, нужно обратиться к серверу.
Для снижения нагрузки желательно сделать бесконтекстный серверный вызов.
alex-l19041; +1 Ответить
3. YannikAlx 33 11.02.20 17:27 Сейчас в теме
Если у вас есть ссылка (а вы именно это утверждаете), значит у вас есть ВСЕ, то есть каждый реквизит будет именно через точку от этой ссылки
4. alex-l19041 8 11.02.20 18:04 Сейчас в теме
(3) на обычных формах так и было, на управляемых надо делать вызов серверной функции
5. AlexeyMalko 11.02.20 18:10 Сейчас в теме
(3) на клиенте нельзя СправочникССылка.Реквизит.Реквизит2
7. YannikAlx 33 11.02.20 18:14 Сейчас в теме
(4)(5) А я разве писал, что это можно делать на клиенте?
Автор ведь и не упомянул, что он это делает на клиенте...
Мало того он конкретно пишет
Потом надо на сервере как то получить значение через точку
6. AlexeyMalko 11.02.20 18:12 Сейчас в теме
Сделал так , работает:
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
	
	Идентификатор = Элементы.Товары.ТекущаяСтрока;
	Если Идентификатор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
	Если ТекСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ПолучитьДанныеНаСервере(ТекСтрока.КодТМЦ,ТекСтрока.КодГруппы1,ТекСтрока.КодГруппы2, ТекСтрока.БухСчет);
		
КонецПроцедуры

&НаСервере
Процедура ПолучитьДанныеНаСервере(КодТМЦ,КодГруппы1,КодГруппы2,БухСчет)

	КодГруппы1=КодТМЦ.КодГруппы1;
	КодГруппы2=КодТМЦ.КодГруппы2;
	БухСчет=КодТМЦ.БухСчет;
	
КонецПроцедуры
Показать
8. karamazoff 7 11.02.20 18:15 Сейчас в теме
(6)Правильнее было-бы на клиенте получить идентификатор текущей строки, передать его на сервер, на сервере найти строку по идентификатору и делать со строкой все что нужно
AlexeyMalko; +1 Ответить
10. AlexeyMalko 12.02.20 11:14 Сейчас в теме
(8) ну если не сложно поправь мой код как должно быть , а то у меня что то на сервере искать строку не получилось
9. RustamZz 12.02.20 08:31 Сейчас в теме
(6) &НаСервереБезКонтекста
user1357043; AlexeyMalko; +2 Ответить
12. user1357043 12.02.20 11:35 Сейчас в теме
(6)Предложенный вариант будет страшно тормозить, если в табличной части много строк. или если на форме много данных. при вызове &НаСервере они все будут отправляться на сервер, а потом обратно. Занесите программно в таблицу хотябы 2000-3000 строк и посмотрите, как "быстро" это всё будет работать.
Поэтому лучше &НаСервереБезКонтекста.
11. user1357043 12.02.20 11:27 Сейчас в теме
Я обычно так делаю, если нужно разные реквизиты разных объектов на клиенте получить:

&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
    
    Идентификатор = Элементы.Товары.ТекущаяСтрока;
    Если Идентификатор = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
    Если ТекСтрока = Неопределено Тогда
        Возврат;
	КонецЕсли;
	
	ТМП = ТекСтрока.КодТМЦ;
	ТекСтрока.КодГруппы1 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы1");
    ТекСтрока.КодГруппы2 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы2");
    ТекСтрока.БухСчет = ПолучитьДанныеНаСервере(ТМП , "БухСчет");
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере(Объект, ИмяРеквизита)
	Возврат Объект[ИмяРеквизита];
КонецФункции
Показать


Функцию можно будет использовать и для других нужд.
13. karamazoff 7 12.02.20 15:47 Сейчас в теме
(11)жесть!!!! использовать БезКонтекста и передавать весь объект....
14. RustamZz 12.02.20 15:49 Сейчас в теме
(13) Вообще-то у автора там не весь объект, а только один реквизит, но вот 3 раза вызвать сервер я не сторонник.
21. user1357043 12.02.20 17:20 Сейчас в теме
(14)Согласен, что конкретно для этого случая, эффективнее использовать одну общую процедуру/функцию для установки всех значений. Как это и сделал автор вопроса в своем ответе (только БезКонтекста). Но мой метод можно использовать, если нужно обратится к реквизитам объекта из разных участков кода.
20. user1357043 12.02.20 17:18 Сейчас в теме
(13)там просто название "Объект". но передадутся только ТекСтрока.КодТМЦ.
Точно не скажу, что там, скорее всего только ссылка (данные формы элемент коллекции). В любом случае, на клиенте объект в ячейке таблицы не будет храниться.
22. karamazoff 7 12.02.20 18:32 Сейчас в теме
(20)да, смутило именно ОБЪЕКТ, но вроде все пути найдены, аллилуя!
15. karamazoff 7 12.02.20 15:54 Сейчас в теме
&НаКлиенте
Процедура ОбработатьСтроку()
инд = Элементы.Таблица.ТекущиеДанные.ПолучитьИдентификатор();
ОбработатьСтроку(инд);
КонецПроцедуры

&НаСервере
Процедура ОбработатьСтроку(инд)
стр = Таблица.НайтиПоИдентификатору(инд)
//здесь делаем со строкой все что хотим
КонецПроцедуры
16. antz 12.02.20 16:12 Сейчас в теме
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    Реквизиты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекДанные.КодТМЦ, "КодГруппы1, КодГруппы2, БухСчет");
    ЗаполнитьЗначенияСвойств(ТекДанные, Реквизиты)
КонецПроцедуры
17. karamazoff 7 12.02.20 16:34 Сейчас в теме
18. EVKash 3 12.02.20 16:57 Сейчас в теме
(16) ОбщегоНазначения серверный
в УТ11 с клиента можно так ОбщегоНазначенияУТВызовСервера.ЗначенияРеквизитовОбъекта
19. antz 12.02.20 17:02 Сейчас в теме
(18) да я, собственно, о том, что не надо заморачиваться с идентификатором текущей строки, а пихать все прямо в текущие данные
23. AlexeyMalko 13.02.20 13:50 Сейчас в теме
(18) спрашивал в общем без привязки к конфигурации. Понятно что есть какие то общие модули или там в бсп прописано. У меня не получалось для самописной конфигурации сделать.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Бизнес-аналитик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата до 130 000 руб.
Полный день