Имя: Пароль:
1C
 
Список атрибутов реквизитов справочников
,
0 beaver1971
 
21.05.15
05:50
Необходимо сформировать таблицу атрибутов реквизитов всех справочников конфигурации. Для 7.7 отработал вот такой код (приведен только цикл работы со справочниками, без остального кода).
Для Спр=1 по Метаданные.Справочник() Цикл
    Сообщить(Метаданные.Справочник(Спр).Идентификатор);
    Для Рек=1 по Метаданные.Справочник(Спр).Реквизит() Цикл
        Если Рек = 1 Тогда
            Текущий = Метаданные.Справочник(Спр).Идентификатор;
        Иначе
            Текущий = "";
        КонецЕсли;
        Реквизит = Метаданные.Справочник(Спр).Реквизит(Рек).Идентификатор;
        Тип = Метаданные.Справочник(Спр).Реквизит(Рек).Тип;
        Вид = Метаданные.Справочник(Спр).Реквизит(Рек).Вид;
        Синоним = Метаданные.Справочник(Спр).Реквизит(Рек).Синоним;
        Коммент = Метаданные.Справочник(Спр).Реквизит(Рек).Комментарий;
        Если Метаданные.Справочник(Спр).Реквизит(Рек).Периодический = 1 Тогда
            Период = "Период";
        Иначе
            Период = "";
        КонецЕсли;
        Табл.ВывестиСекцию("Справочник");
    КонецЦикла;
КонецЦикла;
Нужен такой же результат для 8.2.....
Для каждого Справ из Метаданные.Справочники Цикл
    Сообщить(Справ.Имя);
    Для каждого Реквиз из Справ.Реквизиты Цикл
        Реквизит = Реквиз.Имя;
        Для каждого Тип из Реквиз.Тип.Типы() Цикл
            Реквизит = Реквизит + " -> " + Тип;
        КонецЦикла;
        Сообщить("    " + Реквизит);
    КонецЦикла;
КонецЦикла;
Непонятки с типами. Тип() отрабатывает для строк, чисел, но спотыкается на справочниках. ТипЗнч() выдает для всех одинаковое значение....
1 lxndr
 
21.05.15
05:54
може "Отчет по конфигурации" не?
2 Рэйв
 
21.05.15
05:58
(0)Что т я у тебя там вообще не вижу Тип().
Все нормально работать должно.Непонятно чего тебе непонятно
3 beaver1971
 
21.05.15
06:35
Вот пример вывода для одного из справочников
БанковскиеСчета
    НомерСчета -> Строка
    Банк -> Банк
    ТекстНазначения -> Строка
    ВидСчета -> Строка
    ВалютаДенежныхСредств -> Валюта
    НомерИДатаРазрешения -> Строка
    ДатаОткрытия -> Дата
    МесяцПрописью -> Булево

Мне нужно вместо "Банк" и "Валюта" в выводе "Справочник". Для Перечислений та же песТня получается. Выводится название Перечисления, но не название Типа ((((((
4 Рэйв
 
21.05.15
06:43
Попробуй так
Метаданные.НайтиПоТипу(Тип).ПолноеИмя()
5 beaver1971
 
21.05.15
07:05
Для каждого Справ из Метаданные.Справочники Цикл
        Сообщить(Справ.Имя);
        Для каждого Реквиз из Справ.Реквизиты Цикл
            Реквизит = Реквиз.Имя;
            Для каждого ТипР из Реквиз.Тип.Типы() цикл
                РекТип = Метаданные.НайтиПоТипу(ТипР).ПолноеИмя();
                Реквизит = Реквизит + " -> " + РекТип;
            КонецЦикла;
            Сообщить("    " + Реквизит);
        КонецЦикла;
    КонецЦикла;

Ошибка ((((((((
    {Форма.Форма.Форма(9)}: Значение не является значением объектного типа (ПолноеИмя)
                РекТип = Метаданные.НайтиПоТипу(ТипР).ПолноеИмя();
6 Рэйв
 
21.05.15
07:07
ты простые то типы отслеживай:-)
Представляешь что оно тебе найдет в метаданных на Тип("Строка")
:-)
7 Рэйв
 
21.05.15
07:09
Если ТипР=Тип("Строка") ИЛИ
     ТипР=Тип("Число")  ИЛИ
     ТипР=Тип("Дата")   ИЛИ
     ТипР=Тип("Булево") Тогда
    
     Сообщить("Тип:"+ТипР)
Иначе
     Срообщить("Тип:" +Метаданные.НайтиПоТипу(ТипР).ПолноеИмя();)

КонецЕсли;
8 beaver1971
 
21.05.15
07:54
Смешно, но почему так, не пойму:
                Если ТипР = Тип("Строка") или
                     ТипР = Тип("Число") или
                     ТипР = Тип("Дата") или
                     ТипР = Тип("УникальныйИдентификатор") или
                     ТипР = Тип("ХранилищеЗначения") или
                     ТипР = Тип("Булево") Тогда
                    РекТип = ТипР;
                Иначе
                    РекТип = Метаданные.НайтиПоТипу(ТипР).ПолноеИмя();
                КонецЕсли;

Вот в таком виде отработало всё почти как надо
9 beaver1971
 
21.05.15
12:48
Туплю ((((((

        РекТип = Метаданные.НайтиПоТипу(ТипР).ПолноеИмя();
        // получили Справочник.Банки
        Область.Параметры.Тип = // сюда нужно Справочник
        Область.Параметры.Вид = // сюда нужно Банки

Не могу догнать - как? Или только вот так?

        Позиция = Найти(РекТип, ".");
        Область.Параметры.Тип = Лев(РекТип, Позиция - 1);
        Область.Параметры.Вид = Сред(РекТип, Позиция + 1);
Программист всегда исправляет последнюю ошибку.