Имя: Пароль:
1C
1С v8
Валидация 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сника, я не рад им быть, но так уж я попал на работу, дай бох покину я этот мир, чем собственно и занимаюсь.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс