Привет народ. Нужно для документа получить типы его реквизитов и вывести их в текстовый документ.
Как я хочу это делать.
Док = СтрДок.Ссылка.ПолучитьОбъект();
Для каждого Реквизит из Док.Метаданные().Реквизиты Цикл
т.е. Сделал выборку документов. Полчил нужный документ. Теперь для каждого его реквизита хочу сделать проверку условий типа :
Если Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда
Возврат "ДокументСсылка." + Тип.Имя;
И т.д. И теперь начинаются проблемы. в Методе СодержитТип() параметр должен быть типа Тип, тогда по логике туда надо передавать ТипЗнч(Реквизит). Но у него значение - Описание Типов и в итоге выдается всегда значение неопределено.
Если передавать Реквизит.Тип, то у него значение нормальное, такое как надо, но тип у него - Описание Типов в итоге тоже не подходит. Как быть ? %))
Как я хочу это делать.
Док = СтрДок.Ссылка.ПолучитьОбъект();
Для каждого Реквизит из Док.Метаданные().Реквизиты Цикл
т.е. Сделал выборку документов. Полчил нужный документ. Теперь для каждого его реквизита хочу сделать проверку условий типа :
Если Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда
Возврат "ДокументСсылка." + Тип.Имя;
И т.д. И теперь начинаются проблемы. в Методе СодержитТип() параметр должен быть типа Тип, тогда по логике туда надо передавать ТипЗнч(Реквизит). Но у него значение - Описание Типов и в итоге выдается всегда значение неопределено.
Если передавать Реквизит.Тип, то у него значение нормальное, такое как надо, но тип у него - Описание Типов в итоге тоже не подходит. Как быть ? %))
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) писал как-то для подобного случая такую функцию:
Объект - Это в вашем случае Реквизит
// возвращает подробное описание типа объекта
Функция ОпределитьТипОбъекта(Объект)
Строка = "" + Объект.Тип;
Если Строка = "Строка" Тогда
Строка = Строка + ", " + ?(Объект.Тип.КвалификаторыСтроки.Длина = 0, "Неограниченная", Объект.Тип.КвалификаторыСтроки.Длина);
ИначеЕсли Строка = "Число" Тогда
Строка = Строка + ", " + Объект.Тип.КвалификаторыЧисла.Разрядность + "." +
Объект.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти;
ИначеЕсли Не ЗначениеЗаполнено(Строка) Тогда
Строка = "";
КонецЕсли;
Возврат Строка;
КонецФункции
ПоказатьОбъект - Это в вашем случае Реквизит
Сделал так
ТипыСвойства = Источник.ТипЗначения.Типы();
МассивТиповСтроками = "";
Для Каждого ТипСвойства Из ТипыСвойства Цикл
Попытка
Значение = Новый(ТипСвойства);
Попытка
ТипСтрокой = Значение.Метаданные().ПолноеИмя();
Исключение
ТипСтрокой = "" + ТипЗНЧ(Значение);
КонецПопытки;
Исключение
ТипСтрокой = "" + ТипСвойства;
КонецПопытки;
ТипСтрокой = СтрЗаменить(ТипСтрокой, "Справочник.", "СправочникСсылка.");
ТипСтрокой = СтрЗаменить(ТипСтрокой, "Документ.", "ДокументСсылка.");
МассивТиповСтроками = МассивТиповСтроками + ТипСтрокой + ";";
КонецЦикла;
Значение = МассивТиповСтроками;
Показать
(4) Можно без попытки:
ТипыСвойства = Источник.ТипЗначения.Типы();
МассивТиповСтроками = Новый Массив;
Для Каждого ТипСвойства Из ТипыСвойства Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипСвойства);
Если ОбъектМетаданных = Неопределено Тогда
ТипСтрокой = Строка(ТипСвойства);
Иначе
ТипСтрокой = СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.");
КонецЕсли;
МассивТиповСтроками.Добавить(ТипСтрокой);
КонецЦикла;
Значение = СтрСоединить(МассивТиповСтроками, ";");
ПоказатьФункция ТипВСтроку(тОбъект)
ТипСтрокой = XMLТип(ТипЗнч(тОбъект)).ИмяТипа;
ТипСтрокой = СтрЗаменить(ТипСтрокой, "decimal", "Число");
ТипСтрокой = СтрЗаменить(ТипСтрокой, "string", "Строка");
ТипСтрокой = СтрЗаменить(ТипСтрокой, "CatalogRef", "СправочникСсылка");
ТипСтрокой = СтрЗаменить(ТипСтрокой, "DocumentRef", "ДокументСсылка");
Возврат ТипСтрокой;
КонецФункции
Показать&НаСервере
Функция СтроковоеПредставлениеТипа(ТипИлиОписаниеТипа)
Если ТипЗнч(ТипИлиОписаниеТипа) = Тип("Тип") Тогда
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипИлиОписаниеТипа);
Иначе
МассивТипов = ТипИлиОписаниеТипа.Типы();
КонецЕсли;
МассивТиповСтроками = Новый Массив;
Для Каждого выбТип Из МассивТипов Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(выбТип);
Если ОбъектМетаданных = Неопределено Тогда
ТипСтрокой = Строка(выбТип);
Иначе
ТипСтрокой = СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.");
КонецЕсли;
МассивТиповСтроками.Добавить(ТипСтрокой);
КонецЦикла;
Значение = СтрСоединить(МассивТиповСтроками, ";");
Возврат Значение;
КонецФункции
Показать
Для истории: БСП, модуль ОбщегоНазначения
// Возвращает полное имя объекта метаданных по переданному значению ссылки.
// Примеры:
// "Справочник.Номенклатура";
// "Документ.ПриходнаяНакладная".
//
// Параметры:
// Ссылка - ЛюбаяСсылка - объект, для которого необходимо получить имя таблицы ИБ.
//
// Возвращаемое значение:
// Строка - полное имя объекта метаданных для указанного объекта.
//
Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт
Показать// Возвращает строковое представление типа.
// Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта".
// Для остальных типов приводит тип к строке, например "Число".
//
// Возвращаемое значение:
// Строка.
//
Функция СтроковоеПредставлениеТипа(Тип) Экспорт
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот