О встроенных моделях XDTO платформы 1С

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

Учитывая наблюдаемый интерес к работе с XDTO, хочу обратить внимание на информацию о специфике самой платформы, которая предоставлена в пакетах самой платформы. Ничего нового, всё это можно увидеть при работе со стационарным описанием XDTO при выборе типов свойств и объектов, но это интерфейс. Но и программно докопаться несложно. Эти пакеты, ровно с теми же URI, доступны для глобальной переменной ФабрикаXDTO (синглтона). Надо заметить, что этим, помимо клиент-серверной доступности, отличаются способы создания фабрик. Если вы делаете фабрику конструктором, в неё включатся только нужные вам пакеты, а если задействуете синглтон, то всё «барахло» встроенных пакетов тоже ваше. Так вот, путём несложных манипуляций можно получить, например, выгрузку содержимого пакета в текстовый файл, почитать его и узнать кое-что интересное. Например, для желающих глубже понять устройство 1С и особенности её поведения в тех или иных ситуациях.

По рассмотрении пакетов, выяснилось следующее:

«http://v8.1c.ru/8.1/data/enterprise/current-config» — все метаданные, но без универсальных полей, т.е. без, например, таких понятий, как ДлинаКода или РежимУправленияБлокировкойДанных,  только реквизиты и самое общее по ним, что, в общем, можно получить обычным опросом метаданных.
«http://v8.1c.ru/8.1/data/core» — системные перечисления, служебные типы, самые-самые базисные понятия, на которых построена и сама платформа, у меня вызвало чисто теоретический интерес, т.к. не знаю, где применить.
«http://v8.1c.ru/8.1/data/enterprise» — системные перечисления, служебные типы, но уже не самые базисные понятия, и это может понадобиться в тонкостях работы конвертаций, обменов и тыды.
«http://v8.1c.ru/8.2/uobjects» — универсальные коллекции, в т.ч. ДанныеФормы. Любителям дербанить и пересобирать формы, используя выгрузку в файлы на 8.3 рекомендую.
«http://v8.1c.ru/8.2/bsl» — объекты обработки ошибок, тоже может пригодиться.
«http://v8.1c.ru/8.2/data/bsl» — описание описаний процедур и функций, если я верно понял. Наверное, было бы интересно в каких-то интеграциях в вебе, в веб-расширении и прочих трансляциях).
«http://v8.1c.ru/8.2/managed-application/core» — базовые и основные для интерфейсов УФ. Опять-таки, разбирать конфу с учётом этих сведений удобнее.
«http://v8.1c.ru/8.1/data/ui» — также некоторые служебные системные перечисления и сведения, может пригодиться ленивым, которым неохота перепечатывать СП, делая свои списки выбора, и волноваться, а не добавила ли 1С ещё что-нибудь в очередной версии. 

Например, можно вытащить все описанные форматы картинок (а равно и вообще форматы файлов, поддерживаемые платформой и выдаваемые в фильтре при открытии файла в 1С).

// маленький пример, как пользоваться XDTO самой конфы
Функция ПолучитьДопустимыеФорматыКартинок1С()
Попытка
   
// в принципе, так же можно получать и другие системные перечисления — надо лишь выяснить, в каком пакете они.
   
рОбъектXDTO=ФабрикаXDTO.ЭкспортМоделиXDTO(«http://v8.1c.ru/8.1/data/ui»); // тут известно, что в этом пакете.
   
рXML=Новый ЗаписьXML;
   
рXML.УстановитьСтроку(«UTF-8»);
   
рXML.ЗаписатьОбъявлениеXML();
   
ФабрикаXDTO.ЗаписатьXML(рXML,рОбъектXDTO);
   
// читаем в построитель
   
рХМЛ=Новый ЧтениеXML;
   
рХМЛ.УстановитьСтроку(рXML.Закрыть());
   
постр=Новый ПостроительDOM;
   
док=постр.Прочитать(рХМЛ);
   
// ищем (жаль, нет поиска по значению атрибута)
   
мЗначений=Новый Массив;
   
спЭлементов=док.ПолучитьЭлементыПоИмени(«valueType»);
    Для каждого
эл Из спЭлементов Цикл
        Если
эл.ПолучитьАтрибут(«name»)=«PictureFormat» Тогда // это он, нужный
           
Для каждого уз Из эл.ДочерниеУзлы Цикл // находится в теге enumeration
               
мЗначений.Добавить(уз.ТекстовоеСодержимое);
            КонецЦикла;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат
мЗначений;
Исключение
   
Сообщить(«ПолучитьДопустимыеФорматыКартинок1С, ошибка: «+ОписаниеОшибки(),СтатусСообщения.Важное);
    Возврат Неопределено;
КонецПопытки;
КонецФункции

 

Ну а уж вывалить ЗаписьXML в текстовый файл, чтоб просто полюбоваться, думаю, все смогут:

т=Новый ТекстовыйДокумент; т.УстановитьТекст(ЗаписьХМЛ.Закрыть()); т.Показать(); 

Если кому пригодится, будет хорошо )))

9 Comments

  1. German
    // ищем (жаль, нет поиска по значению атрибута)

    ВычислитьВыражениеXpath

    Reply ↓
  2. Yashazz

    (1) Во! Спасибо, давно хочется докопаться до возможностей XPath, да руки не доходят. Подозревал, что это возможно.

    Reply ↓
  3. barelpro

    (1) German,

    Жалко что этот метод работает только у ДокументDOM. А хотелось и у ДокументHTML, например в этом примере:

    ЧтениеHTML = Новый ЧтениеHTML;

    ЧтениеHTML.УстановитьСтроку(Текст);

    Построитель = Новый ПостроительDOM;

    ДокументHTML = Построитель.Прочитать(ЧтениеHTML);

    Reply ↓
  4. evn-zorin

    Интересные темы поднимаете, спасибо вам за XDTO, очень мало информации по ним толковой.

    Reply ↓
  5. DoctorRoza

    Да, тема очень важная!

    Reply ↓
  6. Yashazz

    Я вот сейчас, исходя из этих сведений, хочу запилить программную определялку, какие данные имеют отображение при передаче клиент-сервер и какие нет, ибо одно дело — наличие на клиенте, и другое — возможность сериализованной передачи, тут СП не помощник, а методом тыка или через Попытка-Исключение делать уже надоело.

    Reply ↓
  7. nixel

    (6) в СП у сериализуемых объектов явно прописано «Сериализуется». Так же используется ключевая фраза «Возможна передача между клиентом и сервером». Если есть возможность каким-то образом выгрузить СП в файл (не знаю), то можно просто распарсить.

    Reply ↓
  8. Yashazz

    (7) А вот и нифига, иногда написано, что передача возможна, а оно не фурычит. Хотя, возможно, это на моей 8.2.19 так, а в 8.3 всё идёт. Или наоборот. Короче, я встречался с несколькими объектами, для которых СП не актуален.

    Reply ↓
  9. Ivon
    // ищем (жаль, нет поиска по значению атрибута)

    Улыбнуло.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *