Имя: Пароль:
1C
1С v8
Как получить менеджер из строки - типа значения
,
0 PiotrLoginov
 
31.10.13
18:32
Здравствуйте всем. Есть переменная. Тип - Строка. Значение - Тип строкой. Пример значения этой переменной: "СправочникСсылка.Номенклатура" .

Требуется с помощью этой переменной получить менеджер объекта конфигурации для использования его метода ПолучитьСсылку(<УникальныйИдентификатор>) . То есть если значение переменной "СправочникСсылка.Номенклатура", должно получить Справочники.Номенклатура

Если значение переменной "ДокументСсылка.ВводОстатков", должно получить Документы.ВводОстатков

Чувствую, есть какой-то простой способ без привлечения функций работы со значениями типа Строка. Никто не подскажет? Заранее спасибо.
1 Управляемые Формы
 
31.10.13
18:34
(0) Подвела тебя чуйка. Только через СтрЗаменить
2 PiotrLoginov
 
31.10.13
18:41
блин.  ну не беда.  спасибо, добрый человек
3 Fragster
 
модератор
31.10.13
18:41
я бы автору рекомендовал почитать про сериализацию XML и назначение типа. а то чувствую типа обмен такой мутит странный
4 PiotrLoginov
 
31.10.13
19:23
костыли мутю. в таких случаях часто встречается странное и неестественное
5 smaharbA
 
31.10.13
19:32
Вычислить("Новый СправочникСсылка.Номенклатура").Метаданные().ПолноеИмя()
6 smaharbA
 
31.10.13
19:32
Об=Новый("СправочникСсылка.Номенклатура");
Сообщить(Об.Метаданные().ПолноеИмя());
7 smaharbA
 
31.10.13
19:33
(3) абсолютно пох на сериализацию
8 smaharbA
 
31.10.13
19:35
думается автору поможет строка, если вкурит

Новый(Тип("СправочникСсылка.Номенклатура"))
9 Fragster
 
модератор
31.10.13
19:49
(7) а теперь в вариантах (5)(6)(8) - получи именно с нужным УИДом ссылку. Добавляется еще немного строк :)

если уж делать все - то делать все можно прямее. Хотя ты, конечно, любитель /оригинальных/ решений, да
10 Fragster
 
модератор
31.10.13
19:51
просто прямее можно начать делать несколько раньше, тогда не надо будет искать /оригинальных/ и /остроумных/ решений, хотя порой и некоторые полезности при этом пути открываются.
11 mrDSide
 
31.10.13
19:53
// Проверяет есть ли реквизит в метаданных документа
//     Параметры:
//        МД - метаданные документа;
//        ИмяРеквизита - имя реквизита;
//
Функция ЕстьРеквизитДокумента(МД, ИмяРеквизита) Экспорт
    
    Возврат НЕ МД.Реквизиты.Найти(ИмяРеквизита)=Неопределено
    
КонецФункции

// Проверяет является ли объект метаданных регистром накопления
//    Параметры:
//        ОбъектМД - объект метаданных;
//
Функция ЭтоРегистрНакопления(ОбъектМД) Экспорт
    
    ПолноеИмя = ОбъектМД.ПолноеИмя();
    Если Найти(ПолноеИмя, "РегистрНакопления") Тогда
        Возврат Истина
    КонецЕсли;
    
    Возврат Ложь
    
КонецФункции

// Проверяет является ли объект метаданных регистром сведений
//    Параметры:
//        ОбъектМД - объект метаданных;
//
Функция ЭтоРегистрСведений(ОбъектМД) Экспорт
    
    ПолноеИмя = ОбъектМД.ПолноеИмя();
    Если Найти(ПолноеИмя, "РегистрСведений") Тогда
        Возврат Истина
    КонецЕсли;
    
    Возврат Ложь
    
КонецФункции

// Проверяет является ли объект метаданных регистром сведений
//    Параметры:
//        ОбъектМД - объект метаданных;
//
Функция ЭтоРегистрРасчета(ОбъектМД) Экспорт
    
    ПолноеИмя = ОбъектМД.ПолноеИмя();
    Если Найти(ПолноеИмя, "РегистрРасчета") Тогда
        Возврат Истина
    КонецЕсли;
    
    Возврат Ложь
    
КонецФункции

// Проверяет является ли объект метаданных регистром сведений
//    Параметры:
//        ОбъектМД - объект метаданных;
//
Функция ЭтоРегистрБухгалтерии(ОбъектМД) Экспорт
    
    ПолноеИмя = ОбъектМД.ПолноеИмя();
    Если Найти(ПолноеИмя, "РегистрБухгалтерии") Тогда
        Возврат Истина
    КонецЕсли;
    
    Возврат Ложь
    
КонецФункции

// Получаем нужные данные из метаданных регистра
//    Параметры:
//        Объект - объект метаданных;
//        ЧтоВернуть    - 1-измерения, 2-ресурсы, 3-реквизиты;
//
Функция ПолучитьИзМетаданныхРегистра(Объект, ЧтоВернуть=Неопределено) Экспорт
    
    Массив = Новый Массив;
    
    Если ЧтоВернуть=Неопределено ИЛИ ЧтоВернуть=1 Тогда
        Для каждого эл Из Объект.Измерения Цикл
            Массив.Добавить(Новый Структура("Имя, Тип", эл.Имя, эл.Тип))
        КонецЦикла;
    КонецЕсли;
    
    Если ЧтоВернуть=Неопределено ИЛИ ЧтоВернуть=2 Тогда
        Для каждого эл Из Объект.Ресурсы Цикл
            Массив.Добавить(Новый Структура("Имя, Тип", эл.Имя, эл.Тип))
        КонецЦикла;
    КонецЕсли;
    
    Если ЧтоВернуть=Неопределено ИЛИ ЧтоВернуть=3 Тогда
        Для каждого эл Из Объект.Реквизиты Цикл
            Массив.Добавить(Новый Структура("Имя, Тип", эл.Имя, эл.Тип))
        КонецЦикла;
    КонецЕсли;
    
    Возврат Массив
    
КонецФункции // ПолучитьИзМетаданныхРегистра

// Возвращает ссылку на менеджер регистра по переданному объекту метаданных
//    Параметры:
//        Объект - объект метаданных;
//
Функция ВернутьОбъектДоступаКДаннымРегистр(Объект) Экспорт
    
    ИмяРегистра = РазложитьИмяРегистра(Объект).Имя;
    
    Если ЭтоРегистрБухгалтерии(Объект) Тогда
        Возврат РегистрыБухгалтерии[ИмяРегистра]
    ИначеЕсли ЭтоРегистрНакопления(Объект) Тогда
        Возврат РегистрыНакопления[ИмяРегистра]
    ИначеЕсли ЭтоРегистрРасчета(Объект) Тогда
        Возврат РегистрыРасчета[ИмяРегистра]
    ИначеЕсли ЭтоРегистрСведений(Объект) Тогда
        Возврат РегистрыСведений[ИмяРегистра]
    КонецЕсли
    
КонецФункции // ВернутьОбъектДоступаКДаннымРегистр

// Возвращает структуру с именем вида, именем регистра
//    Параметры:
//        Объект - объект метаданных;
//
Функция РазложитьИмяРегистра(Объект) Экспорт
    
    ПолноеИмя = Объект.ПолноеИмя();
    Тчк = Найти(ПолноеИмя, ".");
    ИмяВида = Лев(ПолноеИмя, Тчк-1);
    ИмяРегистра = Прав(ПолноеИмя, СтрДлина(ПолноеИмя)-Тчк);
    
    Возврат Новый Структура("Вид, Имя", ИмяВида, ИмяРегистра)
    
КонецФункции
12 mrDSide
 
31.10.13
19:54
Это работает у меня на УФ. С документами, справочниками - доработать (дописать).
13 smaharbA
 
31.10.13
20:07
(9) см (8) внимательно
14 smaharbA
 
31.10.13
20:10
лучше скажи(те)

когда указываешь

ТабличноеПолеКакоеТо.АвтоКонтекстноеМеню=Истина;
ТабличноеПолеКакоеТо.КонтекстноеМеню=КакаяТоСкрытаяКоманднаяПанель;


пункты в меню добавляются - это багофича или это фича ?
15 smaharbA
 
31.10.13
20:11
восьмерку осваиваю только
16 Fragster
 
модератор
31.10.13
20:11
(15) фича
17 smaharbA
 
31.10.13
20:12
(16) спасибо !
значит можно смело применять ?