|
Валидация XDTO | ☑ | ||
---|---|---|---|---|
0
lagunovartur
28.08.21
✎
15:01
|
Коллеги, добрый день. Дорабатываю обработку "Выгрузка загрузка данных XML" для обмена данными между одинаковыми конфигурациями. Часто бывает нужно обменяться данными между модифицированными конфигурациями, но которые в целом одинаковы, теми данными которые возможно загрузить, иными словами я хотел бы установить свойство "Открытый" у объекта "ТипОбъектаXDTO", так что если источник отправит дополнительные свойства, то приемник пропустил бы их и не ругался. Собственно вопрос можно ли это сделать с помощью встроенного языка? Если да то был бы рад примеру кода. Если посмотреть справку, то для объекта "ТипОбъектаXDTO" свойство "Открытый" доступно только для чтения, конструктора для ПакетаXDTO я также не нашел. Также следует понимать, что пакет "http://v8.1c.ru/8.1/data/enterprise/current-config" системный и насколько я понимаю в редакторе конфигуратора недоступный.
|
|||
1
acht
28.08.21
✎
16:38
|
(0) > Также следует понимать
Ну, надеюсь, ты сам это понимаешь? Что когда принимающая сторона будет загружать данные, она будет использовать для получения нативного объекта имено этот, нередактируемый пакет/пространство имен? |
|||
2
lagunovartur
28.08.21
✎
16:45
|
Я понимаю что пакет не редактируемый, у меня вопрос как получить редактируемый пакет? Также я хорошо понимаю что этот пакет автоматически обновляемый, что собственно говоря очень нужно, я не хочу как то руками это отслеживать. Только я не могу понять почему столь банальная задача не может быть решена из встроенного языка и хочу окончательно в этом убедиться. Хочу действительно понять что на лету невозможно поправить схему объекта и скормить ее сериализатору.
|
|||
3
lagunovartur
28.08.21
✎
16:47
|
Сейчас я это вижу как очередная отвратительная ограниченность платформы, возможно я не прав.
|
|||
4
acht
28.08.21
✎
16:51
|
(3) > отвратительная ограниченность платформы
Да и сам не красавец, что уж |
|||
5
lagunovartur
28.08.21
✎
16:51
|
Под редактируемым пакетом я понимаю пакет редактируемый из встроенного языка.
|
|||
6
ДенисЧ
28.08.21
✎
16:52
|
(3) Переходи на фузины, там этой отвратительности нет.
|
|||
7
acht
28.08.21
✎
16:54
|
(2) Это не так работает. Тебе б подучить принципы XML, пространства имен там...
|
|||
8
ДедМорроз
28.08.21
✎
17:00
|
Он не то,что не редактируемый,а механизм позволяет загрузить из xml объект базы как есть.
И,если есть изменения,то или вообще грузить данные руками или преобразовывать в тот вид,который 1с сможет нативно прочитать. |
|||
9
lagunovartur
28.08.21
✎
17:02
|
А можно подробнее про принципы XML, был бы рад понять, что я тут упускаю. Ну почему например я не могу создать из встроенного языка на основе системного пакета свой, модифицировать его и отдать сериализатору, возможно предварительно подменив в файле пространство имен на свое.
|
|||
10
lagunovartur
28.08.21
✎
17:04
|
И понятное дело я хочу это делать из языка потому как системный пакет за меня платформа обновляет.
|
|||
11
acht
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 на низком уровне,то есть элементы,атрибуты и прочие объекты.
|
|||
13
acht
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 знает,что префикс относится к пространству имен,а также даже не проверяет,что оно выше объявлено.
|
|||
16
lagunovartur
28.08.21
✎
18:55
|
И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в 1с кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию и полное отсутствие ООП, но при этом сериализатор у нас будет супер жестким.
|
|||
17
lagunovartur
28.08.21
✎
19:02
|
Ну последняя идея наверное у меня, это написать алгоритм сравнения DOM с метаданными или типами XDTO, и до чтения поправить дерево, потом скормить его.
|
|||
18
sikuda
28.08.21
✎
20:24
|
(17) формат xml стандартизирован, XDTO это реализация 1С стандарта xml schema. Это бурно развивалось из java. Но 1С пошла своим путем и в словах acht проходит та логика которую придерживались сами 1С
|
|||
19
acht
28.08.21
✎
22:05
|
(16) Спасибо за отличную иллюстрацию сущности 1Сника.
И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в 1с кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию. И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что в c# кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что typescript кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию И всеравно я не понимаю от чего я должен быть заложником жесткой типизации, потому что kotlin кто то решил что так надо, смотрим на встроенный язык и видим динамическую типизацию Ощущаешь? |
|||
20
acht
28.08.21
✎
22:06
|
(17) Удачи, попутного ветра и семь футов под килем.
|
|||
21
acht
28.08.21
✎
22:09
|
(14) Надо проверить. Есть воспоминания развала с этими нейм с пейсами при Запись.Закрыть(), попробую повторить.
|
|||
22
lagunovartur
28.08.21
✎
23:29
|
Я говорил о том что поведение xdto с жесткой типизацией не сильно сочетается с встроенным языком в котором типизация динамическая и с отсутствием возможности изменить поведение валидации XDTO.
|
|||
23
lagunovartur
28.08.21
✎
23:37
|
Ну а про сущность 1сника, я не рад им быть, но так уж я попал на работу, дай бох покину я этот мир, чем собственно и занимаюсь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |