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

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 43 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 43 11.02.20 18:14 Сейчас в теме
(4)(5) А я разве писал, что это можно делать на клиенте?
Автор ведь и не упомянул, что он это делает на клиенте...
Мало того он конкретно пишет
Потом надо на сервере как то получить значение через точку
6. AlexeyMalko 11.02.20 18:12 Сейчас в теме
Сделал так , работает:
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
	
	Идентификатор = Элементы.Товары.ТекущаяСтрока;
	Если Идентификатор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
	Если ТекСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ПолучитьДанныеНаСервере(ТекСтрока.КодТМЦ,ТекСтрока.КодГруппы1,ТекСтрока.КодГруппы2, ТекСтрока.БухСчет);
		
КонецПроцедуры

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

	КодГруппы1=КодТМЦ.КодГруппы1;
	КодГруппы2=КодТМЦ.КодГруппы2;
	БухСчет=КодТМЦ.БухСчет;
	
КонецПроцедуры
Показать
8. karamazoff 95 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 95 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 95 12.02.20 18:32 Сейчас в теме
(20)да, смутило именно ОБЪЕКТ, но вроде все пути найдены, аллилуя!
15. karamazoff 95 12.02.20 15:54 Сейчас в теме
&НаКлиенте
Процедура ОбработатьСтроку()
инд = Элементы.Таблица.ТекущиеДанные.ПолучитьИдентификатор();
ОбработатьСтроку(инд);
КонецПроцедуры

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

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

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день