Реквизит табличной части заполнить через точку (управляемая форма)
В документе есть табличная часть, один из реквизитов ссылка на справочник. В этом справочнике есть два реквизита строчного типа, как мне при выборе элемента справочника в табличной части заполнить ещё две ячейки реквизитами этого же справочника.
Выбираю строку :
Потом надо на сервере как то получить значение через точку и вернуть назад или заполнить, никак не получается правильно сделать.
Выбираю строку :
Идентификатор = Элементы.СоставТМЦ.ТекущаяСтрока;
Если Идентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока = Объект.СоставТМЦ.НайтиПоИдентификатору(Идентификатор);
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказатьПотом надо на сервере как то получить значение через точку и вернуть назад или заполнить, никак не получается правильно сделать.
По теме из базы знаний
- Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Универсальные обработки документов, справочников, регистров, констант для 1С: Предприятие 8.3, управляемые формы
- Наглядные доп.реквизиты товара в табличной части документа за 5 минут
- Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы)
- Глобальное меню разработчика для управляемых форм
Найденные решения
Я обычно так делаю, если нужно разные реквизиты разных объектов на клиенте получить:
Функцию можно будет использовать и для других нужд.
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
Идентификатор = Элементы.Товары.ТекущаяСтрока;
Если Идентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТМП = ТекСтрока.КодТМЦ;
ТекСтрока.КодГруппы1 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы1");
ТекСтрока.КодГруппы2 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы2");
ТекСтрока.БухСчет = ПолучитьДанныеНаСервере(ТМП , "БухСчет");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере(Объект, ИмяРеквизита)
Возврат Объект[ИмяРеквизита];
КонецФункции
ПоказатьФункцию можно будет использовать и для других нужд.
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Сделал так , работает:
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
Идентификатор = Элементы.Товары.ТекущаяСтрока;
Если Идентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ПолучитьДанныеНаСервере(ТекСтрока.КодТМЦ,ТекСтрока.КодГруппы1,ТекСтрока.КодГруппы2, ТекСтрока.БухСчет);
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеНаСервере(КодТМЦ,КодГруппы1,КодГруппы2,БухСчет)
КодГруппы1=КодТМЦ.КодГруппы1;
КодГруппы2=КодТМЦ.КодГруппы2;
БухСчет=КодТМЦ.БухСчет;
КонецПроцедуры
Показать
(6)Предложенный вариант будет страшно тормозить, если в табличной части много строк. или если на форме много данных. при вызове &НаСервере они все будут отправляться на сервер, а потом обратно. Занесите программно в таблицу хотябы 2000-3000 строк и посмотрите, как "быстро" это всё будет работать.
Поэтому лучше &НаСервереБезКонтекста.
Поэтому лучше &НаСервереБезКонтекста.
Я обычно так делаю, если нужно разные реквизиты разных объектов на клиенте получить:
Функцию можно будет использовать и для других нужд.
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
Идентификатор = Элементы.Товары.ТекущаяСтрока;
Если Идентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТМП = ТекСтрока.КодТМЦ;
ТекСтрока.КодГруппы1 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы1");
ТекСтрока.КодГруппы2 = ПолучитьДанныеНаСервере(ТМП , "КодГруппы2");
ТекСтрока.БухСчет = ПолучитьДанныеНаСервере(ТМП , "БухСчет");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере(Объект, ИмяРеквизита)
Возврат Объект[ИмяРеквизита];
КонецФункции
ПоказатьФункцию можно будет использовать и для других нужд.
(14)Согласен, что конкретно для этого случая, эффективнее использовать одну общую процедуру/функцию для установки всех значений. Как это и сделал автор вопроса в своем ответе (только БезКонтекста). Но мой метод можно использовать, если нужно обратится к реквизитам объекта из разных участков кода.
&НаКлиенте
Процедура ОбработатьСтроку()
инд = Элементы.Таблица.ТекущиеДанные.ПолучитьИдентификатор();
ОбработатьСтроку(инд);
КонецПроцедуры
&НаСервере
Процедура ОбработатьСтроку(инд)
стр = Таблица.НайтиПоИдентификатору(инд)
//здесь делаем со строкой все что хотим
КонецПроцедуры
Процедура ОбработатьСтроку()
инд = Элементы.Таблица.ТекущиеДанные.ПолучитьИдентификатор();
ОбработатьСтроку(инд);
КонецПроцедуры
&НаСервере
Процедура ОбработатьСтроку(инд)
стр = Таблица.НайтиПоИдентификатору(инд)
//здесь делаем со строкой все что хотим
КонецПроцедуры
&НаКлиенте
Процедура ТоварКодТМЦПриИзменении(Элемент)
ТекДанные = Элементы.Товары.ТекущиеДанные;
Реквизиты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекДанные.КодТМЦ, "КодГруппы1, КодГруппы2, БухСчет");
ЗаполнитьЗначенияСвойств(ТекДанные, Реквизиты)
КонецПроцедуры
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)