метаданные — документ или справочник |
Я |
26.05.11 — 15:55
имеется ссылка на док или спр. как из ссылки получить «документ» или «справочник»?
1 — 26.05.11 — 15:55
ТипЗнч(<Значение>) не предлагать?
2 — 26.05.11 — 15:57
(1) не предлагать. мне нужна на выходе строка «документ» или «справочник». и только
3 — 26.05.11 — 15:58
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(МояСсылка)) Тогда
Сообщить(«Ура! Это ссылка на документ!»);
ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(МояСсылка)) Тогда
Сообщить(«Ура! Это ссылка на элемент справочника!»);
Иначе
Сообщить(«Хрень какая-то»);
КонецЕсли;
4 — 26.05.11 — 15:59
(3) Медленнно.
5 — 26.05.11 — 15:59
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ссылка)) Тогда
Сообщить(«Справочник»);
иначеЕсли …
6 — 26.05.11 — 15:59
(2) извиняюсь — (3) не подходит.
7 — 26.05.11 — 15:59
через Ссылка.Метаданные().ПолноеИмя()
8 — 26.05.11 — 16:00
(4) Через Метаданные быстрее будет?
9 — 26.05.11 — 16:01
Строка(ТипЗнч(Ссылка))
Учесть многоязыковость.
Ну или:
ЭтоСправочник=Ложь;
ЭтоДокумент=Ложь;
Попытка
Значение=Ссылка.Метаданные().ДлинаНаименования;
ЭтоСправочник=Истина;
Исключение
ЭтоДокумент=Истина;
КонецПопытки
10 — 26.05.11 — 16:01
(8) Да.
11 — 26.05.11 — 16:02
СокрЛП(Лев(Строка(ТипЗнч(ссылка)),Найти(Строка(ТипЗнч(ссылка)),» «)))
12 — 26.05.11 — 16:02
(9)1. — точно не сработает
13 — 26.05.11 — 16:03
(12)В табло работает:)
14 — 26.05.11 — 16:03
(12) Че так?
15 — 26.05.11 — 16:04
16 — 26.05.11 — 16:04
Стим, как тебя еще с работы то не выгнали?
17 — 26.05.11 — 16:04
МетаданныеССылки=Ссылка.Метаданные();
Если Метаданные.Документы.Содержит(МетаданныеССылки) тогда
// документ
ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеССылки) тогда
// справочоник
КонецЕсли;
18 — 26.05.11 — 16:04
Если Лев(ТипЗнч(МойОбъект),10) = «Справочник» Тогда
сообщить(«Справочник»);
ИначеЕсли Лев(ТипЗнч(МойОбъект),8) = «Документ» Тогда
сообщить(«Документ»);
Иначе
Сообщить(«что-то»);
КонецЕсли;
19 — 26.05.11 — 16:05
(14) в 8.2 что на выходе будет ?
20 — 26.05.11 — 16:05
(17) Медленно.
21 — 26.05.11 — 16:05
(9) 1 работает только в 8.1… в 8.2 не работает
22 — 26.05.11 — 16:05
(9) а попытки исключения, это быстро?
23 — 26.05.11 — 16:05
(14) ссылка на элемент спр договоры контрагентов вернет:
Строка(ТипЗнч(Ссылка)) = «Договоры контрагентов»
а это совсем другое
24 — 26.05.11 — 16:06
25 — 26.05.11 — 16:06
(18) Многоязычность не учтена. Вон, в (15) — правильно. xmlтипзнч(). Забыл про него.
26 — 26.05.11 — 16:06
зы. сабж в 8.2
27 — 26.05.11 — 16:07
Метаданные.Документы.Содержит(Ссылка.Метаданные())
28 — 26.05.11 — 16:07
Можно попыткой исключением.
Ссылка.Предопределенный
29 — 26.05.11 — 16:08
(21) Хммм, не знал.
30 — 26.05.11 — 16:08
Ну а теперь рассказывай, зачем нужно (0)…
31 — 26.05.11 — 16:08
(27) спасибо, так и сделаю
32 — 26.05.11 — 16:08
(17) пардон… просмотрел..
33 — 26.05.11 — 16:09
Вариант, иногда использую, но считаю кривым:
Лев(Ссылка.Метаданные().ПолноеИмя(),5)=»Докум»
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
37 — 26.05.11 — 16:11
(35) Нет.
Использую Попытку
38 — 26.05.11 — 16:15
Как-то через попытку не комильфо… У меня вызывает неприятие по аналогии:
Вместо
Цена=Сумма/?(Количество=0,1,Количество)
написать
Попытка
Цена=Сумма/Количество;
Исключение
Цена=Сумма;
КонецПопытки;
Впрочем, кому что.
39 — 26.05.11 — 16:18
а нельзя ли получить из ссылки «Документы.АвансовыйОтчет» или «Справочники.Номенклатура» ? Чтобы не добавлять лишние функции
40 — 26.05.11 — 16:19
(39) Метаданные.ПолноеИмя() ну йопт
41 — 26.05.11 — 16:20
(39) Ссылка.Метаданные().ПолноеИмя()
Только придется вставлять «ы» и «и»
42 — 26.05.11 — 16:22
(41) вот и вот-то. а без вставки есть методы у объекта?
43 — 26.05.11 — 16:22
Если Документ Тогда
«Документы.» + Ссылка.Метаданные().Имя;
44 — 26.05.11 — 16:23
Если ЧтоЭто(Ссылка) = «Справочник» Тогда
Результат = ВставитьИ(Ссылка.Метаданные().ПолноеИмя());
Иначе
Результат = ВставитьЫ(Ссылка.Метаданные().ПолноеИмя());
КОнецЕсли;
45 — 26.05.11 — 16:23
2(39) СтрЗаменить(XMLТипЗнч(Справочники.Контрагенты.ПустаяССылка()).ИмяТипа,»Ref.»,»s.»)
46 — 26.05.11 — 16:28
(45)спасибо
47 — 26.05.11 — 16:29
48 — 26.05.11 — 16:31
/bravo
По моему, Ископаемый, если напрягется, весь алгоритм УПП может в одну строку завернуть. Ну, от силы в две-три.
49 — 26.05.11 — 16:33
понял, пора поработать…
50 — 26.05.11 — 16:36
что-то не понял..
ОбъектМД = «Catalogs.Контрагенты»
Метаданные[ОбъектМД] — поле объекта не обнаружено (Catalogs.Контрагенты)
51 — 26.05.11 — 16:36
при этом Метаданные.Catalogs.Контрагенты отзываются
52 — 26.05.11 — 16:38
мда? а типа если написать
Метаданные[«Справочники.Контрагенты»] то поле будет обнаружено?
53 — 26.05.11 — 16:39
(52) неа
54 — 26.05.11 — 16:40
Метаданные[«Справочники»][«Контрагенты»]
55 — 26.05.11 — 16:40
(54) точняк
56 — 26.05.11 — 16:41
только как из (45)это получить
57 — 26.05.11 — 16:41
(0) давай полную задачу!
58 — 26.05.11 — 16:41
(50) Потому что нет в метаданных «Справочники.Контрагенты».
Есть «Справочник.Контрагенты».
Теперь тебе надо вырезать букву «и» /CRY
59 — 26.05.11 — 16:42
тебе нужно реквизиты все собрать этой ссылки при переносе?
60 — 26.05.11 — 16:42
(58) не поверишь…
61 — 26.05.11 — 16:42
в (58) поторопился)
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);
Метаданные[ТипОбъекта][ВидОбъекта];
65 — 26.05.11 — 16:47
(57) задача:
Для каждого стр ИЗ Остатки Цикл
УИН1 = стр.Субконто1.УникальныйИдентификатор();
УИН1Com = База8.NewObject(«УникальныйИдентификатор»,СТрока(УИН1))
Субконто1Com = База8.Справочники.Контрагенты.ПолучитьСсылку(УИН1Com)
задача — чтобы вместо «Справочники.Контрагенты» стоял вызов нужного объекта МД, определяемого стр.Субконто1
66 — 26.05.11 — 16:48
Метаданные.НайтиПоПолномуИмени(СтрЗаменить(XMLТипЗнч(Справочники.Контрагенты.ПустаяССылка()).ИмяТипа,»Ref.»,».»))
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
впрочем не наверняка, но истина где-то рядом, Скалли.
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
74 — 26.05.11 — 17:09
(73) работает, только не с сом. странно, методы доступны во внешним соединениях..
75 — 26.05.11 — 17:10
велосипедисты…
76 — 26.05.11 — 17:13
ну а просто База8.ИзXMLТипа(XMLТипЗнч(стр.Субконто1))
работает? может дело в том что так просто неправильно писать:
База8.ИзXMLТипа для ком соединения — если пытаемся вызвать функцию глобального контекста?
я просто с ком не работаю обычно
77 — 26.05.11 — 17:17
Без преобразования типов в строки не обойтись тут…
Я в таких случаях как в (67) пишу..
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
ладно, уже не интересно… перестало получаться.
82 — 26.05.11 — 17:23
(81) все равно спасибо! Кладезь полезной информации!
83 — 26.05.11 — 17:25
гыгы… вот и новый ник…
84 — 26.05.11 — 17:34
все работает, кроме одного) о чем надо было подумать в самом начале) что УИН-то перенеслись, но документы разные — в 1.6 и в 2.0 =)
Живой Ископаемый
85 — 26.05.11 — 17:38
гы
В этой статье разберем метаданные 1С. Метаданные или объекты метаданных в 1С – это «кирпичики», из которых строится конфигурация 1С. Узнаем, что такое метаданные (объекты метаданных) и научимся получать значения свойств объектов метаданных.
В учебной конфигурации, справочник Номенклатура – это объект метаданных. Документ Закупка товаров – тоже объект метаданных.
Все объекты метаданных 1С перечислены в дереве конфигурации.
У объектов метаданных имеются прототипы. Визуально в дереве конфигурации прототипы представлены в виде веток дерева.
Например, у справочника Номенклатура прототип Справочники.
А у документа Закупка товаров – прототип Документы.
У объектов одного прототипа похожие свойств и методы. Кроме принадлежности к прототипу свойства и методы объектов метаданных определяются дополнительными характеристиками. Например, включена у справочников иерархия или нет.
В процессе конфигурирования разработчик настраивает свойства объектов метаданных. Например, длина кода справочника 1С это свойство. В учебной конфигурации у справочника Номенклатура длина кода 9.
А у справочника Валюта – 3.
На свойства объекта метаданных можно посмотреть, как в редакторе объекта. Редактор открывается при двойном клике мышкой по объекту. Так и в палитре свойств объекта. Для того, чтобы открыть палитру свойств, следует выделить объект, вызвать контекстное меню и выполнить команду «Свойства».
После, справа откроется палитра свойств объекта метаданных, в которой можно прочитать или отредактировать разные свойства объекта. Например, длину наименования.
К свойствам объектов метаданных можно обратиться при помощи программного кода. Сделать это можно воспользовавшись свойством глобального контекста, которое так и называется Метаданные.
Это свойство является коллекцией объектов метаданных и включает в себя все метаданные конфигурации 1С, которые даже не созданы.
У свойства Метаданные имеются свойства, которые отображают прототипы объектов. Это тоже коллекции. Например, для справочников имеется свое свойство.
Которое, также является коллекцией.
В этой коллекции содержатся все объекты метаданных, которые входят в ветку Справочники дерева конфигурации 1С.
Мы можем прочитать свойство того или иного объекта метаданных. Например, длину кода у справочника Валюта.
Поскольку свойство Метаданные и его свойства, которые соответствуют прототипам, являются коллекциями, то их можно обойти циклом.
Например, обойдем циклом справочники и выведем имя справочника, синоним и длину кода.
Для Каждого стрСправочника из Метаданные.Справочники Цикл Сообщить("Имя " + стрСправочника.Имя + ", синоним: " + стрСправочника.Синоним + " (длина кода: " + стрСправочника.ДлинаКода + ")"); КонецЦикла;
В учебной конфигурации, у этого кода будет следующий результат.
Обратите внимание, что этот код должен выполняться в серверном контексте (или в клиентском на толстом клиенте), поскольку у свойства Метаданные доступность Сервер, Толстый клиент и т.д.
Кроме свойств объекта можно получить доступ к свойствам реквизитов при помощи всё того же свойства глобального контекста Метаданные. Для того, чтобы обратиться к реквизитам объекта, необходимо получить доступ к этому объекту посредством свойства глобального контекста Метаданные, а потом уже обратиться к свойству Реквизиты полученного объекта.
Например, к реквизитам конкурентного справочника можно обратиться так:
РеквизитыСправочника = Метаданные.Справочники.Контрагенты.Реквизиты;
А к реквизитам конкурентного документа – так:
РеквизитыДокумента = Метаданные.Документы.ЗакупкаТоваров.Реквизиты;
Получаемые реквизиты являются коллекцией, которая содержит все реквизиты объекта. Её также можно обойти циклом и прочитать тот или иной реквизит.
РеквизитыДокумента = Метаданные.Документы.ЗакупкаТоваров.Реквизиты; Сообщить("Выводим реквизиты документа " + Метаданные.Документы.ЗакупкаТоваров.Синоним); Для Каждого стрРеквизит из РеквизитыДокумента Цикл Сообщить(" Имя: " + стрРеквизит.Имя + ", синоним " + стрРеквизит.Синоним); КонецЦикла;
Результат работы этого кода в учебной конфигурации будет следующим.
Некоторые свойства объектов имеют перечисленный тип, т.е. перечисление определенных значений. Например, у документов имеется свойство Проведение. У этого свойства есть несколько значений: Разрешить и Запретить. Свойство Проведение и является перечисленным типом.
При помощи свойства глобального контекста Метаданные мы можем проверить какое значение перечисленного типа установлено у того или иного объекта. Для этого нужно воспользоваться свойством СвойстваОбъектов. Оно содержит в себе все перечисленные типы и их значения.
Мы можем сравнить значение перечисленного типа в реквизите объекта метаданных со значением из коллекции соответствующего типа в свойстве СвойстваОбъектов. Например, выведем все документы и сообщим можно эти документы проводить или нельзя.
Для Каждого стрДокумент Из Метаданные.Документы Цикл Сообщить("Выводим " + стрДокумент.Представление() + "(" + стрДокумент.ПолноеИмя() + ")"); Если СтрДокумент.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда Сообщить(Символы.Таб + "Документ можно проводить"); ИначеЕсли СтрДокумент.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда Сообщить(Символы.Таб + "Документ нельзя проводить"); КонецЕсли; КонецЦикла;
Как вы видите, при помощи свойства глобального контекста Метаданные можно получать очень подробную информацию об объектах конфигурации, эта информация может вам пригодиться при написании различных алгоритмов.
Читайте также по теме:
Объект в 1С
Ссылка в 1С
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 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 в помощь.