Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Валидация XDTO

Валидация XDTO
Я
   lagunovartur
 
28.08.21 - 15:01
Коллеги, добрый день. Дорабатываю обработку "Выгрузка загрузка данных XML" для обмена данными между одинаковыми конфигурациями. Часто бывает нужно обменяться данными между модифицированными конфигурациями, но которые в целом одинаковы, теми данными которые возможно загрузить, иными словами я хотел бы установить свойство "Открытый" у объекта "ТипОбъектаXDTO", так что если источник отправит дополнительные свойства, то приемник пропустил бы их и не ругался. Собственно вопрос можно ли это сделать с помощью встроенного языка? Если да то был бы рад примеру кода. Если посмотреть справку, то для объекта "ТипОбъектаXDTO" свойство "Открытый" доступно только для чтения, конструктора для ПакетаXDTO я также не нашел. Также следует понимать, что пакет "http://v8.1c.ru/8.1/data/enterprise/current-config" системный и насколько я понимаю в редакторе конфигуратора недоступный.
   acht
 
1 - 28.08.21 - 16:38
(0) > Также следует понимать

Ну, надеюсь, ты сам это понимаешь? Что когда принимающая сторона будет загружать данные, она будет использовать для получения нативного объекта имено этот, нередактируемый пакет/пространство имен?
   lagunovartur
 
2 - 28.08.21 - 16:45
Я понимаю что пакет не редактируемый, у меня вопрос как получить редактируемый пакет? Также я хорошо понимаю что этот пакет автоматически обновляемый, что собственно говоря очень нужно, я не хочу как то руками это отслеживать. Только я не могу понять почему столь банальная задача не может быть решена из встроенного языка и хочу окончательно в этом убедиться. Хочу действительно понять что на лету невозможно поправить схему объекта и скормить ее сериализатору.
   lagunovartur
 
3 - 28.08.21 - 16:47
Сейчас я это вижу как очередная отвратительная ограниченность платформы, возможно я не прав.
   acht
 
4 - 28.08.21 - 16:51
(3) > отвратительная ограниченность платформы
Да и сам не красавец, что уж
   lagunovartur
 
5 - 28.08.21 - 16:51
Под редактируемым пакетом я понимаю пакет редактируемый из встроенного языка.
   ДенисЧ
 
6 - 28.08.21 - 16:52
(3) Переходи на фузины, там этой отвратительности нет.
   acht
 
7 - 28.08.21 - 16:54
(2) Это не так работает. Тебе б подучить принципы XML, пространства имен там...
   ДедМорроз
 
8 - 28.08.21 - 17:00
Он не то,что не редактируемый,а механизм позволяет загрузить из xml объект базы как есть.
И,если есть изменения,то или вообще грузить данные руками или преобразовывать в тот вид,который 1с сможет нативно прочитать.
   lagunovartur
 
9 - 28.08.21 - 17:02
А можно подробнее про принципы XML, был бы рад понять, что я тут упускаю. Ну почему например я не могу создать из встроенного языка на основе системного пакета свой, модифицировать его и отдать сериализатору, возможно предварительно подменив в файле пространство имен на свое.
   lagunovartur
 
10 - 28.08.21 - 17:04
И понятное дело я хочу это делать из языка потому как системный пакет за меня платформа обновляет.
   acht
 
11 - 28.08.21 - 17:15
(9) Создать-то свой можешь с колько влезет - хочешь с нуля, хочешь на основании системного. Хочешь - из языка, хочешь - снаружи. Вот только имя пространства имен у него должно быть другое, потому как нужное уже занято.

Укажешь в файле свое пространство имен - да ради бога. Только тебе придется во-первых еще его описание вместе с данными передавать (прям как веб-сервис со своим wsdl), а во вторых после десереализации ты получишь не нативный объект, а объект XDTO с типом из своего пространства. И можешь делать с ним все, что угодно, да.

Потому что при десереализации в нативный объект используется всегда "http://v8.1c.ru/8.1/data/enterprise/current-config" - то самое, которое занято.
   ДедМорроз
 
12 - 28.08.21 - 17:26
Есть объект ЗаписьXML,который ни про какие пространства имен ничего не знает,он умеет писать узлы xml на низком уровне,то есть элементы,атрибуты и прочие объекты.
   acht
 
13 - 28.08.21 - 17:46
(12) > который ни про какие пространства имен ничего не знает
Вот кого с утра в зеркале увидишь - тобму сказки и рассказывай. Берем хотя бы метод ЗаписатьНачалоЭлемента и внезапно видим параметр <ПолноеИмя> - полное имя записываемого элемента. Может включать префикс. Например: "nsp:weight".
А префикс у нас, это догадайся-ка что?

То, что ты хреначишь туда только локальные имена и не используешь префиксы, говорит только о том, что будет использоваться пространство имен по умолчанию, которое или определено в каком-нибудь верхнем узле как xmlns="namespaceURI". И даже если такго там нет, стается что оно пустое.

А при десереализации в нативный объект используется всегда "http://v8.1c.ru/8.1/data/enterprise/current-config". Хоть обпрыгайся рядом. И это правтльно, потому это пространство описывает метаданные, которые нельзя просто так взять и поменять по желанию левой неграмотной пятки.
   ДенисЧ
 
14 - 28.08.21 - 18:16
(13) Может включать. Как текст. Это не значит, что ЗаписьXML знает что-то об этом префиксе
   ДедМорроз
 
15 - 28.08.21 - 18:28
(13) то,что в имени объекта попадается двоеточие никак не значит,что объект записи xml знает,что префикс относится к пространству имен,а также даже не проверяет,что оно выше объявлено.
   lagunovartur
 
16 - 28.08.21 - 18:55
И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в 1с кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию и полное отсутствие ООП, но при этом сериализатор у нас будет супер жестким.
   lagunovartur
 
17 - 28.08.21 - 19:02
Ну последняя идея наверное у меня, это написать алгоритм сравнения DOM с метаданными или типами XDTO, и до чтения поправить дерево, потом скормить его.
   sikuda
 
18 - 28.08.21 - 20:24
(17) формат xml стандартизирован, XDTO это реализация 1С стандарта xml schema. Это бурно развивалось из java. Но 1С пошла своим путем и в словах acht проходит та логика которую придерживались сами 1С
   acht
 
19 - 28.08.21 - 22:05
(16) Спасибо за отличную иллюстрацию сущности 1Сника.

И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в 1с кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию.

И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в c#  кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию

И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что typescript кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию

И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что kotlin кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию

Ощущаешь?
   acht
 
20 - 28.08.21 - 22:06
(17) Удачи, попутного ветра и семь футов под килем.
   acht
 
21 - 28.08.21 - 22:09
(14) Надо проверить. Есть воспоминания развала с этими нейм с пейсами при Запись.Закрыть(), попробую повторить.
   lagunovartur
 
22 - 28.08.21 - 23:29
Я говорил о том что поведение xdto с жесткой типизацией не сильно сочетается с встроенным языком в котором типизация динамическая и с отсутствием возможности изменить поведение валидации XDTO.
   lagunovartur
 
23 - 28.08.21 - 23:37
Ну а про сущность 1сника, я не рад им быть, но так уж я попал на работу, дай бох покину я этот мир, чем собственно и занимаюсь.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.