Имя: Пароль:
1C
1С v8
Определение вида регистра
,
0 rodrigez
 
21.05.13
12:19
Здравствуйте! Подскажите пожалуйста, как можно, ниже поданую процедуру, сделать красивше оптимальнее лучше? Спасибо.

&НаСервереБезКонтекста
Функция ОпеределитьВидРегистра (ИмяРегистра)
   
   Для Каждого ВидРегистрНакопления Из Метаданные.РегистрыНакопления Цикл
       Если ВидРегистрНакопления.Имя = ИмяРегистра Тогда
           ПолноеИмяРегистра = "РегистрыНакопления."+ИмяРегистра;
           Возврат ПолноеИмяРегистра;
       КонецЕсли;
   КонецЦикла;  
   
   Если ПолноеИмяРегистра = Неопределено Тогда
       
       Для Каждого ВидРегистрСведений Из Метаданные.РегистрыСведений Цикл
           
           Если  ВидРегистрСведений.Имя = ИмяРегистра Тогда
               ВидРегистра = ВидРегистрСведений.Имя;
               ПолноеИмяРегистра = "РегистрыСведений."+ВидРегистра;
               Возврат ПолноеИмяРегистра;    
           КонецЕсли;
       КонецЦикла;        
       
   ИначеЕсли  ПолноеИмяРегистра = Неопределено Тогда
       
       Для Каждого ВидРегистрБухгалтерии Из Метаданные.РегистрыБухгалтерии Цикл
           Если ВидРегистрБухгалтерии.Имя = ИмяРегистра Тогда
               ВидРегистра = ВидРегистрБухгалтерии.Имя;
               ПолноеИмяРегистра = "РегистрыБухгалтерии."+ВидРегистра;
               Возврат ПолноеИмяРегистра;
           КонецЕсли;
       КонецЦикла;
   Иначе
       
       Для Каждого ВидРегистрРасчета Из Метаданные.РегистрыРасчета Цикл
           Если ВидРегистрРасчета.Имя = ИмяРегистра Тогда
               ВидРегистра = ВидРегистрРасчета.Имя;
               ПолноеИмяРегистра = "РегистрыРасчета."+ВидРегистра;  
               Возврат ПолноеИмяРегистра;      
           КонецЕсли;            
       КонецЦикла;    
   КонецЕсли;
КонецФункции
1 Ёпрст
 
21.05.13
12:28
(0) А ничего, что может быть запросто так  в конфе ?

РегистрыСведений.Вася
РегистрыБухгалтерии.Вася
РегистрыНакопления.Вася

Если че, Имя регистра не уникально в пределах разных объектов метаданных.
2 Ёпрст
 
21.05.13
12:29
И у тя функция вернёт первый попавшийся вариант, что не верно.
3 Ёпрст
 
21.05.13
12:30
+ заместо перебора, лучше

Метаданные.РегистрыНакопления.Найти(ИмяРегистра);
4 MaxisUssr
 
21.05.13
12:31
(0)
Функция неверная - нужно не имя объекта метаданных туда передавать, а сам объект метаданных.
5 zladenuw
 
21.05.13
12:33
можно не только объект

ОбъектОписания = Метаданные.НайтиПоТипу(ТипЗнч(ВыборкаНоменклатуры));
Если ОбъектОписания <> Неопределено Тогда
   ИмяСправочника = ОбъектОписания.Имя; // Номенклатура
КонецЕсли;
6 Ёпрст
 
21.05.13
12:34
(4) зачет, ага..
и зачем ?
Чтоб найти метаданные в метаданных ?
:))
7 zak555
 
21.05.13
12:34
(1) нельзя так сделать
8 ll13
 
21.05.13
12:48
(7) Кто запретил ?
9 Ёпрст
 
21.05.13
12:50
(7) Это где написано ?
10 Fragster
 
гуру
21.05.13
12:50
надо не с именем а с метаданными работать
11 zak555
 
21.05.13
13:00
(7) конфигуратор

(9) опытным путём ещё ранее выяснил
12 rodrigez
 
21.05.13
18:35
Вроде учел все замечания

&НаСервереБезКонтекста
Функция ОпеределитьВидРегистра (ОбъектМетаданныхРегистр)
   СтруктураВидовРегистров = Новый Структура;
   
   Если   Метаданные.РегистрыНакопления.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыНакопления");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
   КонецЕсли;
   
   Если   Метаданные.РегистрыСведений.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыСведений");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
   КонецЕсли;
   Если   Метаданные.РегистрыБухгалтерии.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыБухгалтерии");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
   КонецЕсли;
   Если   Метаданные.РегистрыРасчета.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыРасчета");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
   КонецЕсли;
   
   Возврат СтруктураВидовРегистров;
КонецФункции
13 zak555
 
21.05.13
19:48
(12) наверное лучше так :

&НаСервереБезКонтекста
Функция ОпеределитьВидРегистра (ОбъектМетаданныхРегистр)
   СтруктураВидовРегистров = Новый Структура;
   
   Если Метаданные.РегистрыНакопления.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыНакопления");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
       
   ИначеЕсли Метаданные.РегистрыСведений.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыСведений");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
       
   ИначеЕсли Метаданные.РегистрыБухгалтерии.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыБухгалтерии");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
       
   ИначеЕсли Метаданные.РегистрыРасчета.Найти(ОбъектМетаданныхРегистр.Имя)<> Неопределено Тогда
       СтруктураВидовРегистров.Вставить("ВидРегистра","РегистрыРасчета");
       СтруктураВидовРегистров.Вставить("НазваниеРегистра", ОбъектМетаданныхРегистр.Имя);
   КонецЕсли;
   
   Возврат СтруктураВидовРегистров;
КонецФункции
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший