|
Создание Описания типов из метаданных реквизита документа | ☑ | ||
---|---|---|---|---|
0
Родом из детства
21.07.21
✎
14:11
|
Снова здравствуйте.
Сейчас работаю со следующим механизмом: Обработка, которая меняет значения реквизитов документа. Список реквизитов для изменения может меняться. Для изменения реквизитов сделал ТЗ "ТЗ_ИзменениеРеквизитов". Она будет состоять из следующих колонок: ИмяРеквизита(скрыто пользователю, для обращения по нему к реквизиту документа), СинонимИмениРеквизита(Выводится для пользователя), Значение(Значение для изменения). Однако, мы не знаем, какой тип будет у колонки "Значение"(он, естественно, будет составным). Изменять тип колонки нельзя. Можно только создавать новую, поэтому её будем создавать программно. Итак, сначала заполняем массив имен реквизитов для изменения: РеквизитыДляИзменения = новый Массив; РеквизитыДляИзменения.Добавить("Контрагент"); РеквизитыДляИзменения.Добавить("Организация"); РеквизитыДляИзменения.Добавить("ДоговорКонтрагента"); РеквизитыДляИзменения.Добавить("ЛогистическаяНаценка"); РеквизитыДляИзменения.Добавить("СкидкаПокупателя"); Далее, создаем массив ОписанияТипов и переменную с метаданными нашего документа: ЗаказПокупателяРеквизиты = Метаданные.Документы.ЗаказПокупателя.Реквизиты; ЗначениеМассивТипов = новый Массив; Затем перебираем все элементы массива реквизитов для изменения, заполняя ими массив типов для колонки "Значения": Для каждого ИмяРеквизитаДляИзменения из РеквизитыДляИзменения цикл новаяСтрокаТЗ_ИзменениеРеквизитов = ТЗ_ИзменениеРеквизитов.Добавить(); новаяСтрокаТЗ_ИзменениеРеквизитов.ИмяРеквизита = ИмяРеквизитаДляИзменения; новаяСтрокаТЗ_ИзменениеРеквизитов.СинонимРеквизита = ЗаказПокупателяРеквизиты[ИмяРеквизитаДляИзменения].Синоним; ЗначениеМассивТипов.Добавить(ЗаказПокупателяРеквизиты[ИмяРеквизитаДляИзменения].Тип); КонецЦикла; ...и создаем эту колонку Если ЗначениеЗаполнено(ТЗ_ИзменениеРеквизитов.Колонки.Найти("Значение")) тогда ТЗ_ИзменениеРеквизитов.Колонки.Удалить("Значение"); ЭлементыФормы.ТЗ_ИзменениеРеквизитов.Колонки.Удалить("Значение"); КонецЕсли; ТЗ_ИзменениеРеквизитов.Колонки.Добавить("Значение", новый ОписаниеТипов(ЗначениеМассивТипов)); Добавляем её также в табличное поле, настраиваем её ЭлементыФормы.ТЗ_ИзменениеРеквизитов.Колонки.Добавить("Значение"); КолонкаЗначение = ЭлементыФормы.ТЗ_ИзменениеРеквизитов.Колонки.Значение; КолонкаЗначение.Данные = "Значение"; КолонкаЗначение.ЭлементУправления.КнопкаВыбора = Истина; Всё, вроде, нурм. Только есть одна проблема - Описание типов. Оно пустое. Скорее всего это из-за того, что Метаданные.Документы.ЗаказПокупателя.Реквизиты.Контрагент.Тип - возвращает описание типов "Контрагент", а нам нужно что-то типо "СправочникСсылка.Контрагенты". Может, у кого-нибудь есть варианты получения составного типа из метаданных реквизитов документа? |
|||
1
Жан Пердежон
21.07.21
✎
14:15
|
во-первых, обработок таких как грязи
во-вторых, в СП про конструктор ОписанияТипов() даже примеры есть |
|||
2
Родом из детства
21.07.21
✎
14:19
|
(1) Примеры, по типу:
СписокТипов = Новый Массив; СписокТипов.Добавить("Строка"); СписокТипов.Добавить("Структура"); СписокТипов.Добавить("СправочникСсылка.Контрагенты"); ОписаниеСоставногоТипа = Новый ОписаниеТипов(СписокТипов); Или тоже самое, только добавляют не строки, а Тип("СправочникСсылка.Контрагенты") Вопрос же про то, как массив реквизитов из метаданных преобразовать в описание типов составного типа данных. Такого в СП нет |
|||
3
RomanYS
21.07.21
✎
14:23
|
(2) пример правильный, а у тебя в массиве не типы, а описания
В (0) замени ЗначениеМассивТипов.Добавить(ЗаказПокупателяРеквизиты[ИмяРеквизитаДляИзменения].Тип); на Для Каждого _Тип ИЗ ЗаказПокупателяРеквизиты[ИмяРеквизитаДляИзменения].Тип.Типы() Цикл ЗначениеМассивТипов.Добавить(_Тип ); КонецЦикла; |
|||
4
Родом из детства
21.07.21
✎
14:26
|
(3) Да я согласен, что пример правильный:)
Спасибо, получилось |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |