О встроенных моделях 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 не будет опубликован. Обязательные поля помечены *