Создание ФабрикиXDTO по НаборуСхемXML

1. DemetrKlim 130 07.09.22 17:52 Сейчас в теме
Создаю внешнюю обработку. Предполагается отправка и получение HTTP запросов, содержащих XML-текст. Есть файл шаблона (XSD).
Понятно, что можно файл шаблона загнать в макет двоичными данными и создавать Фабрику по создаваемому внешнему файлу. Это все опробовано и вполне работает если сам шаблон - корректен.
Решил попробовать обойтись без временного файла. Почему бы не взять пустой объект "СхемаXML" (создать его по пустому ДокументDOM), программными средствами заполнить и по такой заполненной схеме создать Фабрику.
Помучился - сделал. Сразу скажу, что по объекту "СхемаXML" совсем мало информации, применительно к программному созданию и заполнению. Поэтому - помучился изрядно. Итогом получаю схему. Создаю Фабрику - есть! Фабрика находит в корневых свойствах то, что мне нужно (хоть тип, хоть свойство), а вот дальше (ниже) не видит ни одного содержимого.
Для контроля вывожу схему в виде файла XML. Файл, что говорится, "красивый". Этот файл импортирую в пакетXDTO и уже по этому пакету создаю фабрику - работает! По той же СхемеXML напрямую пытаюсь создать Фабрику - не работает! Причем, ошибок никаких не выдается - все "проглатывается". Но Фабрика, созданная из СхемыXML, видит только содержимое корневого каталога этой схемы. Информация ниже в Схеме не определяется. Кажется, перепробовал все - итог неудачный.
В этой связи вопрос - кто-то пробовал программными средствами создать СхемуXML для дальнейшего создании Фабрики по ней?
(конечно же СхемаXML помещалась в НаборСхемXML перед созданием Фабрики)
Спасибо за ответы!
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 07.09.22 18:20 Сейчас в теме
(1)
В этой связи вопрос - кто-то пробовал программными средствами создать СхемуXML для дальнейшего создании Фабрики по ней?

Такое используется в БГУ при загрузке бюджетной классификации.

ЧтениеXML = Новый ЧтениеXML;
 ЧтениеXML.УстановитьСтроку(ПолучитьМакет(ИмяМакета).ПолучитьТекст());
 
 ПостроительDOM = Новый ПостроительDOM;
 ДокументСхемыDOM = ПостроительDOM.Прочитать(ЧтениеXML);
 
 ПостроительСхемы = Новый ПостроительСхемXML;
 СхемаXML = ПостроительСхемы.СоздатьСхемуXML(ДокументСхемыDOM);

 НаборСхем = Новый НаборСхемXML;
  НаборСхем.Добавить(СхемаXML);
  
  Фабрика = Новый ФабрикаXDTO(НаборСхем);
  СвойстваКлассификатораXDTO = Фабрика.ПрочитатьXML(ЧтениеXMLСвойств,
   Фабрика.Тип("urn:schemas-1c-ru:budget:classification/2011/properties", "ClassifierProperties"));
Показать
3. DemetrKlim 130 07.09.22 18:28 Сейчас в теме
(2) Спасибо! Прямо сейчас попробую!
У меня была мысль вообще обойтись без макетов, но это уже всяко лучше, чем создавать временный файл.
8. DemetrKlim 130 07.09.22 19:54 Сейчас в теме
(2) Итак, решение состоялось - спасибо за идею, без которой я уже не двинулся бы дальше (устал уже!). Я обошелся-таки БЕЗ макета!
И вот как это выглядит.
1. Создаю СхемуXML из пустого ДокументаDOM, который имеет только соответствия пространств имен и значения атрибутов для корневого элемента "xs:shema"
2. Заполняю объект СхемаXML его методами. Это работает.
3. В заполненном СхемаXML выполняю метод "ОбновитьЭлементDOM()".
4. Из значения свойства "СхемаXML.ДокументDOM" беру ДокументDOM и на его основе заново создаю СхемуXML.
После выполнения этого "обряда" на базе полученной таким образом схемы создается работоспособная Фабрика.
Почему не создается Фабрика сразу - я так и не понял, хотя ДокументDOM, описывающий схему XSD, берется из этой же СхемыXML и он "дает жизнь" уже работоспособной схеме. Что-то не так в консерватории)
Еще раз спасибо!
Sashares; +1 Ответить
6. Sashares 33 07.09.22 19:07 Сейчас в теме
(1)
Этот файл импортирую в пакетXDTO и уже по этому пакету создаю фабрику - работает!

Еще вариант - выгрузить модель XDTO в макет и использовать ее.
подробнее про данный способ тут - https://infostart.ru/1c/articles/171019/
7. DemetrKlim 130 07.09.22 19:41 Сейчас в теме
(6) Весь нюанс в том, что обработка - внешняя. ПакетXDTO решил бы все проблемы, если бы я мог впихнуть его в конфигурацию. Увы, не могу.
9. Sashares 33 07.09.22 20:24 Сейчас в теме
(7) Вы посмотрите статью - создается пустая конфигурация, в нее загружается пакет xdto, он выгружается как модель в макет и макет используется во внешней обработке.
10. DemetrKlim 130 07.09.22 20:28 Сейчас в теме
(9) Было интересно обойтись без макетов)
4. DemetrKlim 130 07.09.22 18:30 Сейчас в теме
Хотя "творческий зуд" остался) Ведь есть же объект "СхемаXML", почему же не работать с ним? До ума не довели, что ли?....
5. DemetrKlim 130 07.09.22 19:06 Сейчас в теме
(2) Да, такой вариант работает - спасибо! В этой связи пришла мысль попробовать еще один вариант, чтобы окончательно исчерпать тему. Позже отпишу о результате.
Оставьте свое сообщение
Вакансии
Консультант 1С
Москва
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Аналитик 1C
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Начальник отдела программирования
Уфа
зарплата от 125 000 руб.
Полный день

Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день