Как по объекту метаданных найти справочник

метаданные — документ или справочник

Я
   Stim213

26.05.11 — 15:55

имеется ссылка на док или спр. как из ссылки получить «документ» или «справочник»?

   Evgenchik

1 — 26.05.11 — 15:55

ТипЗнч(<Значение>) не предлагать?

   Stim213

2 — 26.05.11 — 15:57

(1) не предлагать. мне нужна на выходе строка «документ» или «справочник». и только

   Dmitrii

3 — 26.05.11 — 15:58

Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(МояСсылка)) Тогда

    Сообщить(«Ура! Это ссылка на документ!»);

ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(МояСсылка)) Тогда

    Сообщить(«Ура! Это ссылка на элемент справочника!»);

Иначе

    Сообщить(«Хрень какая-то»);

КонецЕсли;

   H A D G E H O G s

4 — 26.05.11 — 15:59

(3) Медленнно.

   zbv

5 — 26.05.11 — 15:59

Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ссылка)) Тогда

Сообщить(«Справочник»);

иначеЕсли …

   Dmitrii

6 — 26.05.11 — 15:59

(2) извиняюсь — (3) не подходит.

   truba

7 — 26.05.11 — 15:59

через Ссылка.Метаданные().ПолноеИмя()   ;)

   Dmitrii

8 — 26.05.11 — 16:00

(4) Через Метаданные быстрее будет?

   H A D G E H O G s

9 — 26.05.11 — 16:01

Строка(ТипЗнч(Ссылка))

Учесть многоязыковость.

Ну или:

ЭтоСправочник=Ложь;

ЭтоДокумент=Ложь;

Попытка

Значение=Ссылка.Метаданные().ДлинаНаименования;

ЭтоСправочник=Истина;

Исключение

ЭтоДокумент=Истина;

КонецПопытки

   H A D G E H O G s

10 — 26.05.11 — 16:01

(8) Да.

   Рэйв

11 — 26.05.11 — 16:02

СокрЛП(Лев(Строка(ТипЗнч(ссылка)),Найти(Строка(ТипЗнч(ссылка)),» «)))

   Stim213

12 — 26.05.11 — 16:02

(9)1. — точно не сработает

   Рэйв

13 — 26.05.11 — 16:03

(12)В табло работает:)

   H A D G E H O G s

14 — 26.05.11 — 16:03

(12) Че так?

   Живой Ископаемый

15 — 26.05.11 — 16:04

   H A D G E H O G s

16 — 26.05.11 — 16:04

Стим, как тебя еще с работы то не выгнали?

   Reset

17 — 26.05.11 — 16:04

МетаданныеССылки=Ссылка.Метаданные();

Если Метаданные.Документы.Содержит(МетаданныеССылки) тогда

// документ

ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеССылки) тогда

// справочоник

КонецЕсли;

   Evgenchik

18 — 26.05.11 — 16:04

Если Лев(ТипЗнч(МойОбъект),10) = «Справочник» Тогда

сообщить(«Справочник»);

ИначеЕсли Лев(ТипЗнч(МойОбъект),8) = «Документ» Тогда

сообщить(«Документ»);

Иначе

Сообщить(«что-то»);

КонецЕсли;

   zbv

19 — 26.05.11 — 16:05

(14) в 8.2 что на выходе будет ?

   H A D G E H O G s

20 — 26.05.11 — 16:05

(17) Медленно.

   Живой Ископаемый

21 — 26.05.11 — 16:05

(9) 1 работает только в 8.1… в 8.2 не работает

   rs_trade

22 — 26.05.11 — 16:05

(9) а попытки исключения, это быстро?

   Stim213

23 — 26.05.11 — 16:05

(14) ссылка на элемент спр договоры контрагентов вернет:

Строка(ТипЗнч(Ссылка)) = «Договоры контрагентов»

а это совсем другое

   Живой Ископаемый

24 — 26.05.11 — 16:06

   H A D G E H O G s

25 — 26.05.11 — 16:06

(18) Многоязычность не учтена. Вон, в (15) — правильно. xmlтипзнч(). Забыл про него.

   Stim213

26 — 26.05.11 — 16:06

зы. сабж в 8.2

   Mitriy

27 — 26.05.11 — 16:07

Метаданные.Документы.Содержит(Ссылка.Метаданные())

   truba

28 — 26.05.11 — 16:07

Можно попыткой исключением.

Ссылка.Предопределенный

   H A D G E H O G s

29 — 26.05.11 — 16:08

(21) Хммм, не знал.

   Живой Ископаемый

30 — 26.05.11 — 16:08

Ну а теперь рассказывай, зачем нужно (0)…

   Stim213

31 — 26.05.11 — 16:08

(27) спасибо, так и сделаю

   Mitriy

32 — 26.05.11 — 16:08

(17) пардон… просмотрел..

   Reset

33 — 26.05.11 — 16:09

Вариант, иногда использую, но считаю кривым:

Лев(Ссылка.Метаданные().ПолноеИмя(),5)=»Докум»

   Stim213

34 — 26.05.11 — 16:09

(30) имеется ссылка на док или спр, нужно по её уид получить comобъект

   Живой Ископаемый

35 — 26.05.11 — 16:09

2(29) используешь в конфах 9.1? :) собираешься переходить на 8.2? :)

   Живой Ископаемый

36 — 26.05.11 — 16:11

эээ…ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(XMLТипЗнч(мояссылка).ИмяТипа,».»)[0]

сразу вернет расововерный DocumentRef или CatalogRef

   H A D G E H O G s

37 — 26.05.11 — 16:11

(35) Нет.

Использую Попытку

   Reset

38 — 26.05.11 — 16:15

Как-то через попытку не комильфо… У меня вызывает неприятие по аналогии:

Вместо

Цена=Сумма/?(Количество=0,1,Количество)

написать

Попытка

Цена=Сумма/Количество;

Исключение

Цена=Сумма;

КонецПопытки;

Впрочем, кому что.

   Stim213

39 — 26.05.11 — 16:18

а нельзя ли получить из ссылки «Документы.АвансовыйОтчет» или «Справочники.Номенклатура» ? Чтобы не добавлять лишние функции

   truba

40 — 26.05.11 — 16:19

(39) Метаданные.ПолноеИмя() ну йопт

   Reset

41 — 26.05.11 — 16:20

(39) Ссылка.Метаданные().ПолноеИмя()

Только придется вставлять «ы» и «и» :)

   Stim213

42 — 26.05.11 — 16:22

(41) вот и вот-то. а без вставки есть методы у объекта?

   Mitriy

43 — 26.05.11 — 16:22

Если Документ Тогда

«Документы.» + Ссылка.Метаданные().Имя;

   truba

44 — 26.05.11 — 16:23

Если ЧтоЭто(Ссылка) = «Справочник» Тогда

   Результат = ВставитьИ(Ссылка.Метаданные().ПолноеИмя());

Иначе

   Результат = ВставитьЫ(Ссылка.Метаданные().ПолноеИмя());

КОнецЕсли;

   Живой Ископаемый

45 — 26.05.11 — 16:23

2(39) СтрЗаменить(XMLТипЗнч(Справочники.Контрагенты.ПустаяССылка()).ИмяТипа,»Ref.»,»s.»)

   Stim213

46 — 26.05.11 — 16:28

(45)спасибо

   Живой Ископаемый

47 — 26.05.11 — 16:29

   Reset

48 — 26.05.11 — 16:31

/bravo

По моему, Ископаемый, если напрягется, весь алгоритм УПП может в одну строку завернуть. Ну, от силы в две-три.

   Живой Ископаемый

49 — 26.05.11 — 16:33

понял, пора поработать…

   Stim213

50 — 26.05.11 — 16:36

что-то не понял..

ОбъектМД = «Catalogs.Контрагенты»

Метаданные[ОбъектМД] — поле объекта не обнаружено (Catalogs.Контрагенты)

   Stim213

51 — 26.05.11 — 16:36

при этом Метаданные.Catalogs.Контрагенты отзываются

   Живой Ископаемый

52 — 26.05.11 — 16:38

мда? а типа если написать

Метаданные[«Справочники.Контрагенты»] то поле будет обнаружено?

   Stim213

53 — 26.05.11 — 16:39

(52) неа

   Mitriy

54 — 26.05.11 — 16:40

Метаданные[«Справочники»][«Контрагенты»]

   Stim213

55 — 26.05.11 — 16:40

(54) точняк

   Stim213

56 — 26.05.11 — 16:41

только как из (45)это получить

   truba

57 — 26.05.11 — 16:41

(0) давай полную задачу!

   Reset

58 — 26.05.11 — 16:41

(50) Потому что нет в метаданных «Справочники.Контрагенты».

Есть «Справочник.Контрагенты».

Теперь тебе надо вырезать букву «и» /CRY

   truba

59 — 26.05.11 — 16:42

тебе нужно реквизиты все собрать этой ссылки при переносе?

   Mitriy

60 — 26.05.11 — 16:42

(58) не поверишь…

   Reset

61 — 26.05.11 — 16:42

в (58) поторопился)

   Reset

62 — 26.05.11 — 16:43

в (57) истина.

   Живой Ископаемый

63 — 26.05.11 — 16:45

Метаданные[«Catalogs»][«Контрагенты»]

ПолноеИмяТипа = XMLТипЗнч(Ссылка).ИмяТипа;

ТипОбъекта = СтрПолучитьСтроку(СтрЗаменить(ПолноеИмяТипа,».»,Символы.ПС),1);

ВидОбъекта = СтрПолучитьСтроку(СтрЗаменить(ПолноеИмяТипа,».»,Символы.ПС),2);

Метаданные[ТипОбъекта][ВидОбъекта];

   Живой Ископаемый

64 — 26.05.11 — 16:46

тьфу ты господи

ПолноеИмяТипа = СтрЗаменить(XMLТипЗнч(Ссылка).ИмяТипа,»Ref.»,»s.»);

ТипОбъекта = СтрПолучитьСтроку(СтрЗаменить(ПолноеИмяТипа,».»,Символы.ПС),1);

ВидОбъекта = СтрПолучитьСтроку(СтрЗаменить(ПолноеИмяТипа,».»,Символы.ПС),2);

Метаданные[ТипОбъекта][ВидОбъекта];

   Stim213

65 — 26.05.11 — 16:47

(57) задача:

Для каждого стр ИЗ Остатки Цикл

УИН1 = стр.Субконто1.УникальныйИдентификатор();

УИН1Com = База8.NewObject(«УникальныйИдентификатор»,СТрока(УИН1))

Субконто1Com = База8.Справочники.Контрагенты.ПолучитьСсылку(УИН1Com)

задача — чтобы вместо «Справочники.Контрагенты» стоял вызов нужного объекта МД, определяемого стр.Субконто1

   aleks-id

66 — 26.05.11 — 16:48

Метаданные.НайтиПоПолномуИмени(СтрЗаменить(XMLТипЗнч(Справочники.Контрагенты.ПустаяССылка()).ИмяТипа,»Ref.»,».»))

   Reset

67 — 26.05.11 — 16:51

(65) Используя результат из (64):

База8[ТипОбъекта][ВидОбъекта].ПолучитьСсылку(УИН1Com)

   Живой Ископаемый

68 — 26.05.11 — 16:56

2(65)

XMLЗначение(ТипЗнч(ПланыСчетов.Хозрасчетный.Вспомогательный),XMLСтрока(ПланыСчетов.Хозрасчетный.Вспомогательный))

   Живой Ископаемый

69 — 26.05.11 — 16:58

Для каждого стр ИЗ Остатки Цикл

База8.XMLЗначение(ТипЗнч(стр.Субконто1),XMLСтрока(стр.Субконто1));

   Живой Ископаемый

70 — 26.05.11 — 16:59

впрочем не наверняка, но истина где-то рядом, Скалли. :)

   Stim213

71 — 26.05.11 — 17:02

(69) ошибка при вызове метода контекста (XMLЗначение)

   Живой Ископаемый

72 — 26.05.11 — 17:06

это из-за ТипЗнч(стр.Субконто1) -так неправильно, нужно поиграться…

например

База8.XMLЗначение(База8.ИзXMLТипа(XMLТипЗнч(стр.Субконто1)),XMLСтрока(стр.Субконто1));

   Живой Ископаемый

73 — 26.05.11 — 17:06

   Stim213

74 — 26.05.11 — 17:09

(73) работает, только не с сом. странно, методы доступны во внешним соединениях..

   Mitriy

75 — 26.05.11 — 17:10

велосипедисты…

   Живой Ископаемый

76 — 26.05.11 — 17:13

ну а просто База8.ИзXMLТипа(XMLТипЗнч(стр.Субконто1))

работает? может дело в том что так просто неправильно писать:

База8.ИзXMLТипа для ком соединения — если пытаемся вызвать функцию глобального контекста?

я просто с ком не работаю обычно

   Reset

77 — 26.05.11 — 17:17

Без преобразования типов в строки не обойтись тут…

Я в таких случаях как в (67) пишу..

   Reset

78 — 26.05.11 — 17:19

«База8.ИзXMLТипа для ком соединения » писать правильно, но и параметры должны быть «тамошними», втупую только просты типы передать можно.

Могу ошибаться….

   Живой Ископаемый

79 — 26.05.11 — 17:20

да все вроде в строках

   Живой Ископаемый

80 — 26.05.11 — 17:20

а, да…XMLТипЗнч(стр.Субконто1) — не строка…

   Живой Ископаемый

81 — 26.05.11 — 17:21

ладно, уже не интересно… :) перестало получаться. :)

   Stim213

82 — 26.05.11 — 17:23

(81) все равно спасибо! Кладезь полезной информации!

   Mitriy

83 — 26.05.11 — 17:25

гыгы… вот и новый ник…

   Stim213

84 — 26.05.11 — 17:34

все работает, кроме одного) о чем надо было подумать в самом начале) что УИН-то перенеслись, но документы разные — в 1.6 и в 2.0 =)

  

Живой Ископаемый

85 — 26.05.11 — 17:38

гы

В этой статье разберем метаданные 1С. Метаданные или объекты метаданных в 1С – это «кирпичики», из которых строится конфигурация 1С. Узнаем, что такое метаданные (объекты метаданных) и научимся получать значения свойств объектов метаданных.

В учебной конфигурации, справочник Номенклатура – это объект метаданных. Документ Закупка товаров – тоже объект метаданных.

Все объекты метаданных 1С перечислены в дереве конфигурации.

Метаданные 1С

У объектов метаданных имеются прототипы. Визуально в дереве конфигурации прототипы представлены в виде веток дерева.

Например, у справочника Номенклатура прототип Справочники.

Прототип объекта метаданных 1С

А у документа Закупка товаров – прототип Документы.

Прототип объекта метаданных 1С

У объектов одного прототипа похожие свойств и методы. Кроме принадлежности к прототипу свойства и методы объектов метаданных определяются дополнительными характеристиками. Например, включена у справочников иерархия или нет.

В процессе конфигурирования разработчик настраивает свойства объектов метаданных. Например, длина кода справочника 1С это свойство. В учебной конфигурации у справочника Номенклатура длина кода 9.

Свойство объекта метаданных 1С

А у справочника Валюта – 3.

Свойство объекта метаданных 1С

На свойства объекта метаданных можно посмотреть, как в редакторе объекта. Редактор открывается при двойном клике мышкой по объекту. Так и в палитре свойств объекта. Для того, чтобы открыть палитру свойств, следует выделить объект, вызвать контекстное меню и выполнить команду «Свойства».

Свойство объекта метаданных 1С

После, справа откроется палитра свойств объекта метаданных, в которой можно прочитать или отредактировать разные свойства объекта. Например, длину наименования.

Свойство объекта метаданных 1С

К свойствам объектов метаданных можно обратиться при помощи программного кода. Сделать это можно воспользовавшись свойством глобального контекста, которое так и называется Метаданные.

Это свойство является коллекцией объектов метаданных и включает в себя все метаданные конфигурации 1С, которые даже не созданы.

Метаданные 1С

У свойства Метаданные имеются свойства, которые отображают прототипы объектов. Это тоже коллекции. Например, для справочников имеется свое свойство.

Метаданные 1С

Которое, также является коллекцией.

Метаданные 1С

В этой коллекции содержатся все объекты метаданных, которые входят в ветку Справочники дерева конфигурации 1С.

Мы можем прочитать свойство того или иного объекта метаданных. Например, длину кода у справочника Валюта.

Метаданные 1С

Поскольку свойство Метаданные и его свойства, которые соответствуют прототипам, являются коллекциями, то их можно обойти циклом.

Например, обойдем циклом справочники и выведем имя справочника, синоним и длину кода.

Для Каждого стрСправочника из Метаданные.Справочники Цикл 
		
	Сообщить("Имя " + стрСправочника.Имя + 
			 ", синоним: " + стрСправочника.Синоним + 
			 " (длина кода: " + стрСправочника.ДлинаКода + ")");
		
КонецЦикла;	

В учебной конфигурации, у этого кода будет следующий результат.

Метаданные 1С

Обратите внимание, что этот код должен выполняться в серверном контексте (или в клиентском на толстом клиенте), поскольку у свойства Метаданные доступность Сервер, Толстый клиент и т.д.

Метаданные 1С

Кроме свойств объекта можно получить доступ к свойствам реквизитов при помощи всё того же свойства глобального контекста Метаданные. Для того, чтобы обратиться к реквизитам объекта, необходимо получить доступ к этому объекту посредством свойства глобального контекста Метаданные, а потом уже обратиться к свойству Реквизиты полученного объекта.

Например, к реквизитам конкурентного справочника можно обратиться так:

РеквизитыСправочника = Метаданные.Справочники.Контрагенты.Реквизиты;

А к реквизитам конкурентного документа – так:

РеквизитыДокумента = Метаданные.Документы.ЗакупкаТоваров.Реквизиты;

Получаемые реквизиты являются коллекцией, которая содержит все реквизиты объекта. Её также можно обойти циклом и прочитать тот или иной реквизит.

РеквизитыДокумента = Метаданные.Документы.ЗакупкаТоваров.Реквизиты;
	
Сообщить("Выводим реквизиты документа " + Метаданные.Документы.ЗакупкаТоваров.Синоним); 
	
Для Каждого стрРеквизит из РеквизитыДокумента Цикл 
		
	Сообщить("	Имя: " + стрРеквизит.Имя + ", синоним " + стрРеквизит.Синоним);
		
КонецЦикла;	

Результат работы этого кода в учебной конфигурации будет следующим.

Метаданные 1С

Некоторые свойства объектов имеют перечисленный тип, т.е. перечисление определенных значений.  Например, у документов имеется свойство Проведение. У этого свойства есть несколько значений: Разрешить и Запретить. Свойство Проведение и является перечисленным типом.

Перечисленный тип 1С

При помощи свойства глобального контекста Метаданные  мы можем проверить какое значение перечисленного типа установлено у того или иного объекта. Для этого нужно воспользоваться свойством СвойстваОбъектов. Оно содержит в себе все перечисленные типы и их значения.

Перечисленный тип 1С

Мы можем сравнить значение перечисленного типа в реквизите объекта метаданных со значением из коллекции соответствующего типа в свойстве СвойстваОбъектов. Например, выведем все документы и сообщим можно эти документы проводить или нельзя.

Для Каждого стрДокумент Из Метаданные.Документы Цикл 
		
	Сообщить("Выводим " + стрДокумент.Представление() + "(" + стрДокумент.ПолноеИмя() + ")");
		
	Если СтрДокумент.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда 
		Сообщить(Символы.Таб + "Документ можно проводить");
	ИначеЕсли СтрДокумент.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда  
		Сообщить(Символы.Таб + "Документ нельзя проводить");
	КонецЕсли;	
		
КонецЦикла;

Перечисленный тип 1С

Как вы видите, при помощи свойства глобального контекста Метаданные можно получать очень подробную информацию об объектах конфигурации, эта информация может вам пригодиться при написании различных алгоритмов.

Читайте также по теме:

Объект в 1С

Ссылка в 1С

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Раздел
Общие объекты
Подразделы
Работа с объектами метаданных
ИмяОбъекта
ОбъектМетаданныхКонфигурация
ТипСтатьи
Методы

ОбъектМетаданныхКонфигурация.НайтиПоТипу (ConfigurationMetadataObject.FindByType)
ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject)
НайтиПоТипу (FindByType)
Синтаксис:
НайтиПоТипу(<Тип>)
Параметры:
<Тип> (обязательный)
Тип: Тип.
Тип, по которому будет выполнен поиск объекта метаданных.
Возвращаемое значение:
Тип: ОбъектМетаданных: Куб, ОбъектМетаданных: ТаблицаИзмерения, ОбъектМетаданных: ВнешнийИсточникДанных, ОбъектМетаданных: Поле, ОбъектМетаданных: Таблица, ОбъектМетаданных: HTTPСервис, ОбъектМетаданных: Функция, ОбъектМетаданных: ШаблонURLHTTPСервиса, ОбъектМетаданных: ОпределяемыйТип, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: Справочник, ОбъектМетаданных: ФункциональнаяОпция, ОбъектМетаданных: ПараметрФункциональныхОпций, ОбъектМетаданных: Команда, ОбъектМетаданных: ГруппаКоманд, ОбъектМетаданных: ХранилищеНастроек, ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: WebСервис, ОбъектМетаданных: WSСсылка, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма , ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации, ОбъектМетаданных: ОбщийРеквизит; Неопределено.
Неопределено — объект метаданных не найден.
Описание:
Осуществляет поиск объекта метаданных, отвечающего за указанный тип. Например, для объекта типа Справочник.Товары позволяет найти объект метаданных Справочник.Товары.
Объекты метаданных конфигурации, отвечающие за прикладные объекты, определяют соответствующий набор типов. Например, наличие в конфигурации объекта метаданных Справочник.Валюты определяет наличие в системе нескольких типов (СправочникСсылка.Валюты, СправочникМенеджер.Валюты, СправочникОбъект.Валюты, СправочникВыборка.Валюты, СправочникСписок.Валюты).

Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:
Позволяет по указанному типу найти объект метаданных, который определяет его в конфигурации.
Пример:


Список = Новый СписокЗначений;
Для Ном = 1 по 3 Цикл
    Если Ном <= Счет.ВидыСубконто.Количество()
            И ЗначениеЗаполнено(Счет) Тогда
        ВидСубконто = Счет.ВидыСубконто[Ном-1].ВидСубконто;
        МетаТип = Метаданные.НайтиПоТипу(ВидСубконто.ТипЗначения.Типы()[0]);
        Попытка
            Если МетаТип.Реквизиты.Количество() > 0 Тогда
                Список.Добавить(Ном-1, ВидСубконто.Наименование,,);
            КонецЕсли;
        Исключение
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Содержание:

         В конфигурациях системы 1С Предприятие, поддерживающих БСП, есть справочник «Идентификаторы объектов метаданных». 

         Данный справочник является служебным. Рядовой пользователь с ним, как правило, не сталкивается, разве что, при неудачных обновлениях, когда получает ошибку вида «Для объекта метаданных … не найден идентификатор в справочнике «Идентификаторы объектов метаданных». Основные действия со справочником выполняются БСП автоматически, поэтому и разработчики с этим справочником тоже встречается нечасто.

         Разберемся, зачем же он нужен и что с ним делать.  

1.     Назначение справочника «Идентификаторы объектов метаданных»

         Основной причиной использование такого справочника является, вероятно, то, что на уровне платформы системы 1С Предприятие нет прямых способов получения уникального идентификатора объекта метаданных конфигурации, т.е. нельзя обратиться к ссылке на этот объект.

         Максимально, до чего можно добраться – это до строкового представления «ПолноеИмя().

         Например, метод Метаданные.Справочник.СтатьиДвиженияДенежныхСредств.ПолноеИмя() вернет строку «Справочник. СтатьиДвиженияДенежныхСредств».

         А к самой ссылке «c18aed98-9a38-4a4f-bee4-1b6977344491» никак не обратиться.

         Поэтому нельзя построить производительные (с использованием запросов по ссылкам) программные механизмы по работе с объектами метаданных 1С. Чтобы обойти это ограничение и создали справочник «Идентификаторы объектов метаданных».

         Смысл простой: в 1С заполнить справочник элементами, соответствующими объектам метаданных 1С конфигурации, и использовать ссылки на элементы этого справочника в качестве «ссылок» на объекты метаданных 1С.

         Основное направление использования – автоматизация процедур обновления конфигурации 1С Предприятие в части добавление, переименования и удаления объектов метаданных 1С. Можно выбрать объекты, по которым изменилась структура метаданных и как-то их обработать при обновлении.

         БСП использует этот справочник еще и для хранения настроек версионирования данных, хранения списка выбранных ролей в профилях групп доступа и т.п.  

2.     Работа со справочником 1С: Идентификаторы объектов метаданных

         Работа со справочником 1С: Идентификаторы объектов метаданных, сводится в основном к поддержанию актуальности соответствия состава этого справочника и структуры объектов метаданных 1С.

         В последних редакциях конфигураций 1С на БСП обновление этого справочника (идентификаторов объектов метаданных) производится полностью автоматически, даже если разработчик добавил свои (нетиповые) объекты метаданных 1С. Исключение составляют добавленные роли и подсистемы – их идентификаторы нужно обновлять вручную.

         К необходимости ручного обновления приводят также различные «сбои» в процедурах обновления, когда нарушается соответствие между содержимым справочника и структурой метаданных.

         Информации о том, как вручную запустить обновления идентификаторов, очень много на просторах сети. Один из простых способов: запустить программу с параметром командной строки программы 1С: Предприятия 8 «/С ЗапуститьОбновлениеИнформационнойБазы»:

·        В режиме Конфигуратора в 1С:

·        В режиме Предприятия системы 1С:

 

Специалист компании «Кодерлайн»

Игорь Борисенко

  • Главная
  • О сайте
  • Главная
  • Содержание

Рукопашный бой Карташ

Категории

—>

рубрики: Метаданные | Дата: 6 февраля, 2017

Что такое метаданные

Метаданные представляют собой структуру базы данных 1С:Предприятия. То есть это структура в которой описываются справочники, документы, регистры, перечисления и т.д., а также подчиненные им элементы: табличные части, реквизиты, измерения ресурсы и прочее. Визуально мы можем наблюдать эту структуру в конфигураторе, когда открываем дерево конфигурации.


Редактирование метаданных возможно только в режиме конфигуратора, но в языке 1С существуют методы и функции, которые осуществляют программный доступ к метаданным в режиме чтения.

Зачем нужна работа с метаданными

Бывают ситуации когда надо обработать по одному правилу все схожие между собой объекты. Допустим нам надо написать обработку, которая будет производить некие действия со всеми справочниками у которых есть реквизит Товар. Без использования метаданных надо будет проанализировать вручную всю ветку со справочниками в дереве конфигурации и для каждого справочника написать отдельный код. А с использованием метаданных мы можем программно обойти все справочники, а затем для каждого справочника можем проанализировать все его реквизиты. И в случае если искомый реквизит найден обработать все элементы справочника. Этот подход значительно уменьшит количество кода и предварительной ручной работы. Опять же если в конфигурацию будет добавлен новый справочник, в первом случае (без использования метаданных) необходимо будет дорабатывать обработку. Если же были использованы метаданные, никакой доработки не потребуется.

Также метаданные можно использовать в случае работы с реквизитами составного типа. Когда в зависимости от метаданных реквизита может различаться алгоритм работы программы.

Примеры

Обход метаданных в цикле

В качестве первого примера рассмотрим обход в цикле всех справочников и для каждого справочника также в цикле обход всех его реквизитов. Доступ к метаданным осуществляется с использованием свойства глобального контекста Метаданные. Вот код который выполняет данную задачу




Для каждого МетаданныеСправочника Из Метаданные.Справочники Цикл

	Сообщить(МетаданныеСправочника.Имя);
	Сообщить(МетаданныеСправочника.Синоним);

	Для каждого РеквизитСправочника Из МетаданныеСправочника.Реквизиты Цикл

		Сообщить(РеквизитСправочника.Имя);
		Сообщить(РеквизитСправочника.Синоним);

	КонецЦикла;

КонецЦикла;

Получение метаданных по ссылке объекта

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




Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|	Пользователи.Ссылка
|ИЗ
|	Справочник.Пользователи КАК Пользователи";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

	МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Выборка.Ссылка));

	Сообщить(МетаданныеОбъекта.Имя);
	Сообщить(МетаданныеОбъекта.Синоним);

КонецЦикла;

Получение метаданных по полному имени

Cуществует еще один метод, который позволяет получить метаданные по полному имени объекта. Речь идет о методе НайтиПоПолномуИмени(<ПолноеИмя>). Если взять тот же справочник Пользователи, то его полное имя выглядить как Справочник.Пользователи. Соответственно код для получения метаданных справочника Пользователи по полному имени выглядит вот так




МетаданныеПользователи = Метаданные.НайтиПоПолномуИмени("Справочник.Пользователи");

Если выбирать между получением метаданных по ссылке и по полному имени, то мне больше по душе метод НайтиПоТипу(<Тип>).

Конечно Имя и Синоним, в примерах выше — это лишь малая часть информации, которую можно извлечь из метаданных. Но тут как говориться Shift + F9 в помощь.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить новую таблицу
  • Как найти кино когда не знаешь названия
  • Как найти продюсера для начинающего певца
  • Книга как составить психологический портрет
  • Как найти действующую силу в момент времени

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии