|
|||
John83
18.11.10 — 17:39 |
Получаю строку (например «Номенклатура»), далее нужно узнать, является это справочником или перечислением. |
||
Живой Ископаемый
1 — 18.11.10 — 17:41 |
а если есть и справочник и перечисление — что выберешь? |
||
John83
2 — 18.11.10 — 17:41 |
(1) мне так думается, что в типовых такого не бывает |
||
Живой Ископаемый
3 — 18.11.10 — 17:42 |
в типовых есть процедурки для (0) наверное |
||
zbv
4 — 18.11.10 — 17:45 |
(0) запихай Имена справочников в одну структуру или соответствие, имена документов в другую и проверяй справочник это или документ по наличию. |
||
mikecool
5 — 18.11.10 — 17:46 |
Если Метаданные.Справочники.ТипВсессылки.Найти(«Номенклатура») |
||
John83
6 — 18.11.10 — 17:48 |
(4) так типовых методов нет? жаль… |
||
mikecool
7 — 18.11.10 — 17:49 |
(6) обнови страницу |
||
73
8 — 18.11.10 — 17:50 |
(5) Не надо там ТипВсеСсылки… |
||
John83
9 — 18.11.10 — 17:51 |
(5) есть Справочники.ТипВсеСсылки().СодержитТип() |
||
mikecool
10 — 18.11.10 — 18:00 |
(8)(9) это я на память придумал )) |
||
Bober
11 — 18.11.10 — 18:06 |
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(«Справочник.» + имяОбъекта); Если ОбъектМетаданных <> определено Тогда |
||
John83
12 — 19.11.10 — 09:31 |
(11) спасибо |
||
John83
13 — 19.11.10 — 09:33 |
немного усложним задачку |
||
Sammo
14 — 19.11.10 — 09:46 |
Вид в каком виде? |
||
John83 15 — 19.11.10 — 10:36 |
(14) попробуем |
TurboConf — расширение возможностей Конфигуратора 1С
- Раздел
- Общие объекты
- Подразделы
- Работа с объектами метаданных
- ИмяОбъекта
- Типы свойств объектов метаданных
- ПодвидОбъекта
- КоллекцияОбъектовМетаданных
- ТипСтатьи
- Методы
КоллекцияОбъектовМетаданных.Найти (MetadataObjectCollection.Find)
КоллекцияОбъектовМетаданных (MetadataObjectCollection)
Найти (Find)
Синтаксис:
Найти(<Наименование>)
Параметры:
<Наименование> (обязательный)
Тип: Строка.
Наименование объекта описания метаданного.
Возвращаемое значение:
Тип: ОбъектМетаданных: Куб, ОбъектМетаданных: ТаблицаИзмерения, ОбъектМетаданных: ВнешнийИсточникДанных, ОбъектМетаданных: Поле, ОбъектМетаданных: Таблица, ОбъектМетаданных: HTTPСервис, ОбъектМетаданных: Функция, ОбъектМетаданных: ШаблонURLHTTPСервиса, ОбъектМетаданных: ОпределяемыйТип, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: Справочник, ОбъектМетаданных: ФункциональнаяОпция, ОбъектМетаданных: ПараметрФункциональныхОпций, ОбъектМетаданных: Команда, ОбъектМетаданных: ГруппаКоманд, ОбъектМетаданных: ХранилищеНастроек, ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: WebСервис, ОбъектМетаданных: WSСсылка, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма , ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации, ОбъектМетаданных: ОбщийРеквизит; Неопределено.
Если объект не найден, то возвращается значение Неопределено.
Описание:
Осуществляет поиск в коллекции объекта описания метаданного по его имени.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
МетаданныеРегистра = Метаданные.РегистрыНакопления.Найти(ИмяРегистра);
Содержание:
1. Когда возникает необходимость проверить наличие реквизита 1С?
2. Как можно получить метаданные объекта 1С?
1. Когда возникает необходимость проверить наличие реквизита 1С
Потребность проверки наличия реквизита обычно возникает при написании общих, универсальных процедур или функций, к примеру, когда необходимо выполнить ряд однообразных действий, проверить заполнение перед проведением, при этом реквизитный состав обрабатываемых объектов метаданных отличается незначительно (например, в документе, отражающем продажу товара, есть реквизит Склад, а в документе, отражающем перемещение товара – реквизиты Склад-отправитель и Склад-получатель).
В ряде типовых конфигураций 1С предлагается стандартная функция проверки наличия реквизита в объекте (расположена в модуле “ОбщегоНазначения”)
Функция ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта) Экспорт
Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено);
КонецФункции
2. Как можно получить метаданные объекта 1С
Однако написать свою функцию также не представляет труда. В первую очередь необходимо получить метаданные объекта 1С одним из способов:
через функцию Метаданные() объекта
пример синтаксиса: СправочникСсылка.Метаданные()
ДокументСсылка.Метаданные()
через свойство глобального контекста Метаданные
пример синтаксиса: Метаданные.Справочники.[ИмяСправочника]
Метаданные.Документы.[ИмяДокумента]
Далее через свойство “Реквизиты” использовать функцию Найти(). В случае, если реквизит не найден, возвращается значение Неопределено.
Пример 1
Метаданные = Контрагент.Метаданные();
Если Метаданные.Реквизиты.Найти(«Ответственный») = Неопределено Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
Пример 2
Функция ПолучитьОрганизацию(Контрагент, Пользователь)
Если Метаданные.Справочники.Контрагенты.Реквизиты.Найти(«Организация») <> Неопределено Тогда
Возврат Контрагент.Организация;
Иначе
Возврат Пользователь.Организация;
КонецЕсли;
КонецФункции
Описанный алгоритм подходит для случаев проверки наличия реквизита шапки. Но что делать, когда возникает необходимость определить, существует ли реквизит в табличной части 1С (справочника или документа)? Для этого используется следующая конструкция:
Метаданные.Справочники.<ИмяСправочника>.ТабличныеЧасти.Реквизиты.Найти(<ИмяОбъектаПоиска>).
При обработке таблиц значений также возможно выполнить проверку существования колонки – в этом случае применяется метод Свойство(), с помощью которого, помимо основной функции – получения значения элемента по указанному имени, можно проверить, имеется ли указанного свойство.
Пример синтаксиса:
Если НЕ ТекущаяСтрока.Свойство(«Исключить») ИЛИ НЕ ТекущаяСтрока.Исключить Тогда
ЗаполнитьЗначенияСвойств(ТаблицаЗагрузки.Добавить(); ТекущаяСтрока);
КонецЕсли;
Специалист компании ООО «Кодерлайн»
Кондренко Анна Сергеевна
Поиск объекта метаданных в конфигурации
Объект конфигурации можно найти с помощью диалога Поиск объектов метаданных. Диалог вызывается для окна “Конфигурация” выбором пункта меню “Правка – Найти” или по нажатию Ctrl +F.
В поле Искать указывается строка поиска.
Если требуется найти слово целиком, установите флажок Слово целиком.
Если важен регистр, установите флажок Учитывать регистр
Для обозначения области поиска установите или снимите флажки поиска в Именах, Синонимах, Комментариях.
Похожее
В этой статье разберем метаданные 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