|
Как узнать типы колонки таб.поля по имени колонки, и привести к ним поле ввода | ☑ | ||
---|---|---|---|---|
0
Антиквар
17.10.11
✎
14:56
|
Всем привет!
Во внешней обработке имеется табличная часть, в которой много колонок с разными типами. У некоторых колонок составной тип данных. На форме обработки имеем табличное поле, содержащее эту таб.часть, а также поле ввода. Требуется, по имени колонки определить тип/типы этой колонки, и привести к этому типу/типам поле ввода на форме обработки. Нужно вот для чего: из списка значений (который также на форме) мы выбираем требуемую колонку. В результате имеем имя колонки. После этого поле ввода на форме должно иметь тип, как у этой колонки табличного поля. Т.е. если выбрали "Номенклатура", то и в поле ввода выбираем номенклатуру из справочника. Если выбрали контрагента, то в поле ввода выбираем контрагента. Если составной тип, то и в поле ввода составной тип. |
|||
1
Антиквар
17.10.11
✎
15:41
|
up
|
|||
2
rchervak
17.10.11
✎
16:27
|
куча если...
если номенкатура тогда... и т.д. |
|||
3
mikecool
17.10.11
✎
16:31
|
нафига по имени колонки?
у поля ввода, содержащегося в колонке есть типы возможных значений как то можно вытянуть |
|||
4
Антиквар
17.10.11
✎
16:32
|
(2) Обидно, мне хотелось в одну строку сделать. Ведь имя колонки возвращается выбором пользователя. И хотелось бы по имени колонки узнать её тип и присвоить его полю ввода. Но не получается у меня так, возможно Вы правы, что только перебором :(
|
|||
5
mikecool
17.10.11
✎
16:32
|
по типу
Описание = Новый ОписаниеТипов("ДокументСсылка." + ТипДокументаВСистеме); ТекущиеДанные.СсылкаНаДокумент = Описание.ПривестиЗначение(ТекущиеДанные.СсылкаНаДокумент); осталось только получить ТипДокументаВСистеме |
|||
6
Антиквар
17.10.11
✎
16:33
|
(3) По имени колонки нужно потому, что в зависимости от выбранной пользователем колонки поле ввода должно иметь такой же тип.
|
|||
7
mikecool
17.10.11
✎
16:34
|
(6) у тебя у поля есть элемент управления, у этого элемента(если он есть конечно) есть фозможные типы данных
|
|||
8
Антиквар
17.10.11
✎
16:43
|
(7) Да, есть конечно. Поле ввода - это реквизит формы, я ему присвоил все возможные в моем случае типы данных.
На форме также расположен список выбора, в котором перечислены все колонки табличного поля. Пользователь таким образом выбирает, с какой колонкой табличного поля он будет работать. И в зависимоти от выбора в этом поле выбора (его значение возвращает как раз имя колонки) мне нужно, чтобы тип данных в поле ввода был именно такой, какой в выбранной колонке. Поэтому мне бы хотелось по имени колонки узнать её тип, чтобы привести к нему поле ввода. Ваш метод честно говоря не могу понять, т.е. как мне узнать то что в скобках: ("ДокументСсылка." + ТипДокументаВСистеме) Из типов у меня будут различные справочники, числа и строки. |
|||
9
Defender aka LINN
17.10.11
✎
16:46
|
(0) ОграничениеТипа
|
|||
10
Антиквар
17.10.11
✎
16:53
|
(9) Проблема не в том, как привести поле ввода к нужному типу, или сделать ОграничениеТипа, а в том, как узнать, к какому типу приводить :) Нужен тип точно такой как в колонке табличного поля. Я знаю имя этой колонки.
|
|||
11
Антиквар
18.10.11
✎
09:31
|
up
|
|||
12
Defender aka LINN
18.10.11
✎
09:33
|
(10) Ну, надо себя как-то заставить.
|
|||
13
Сергей Д
18.10.11
✎
09:40
|
С планом видов характеристик делал вот такое:
Процедура ПривестиТипЗначенияДляХарактеристики(СтрокаХарактеристик) Экспорт Если СтрокаХарактеристик.ЭтоНастройка И ЗначениеЗаполнено(СтрокаХарактеристик.Характеристика) Тогда СтрокаХарактеристик.НовоеЗначение=СтрокаХарактеристик.Характеристика.ТипЗначения.ПривестиЗначение(СтрокаХарактеристик.НовоеЗначение); КонецЕсли; КонецПроцедуры |
|||
14
Reset
18.10.11
✎
09:53
|
(10) Справку прочитать не предлагать?
ТЗ.Колонки[Имя].ТипЗначения |
|||
15
catena
18.10.11
✎
09:54
|
ЭлементыФормы.ПолеВвода.ОграничениеТипа = ТабличноеПоле.Колонки[СокрЛП(ИмяКолонки)].ТипЗначения;
|
|||
16
Reset
18.10.11
✎
09:54
|
Вместо up..up... up сто раз бы уже прочитал и сделал
|
|||
17
Reset
18.10.11
✎
09:59
|
(15) у колонки табличного поля нет типа значения
|
|||
18
Антиквар
18.10.11
✎
10:04
|
(14) так не прокатит, попробуй сам
Узнать тип колонки по её имени получилось вот так: ЭлементыФормы.ТабличноеПоле.Колонки[Имяколонки].ЭлементУправления.ТипЗначения Не долшло до меня, что через элемент управления нужно. |
|||
19
Reset
18.10.11
✎
10:05
|
(18) Можно, я не буду пробовать, ок?
|
|||
20
catena
18.10.11
✎
10:06
|
(17)У меня почему-то есть :)
|
|||
21
Reset
18.10.11
✎
10:10
|
(20) Нет, у вас тоже нет. Вы путаете ТП и другой тип, в котором у вас есть.
|
|||
22
Сергей Д
18.10.11
✎
10:11
|
(17) Колонка табличного поля связана с реквизитом ТЧ, у которого точно есть тип.
|
|||
23
Антиквар
18.10.11
✎
10:11
|
(19) конечно можно :) Но я серьезно говорю. У меня не ТЗ, а табличная часть, расположенная в табличном поле. У табличной части как таковой вообще нет свойства колонки.
Т.е. ТЗ.Колонки - это уже ошибка Оно есть только через ЭлементыФормы.ТабличоеПоле Вобщем у меня получилось как я написал выше, через элемент управления. Спасибо всем кто помогал! |
|||
24
Reset
18.10.11
✎
10:11
|
(22) я про это и говорю
|
|||
25
mikecool
18.10.11
✎
10:13
|
(23) ура
|
|||
26
Антиквар
18.10.11
✎
10:16
|
(25) про элемент управления Вы мне пытались сказать, но я это относил к полю ввода, а не к колонке табличного поля :) Но в итоге в мозгу что-то стукнуло и проверил :)
|
|||
27
Антиквар
18.10.11
✎
11:29
|
К сожалению, в случае типа Булево
ЭлементыФормы.ТабличноеПоле.Колонки[Имяколонки].ЭлементУправления.ТипЗначения возвращает строку :( Поэтому сделал так: ПолеВвода = Неопределено; Если НЕ (ТипЗнч(ЭлементыФормы.ТабличноеПоле.Колонки[ИмяКолонки].ЭлементУправления.Значение) = Тип("Булево")) Тогда ЭлементыФормы.ПолеВвода.ОграничениеТипа = ЭлементыФормы.ТабличноеПоле.Колонки[ИмяКолонки].ЭлементУправления.ТипЗначения; КонецЕсли; ПолеВвода = ЭлементыФормы.ТабличноеПоле.Колонки[ИмяКолонки].ЭлементУправления.Значение; Вдруг кому пригодится |
|||
28
Reset
18.10.11
✎
13:05
|
(27)
[_имхо_] Вариант получения типа объекта через его представление на форме (то или иное) является кривым (через@опным) (не перестает быть таковым, даже если работает) Правильно для твоего случая: Ссылка.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты[ИмяКолонки].Тип Ссылка-это ссылка на объект, из которого у тебя табличная часть. Или так: Метаданные.Документы[ИмяДокумента].ТабличныеЧасти.... |
|||
29
Антиквар
19.10.11
✎
16:35
|
(28) У меня внешняя обработка, и в ней табличная часть. Так что никаких метаданных.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |