|
Выполнение кода на клиенте или на сервере в УП | ☑ | ||
---|---|---|---|---|
0
thezos
05.07.13
✎
17:44
|
Прошу помощи, никак не получается решить следующую задачу.
В управляемой форме есть реквизит формы типа дерево значений. У дерева есть единственная колонка составного типа (ЛюбаяСсылка, Строка). Хочу по двойному клику на строке открывать объект, на который ведет любая ссылка(это работает ок). Если же это строка, то открывать форму списка регистра сведений (имя регистра и есть эта строка) с установленным отбором по измерению, значением для отбора будет родитель строки, по которой дважды тыкаем в дереве. В обычном приложении я легко это реализовал, а тут запутался, какой код должен выполняться на сервере, а какой на клиенте. Помогите разобраться как нужно правильно сделать. Вот код: &НаКлиенте Процедура ДеревоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) // Это обработчик события двойного клика, выполняется на клиенте СтандартнаяОбработка = Ложь; ТекДанные = Элемент.ТекущиеДанные; Родитель = Элемент.ТекущиеДанные.РодительСсылка; // в этой переменной хранится значение, по которому дальше будем делать отбор в форме списка регистра сведений (ссылка на документ, справочник или еще что нибудь) Если ТипЗнч(ТекДанные.Ссылка) = Тип("Строка") Тогда // ТекДанные.Ссылка - это колонка со строкой, в которой хранится имя регистра сведений, форму списка которого нужно открыть с установленным отбором Если Родитель <> Неопределено Тогда ЗначениеОтбора = Родитель; ТипРодителя = ТипЗнч(ЗначениеОтбора); ДанныеДляОтбора = ПолучитьДанныеДляОтбора(ТекДанные.Ссылка,ТипРодителя); // эта функция возвращает структуру с именем измерения, по которому будем устанавливать отбор и с регистром сведений. затык именно на этом месте, я знаю что нельзя передавать на клиент регистр сведений, и форму тоже нельзя передавать.. но форму открыть можно только на клиенте, а как же тогда добраться до регистра сведений? РС = РегистрыСведений[ДанныеДляОтбора.РС]; ИмяИзмерения = ДанныеДляОтбора.Измерение; ФормаРС = РС.ПолучитьФормуСписка(); ЭлементОтбора = ФормаРС.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяИзмерения); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ФормаРС.Открыть(); КонецЕсли; Иначе ТекДанные.Ссылка.ПолучитьФорму().Открыть(); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьДанныеДляОтбора(ИмяРегистра,ТипРодителя) тмпНач = Найти(ИмяРегистра, "."); ИмяРегистраКраткое = СокрЛП(Сред(ИмяРегистра,тмпНач+1)); Для Каждого Измерение Из Метаданные.РегистрыСведений[ИмяРегистраКраткое].Измерения Цикл Если Измерение.Тип.СодержитТип(ТипРодителя) Тогда ИмяИзмерения = Измерение.Имя; // возвращаем имя измерения и регистр сведений СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("Измерение",ИмяИзмерения); СтруктураВозврата.Вставить("РС",ИмяРегистраКраткое); Возврат СтруктураВозврата; КонецЕсли; КонецЦикла; Возврат Неопределено; КонецФункции |
|||
1
Поросенок Петр
05.07.13
✎
18:37
|
Покури как следует "ОткрытьФорму" и на сервер ходить может и не придется.
|
|||
2
zladenuw
05.07.13
✎
18:42
|
||||
3
thezos
08.07.13
✎
10:23
|
(1) Точно!! Но на сервер ходить таки пришлось) чтобы вытащить имя измерения для отбора
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |