Задача:
Есть реквизит. Известно значение Описаниетипов. Нужно получить путь к данным. (задача из СКД - отборы).
Пример:
ДоступноеПоле ДоступноеПолеКомпоновкиДанных ДоступноеПолеКомпоновкиДанных
Поле НоменклатурнаяГруппа (ПолеКомпоновкиДанных)
Тип Номенклатурная группа (ОписаниеТипов)
Смотрите прикрепленный файл.
Ответ: Справочники.НоменклатурныеГруппы
Предлагается такой текст:
Собственно с этого момента можно без СКД - решать задачу от Значения к Пути
_________________________________________________
Код получился корявым. Есть идеи как его улучшить?
Есть реквизит. Известно значение Описаниетипов. Нужно получить путь к данным. (задача из СКД - отборы).
Пример:
ДоступноеПоле ДоступноеПолеКомпоновкиДанных ДоступноеПолеКомпоновкиДанных
Поле НоменклатурнаяГруппа (ПолеКомпоновкиДанных)
Тип Номенклатурная группа (ОписаниеТипов)
Смотрите прикрепленный файл.
Ответ: Справочники.НоменклатурныеГруппы
Предлагается такой текст:
Значение = ДоступноеПоле.Тип.ПривестиЗначение()
Собственно с этого момента можно без СКД - решать задачу от Значения к Пути
Путь=Метаданные.НайтиПоТипу(ТипЗнч(Значение)).ПолноеИмя();
Если Лев(Путь,3)="Спр" Тогда
ПутьКДанным = СтрЗаменить(Путь,"Справочник","Справочники");
ИначеЕсли Лев(Путь,3)="Док" Тогда
ПутьКДанным = СтрЗаменить(Путь,"Документ","Документы");
ИначеЕсли Лев(Путь,3)="Пер" Тогда
ПутьКДанным = СтрЗаменить(Путь,".","я.");
ИначеЕсли Лев(Путь,3)="Пла" Тогда
ПутьКДанным = СтрЗаменить(Путь,"ПланСчетов","ПланыСчетов");
Иначе
ПутьКДанным="";
Сообщить("Неизвестный тип данных");
КонецЕсли;
Показать_________________________________________________
Код получился корявым. Есть идеи как его улучшить?
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) То, что вы называете "путь к данным" таковым не является - это скорее идентификатор, имеющий значение только при написании кода во встроенном языке для обращения к менеджеру прикладного объекта. Если нужен именно строковый результат: Если всё же нужен менеджер, то проще так:
Функция ПолучитьПутьКДанным(ОписаниеТипа)
Типы = ОписаниеТипа.Типы();
Если Типы.Количество() = 0 Тогда
Возврат ""
КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоТипу(Типы[0]);
Если ОбъектМетаданных = Неопределено Тогда
Возврат ""
КонецЕсли;
ПолноеИмяМетаданных = ОбъектМетаданных.ПолноеИмя();
ЧастиИмени = СтрРазделить(ПолноеИмяМетаданных, ".");
Соответствие = Новый Соответствие;
Соответствие.Вставить("Справочник", "Справочники");
Соответствие.Вставить("Документ", "Документы");
Соответствие.Вставить("Перечисление", "Перечисления");
Соответствие.Вставить("ПланВидовХарактеристик", "ПланыВидовХарактеристик");
Соответствие.Вставить("ПланВидовРасчета", "ПланыВидовРасчета");
Соответствие.Вставить("ПланСчетов", "ПланыСчетов");
Соответствие.Вставить("Задача", "Задачи");
Соответствие.Вставить("БизнесПроцесс", "БизнесПроцессы");
ЧастиИмени[0] = Соответствие[ЧастиИмени[0]];
Возврат СтрСоединить(ЧастиИмени, ".");
КонецФункции
ПоказатьМенеджер = Новый(СтрЗаменить(ПолноеИмяМетаданных, ".", "Менеджер."))
То, что вы называете "путь к данным" таковым не является - это скорее идентификатор
В синтаксисе языка называется "ПутьКДанным". И нужен строковый результат. Ваш вариант красивей, но я надеялся избавиться от перевода - Справочник в Справочники, используя команды языка, но не перебором объектов.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот