|
Получить значение элемента с управляемой формы | ☑ | ||
---|---|---|---|---|
0
Rizhij_Nikitos
12.02.13
✎
19:19
|
Собственно задача поднималась мною пару дней назад и кое-как я решил вопрос, получаю на клиенте форму, открываю ее, перебираю все значения полей ввода и флажков, записываю имена таблиц, после чего закрываю форму и передаю инфу на сервак, клепаю простенький отчет о том как называется элемент и что содержит, в т.ч. отслеживаю на каких страницах что находится.
Но вот косяк. Господа разработчики, как последние собаки, взяли и назвали реквизит немного не так, как называется элемент на форме, в итоге обращаясь к Форма[Элемент.Имя] или к Форма.Объект[Элемент.Имя], дабы получить его содержание, я вылетаю с ошибкой потому что Элемент.Имя=РеализацияПоЗаказу, а Форма.Объект[Элемент.Имя]=РеализацияПоЗаказам. Возник вопрос, как мне управляемую форму разобрать так, чтобы полностью получить имя реквизита, соответствующего полю на форме. |
|||
1
Rizhij_Nikitos
12.02.13
✎
19:33
|
Вверх
|
|||
2
GANR
12.02.13
✎
19:35
|
(0) Этот код должен выпоняться на сервере
Форма[] |
|||
3
GANR
12.02.13
✎
19:35
|
Форма[ИмяЭлемента].ПутьКДанным
|
|||
4
Rizhij_Nikitos
12.02.13
✎
19:36
|
Ты очень умный, скажи как мне форму на сервере получить?
|
|||
5
GANR
12.02.13
✎
19:42
|
В модуле формы можно сделать что-то вроде
&НаСервере Функция ПолучитьПутьЭлемента(ИмяЭлемента) Возврат Элементы[ИмяЭлемента].ПутьКДанным КонецФункции (4) Ты хочешь передать форму в некий общий модуль так? Тогда дествия такие (с клиента, на сервер в качестве параметра ее передать нельзя) 1. модуль формы &НаСервере Процедура ТвояПроцедура() ТвойСерверныйОбщийМодуль.ТвояФункция(ЭтаФорма) КонецПроцедуры 2. серверный общий модуль Функция ТвояФункция(Форма) ... ТвойПуть = Форма.Элементы.ТвойЭлемент.ПутьКДанным; ... КонецФункции Пойдет? |
|||
6
GANR
12.02.13
✎
19:46
|
С клиента, на сервер в качестве параметра процедуры/функции форму передать нельзя. Обходной путь - зайти в подпрограмму с директивой &НаСервере.
|
|||
7
Rizhij_Nikitos
12.02.13
✎
19:48
|
Так объясню. Я выбираю на форме отчета любой справочник или документ, после чего выбираю объект\документ. Надо получить его форму, после чего обойти все его элементы формы и вывести их названия и значения которые они содержат. Это внешний отчет и работать должно в любой типовой УТ11/КА1.1/БП3.0
|
|||
8
GANR
12.02.13
✎
19:55
|
(7) Хм. ПолучитьФорму(...) только на клиенте работает. Да уж, вилы.
|
|||
9
GANR
12.02.13
✎
19:58
|
И метаданные, похоже, тоже не выход
|
|||
10
Rizhij_Nikitos
12.02.13
✎
20:00
|
Все было хорошо и даже получалось, пока совпадали имена реквизитов формы и пути к данным
|
|||
11
MSII
12.02.13
✎
20:00
|
Записать имена элементов, реквизитов и значения реквизитов в какую-то подходящую коллекцию и передать ее на сервер. В чем проблема? Или я неправильно понял задачу?
|
|||
12
Rizhij_Nikitos
12.02.13
✎
20:06
|
Имена всех элементов и я могу списать, реквизитов тоже. Как их сопоставить?
|
|||
13
MSII
12.02.13
✎
20:09
|
(12) На клиенте же ты их можешь сопоставить. У элемента читаешь свойство ПутьКДанным, пишешь в коллекцию - имя элемента, его путь к данным, значение реквизита. Все это пакуй и на сервер. Нет?
|
|||
14
Rizhij_Nikitos
12.02.13
✎
20:14
|
Нет. У элемента на форме нет пути к данным, потому что как не странно, у элемента на форме нет доступа к данным. Путь к данным возможен только на сервере.
|
|||
15
Rizhij_Nikitos
12.02.13
✎
20:27
|
Вверз
|
|||
16
V_V_V
12.02.13
✎
20:33
|
Элементы не спасут отца?
|
|||
17
Rizhij_Nikitos
12.02.13
✎
20:34
|
(16) предлагай
|
|||
18
V_V_V
12.02.13
✎
20:36
|
(14) Если тебе данные нужно возвращать на сервер - почему не перебрать все элементы еще ПриСозданииНаСервере?
|
|||
19
Rizhij_Nikitos
12.02.13
✎
20:44
|
(18) при создании на сервере чего? У меня внешний отчет. Я в нем получаю основную форму указанного документа или справочника.
|
|||
20
MSII
12.02.13
✎
20:48
|
(19) Тогда беда. Жди, когда подписки на события форм появятся. Все ждем и ты жди. Или модифицируй форму.
|
|||
21
Rizhij_Nikitos
12.02.13
✎
20:50
|
(20) все управляемые формы во всех конфах с управляемыми формами у всех клиентов?))))
|
|||
22
Rizhij_Nikitos
12.02.13
✎
20:51
|
(20) начну сейчас, чтобы завтра уже поехать по клиентам ставить новый "релиз"...
|
|||
23
MSII
12.02.13
✎
20:56
|
(22) Без паники. Предлагаю решение - обернуть присваивание в попытку, а в исключении сообщать - "Внимание! Имена реквизита формы и элемента формы различны! Немедленно внесите изменения в конфигурацию!" и на этом завершать построение отчета.
|
|||
24
Rizhij_Nikitos
12.02.13
✎
20:58
|
(23) почти это и делаю, только я придумал так - записывать имя элемента и давать пользователю сопоставить со всеми объектами это имя элемента, типа как "Для элемента ХХХ не определен источник данных, пожалуйста определите имя реквизита, который является источником данных для данного реквизита:"
И вываливается список всех объектов с возможностью выбора одного. А данные выбора засуну в отчет. |
|||
25
GANR
13.02.13
✎
03:15
|
(24)Пиши рационализаторское предложение разработчикам платформы на [email protected] с указанием конфы, платформы, рег. номера программного продукта и фирмы (без этого - пошлют).
|
|||
26
GANR
13.02.13
✎
03:17
|
+(25) И ты, (20), пиши и убеждай.
|
|||
27
НЕА123
13.02.13
✎
08:32
|
1. модуль формы
&НаКлиенте Процедура ТвояПроцедура() Для Каждого ЭЛ из Элементы Цикл ТвойПуть = ТвойСерверныйОбщийМодуль.ТвояФункция(ЭЛ); КонецЦикла КонецПроцедуры &НаСервере Функция ТвояФункция(Форма) Попытка ТвойПуть = Форма.Элементы.ТвойЭлемент.ПутьКДанным; Исключение ТвойПуть = ""; КонецПопытки Возврат ТвойПуть; КонецФункции |
|||
28
НЕА123
13.02.13
✎
08:33
|
1. модуль формы
&НаКлиенте Процедура ТвояПроцедура() Для Каждого ЭЛ из Форма.Элементы Цикл ТвойПуть = ТвойСерверныйОбщийМодуль.ТвояФункция(ЭЛ); КонецЦикла КонецПроцедуры &НаСервере Функция ТвояФункция() Попытка ТвойПуть = Форма.Элементы.ТвойЭлемент.ПутьКДанным; Исключение ТвойПуть = ""; КонецПопытки Возврат ТвойПуть; КонецФункции |
|||
29
НЕА123
13.02.13
✎
08:35
|
мля...
не мое 1. модуль формы &НаКлиенте Процедура ТвояПроцедура() Для Каждого ЭЛ из Форма.Элементы Цикл ТвойПуть = ТвояФункция(ЭЛ); КонецЦикла КонецПроцедуры &НаСервере Функция ТвояФункция(ЭЛ) Попытка ТвойПуть = ЭЛ.ПутьКДанным; Исключение ТвойПуть = ""; КонецПопытки Возврат ТвойПуть; КонецФункции |
|||
30
MSII
13.02.13
✎
08:55
|
(26) Да кто я такой. Им там, на Селезневской, виднее, что и как.
|
|||
31
Rizhij_Nikitos
13.02.13
✎
09:32
|
(29) Одна проблема, для типов данных элементов на форме нет типов данных на сервере:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ГруппаФормы' |
|||
32
Поросенок Петр
13.02.13
✎
09:34
|
Жесть. 31 пост решается совсем другая проблема.
|
|||
33
Rizhij_Nikitos
13.02.13
✎
09:45
|
(32) ты о чем?) В общем объясняю, что нужны отображения типов на сервере для того что бы передавать на сервер клиентские типы данных. Каждый раз определять что за тип и что то придумывать(а я честно даже не знаю, есть ли для этих типов отображения на сервере)...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |