Имя: Пароль:
1C
1С v8
Как узнать типы колонки таб.поля по имени колонки, и привести к ним поле ввода
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) У меня внешняя обработка, и в ней табличная часть. Так что никаких метаданных.
AdBlock убивает бесплатный контент. 1Сергей