|
Чем можно получить такую структуру xml? | ☑ | ||
---|---|---|---|---|
0
mikecool
16.08.11
✎
10:32
|
<?xml version="1.0"?>
-<CatalogObject.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"> <IsFolder>true</IsFolder> <Ref>ab457e53-ba82-11db-83c1-000feaf35530</Ref> <DeletionMark>false</DeletionMark> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code>00000000000000060329</Code> <Description>@Активное оборудование</Description> <БазоваяЕдиницаХранения>00000000-0000-0000-0000-000000000000</БазоваяЕдиницаХранения> </CatalogObject.усНоменклатура> обычная ЗаписьXML или что другое? |
|||
1
mikecool
16.08.11
✎
10:33
|
каким образом получается <CatalogObject.усНоменклатура?
начало элемента, но какого? |
|||
2
Vovan1975
16.08.11
✎
10:35
|
я бы посмотрел на сериализацию
|
|||
3
Vovan1975
16.08.11
✎
10:36
|
да это обычная ЗаписьXML, просто сериализация она какбы сверху прикручивается, посмотри СП
|
|||
4
mikecool
16.08.11
✎
10:37
|
(3) спс, ща покопаю
|
|||
5
mikecool
16.08.11
✎
10:39
|
гм, ни разу ен пользовался сериализатором, пришла пора ))
|
|||
6
Kom-off
16.08.11
✎
10:43
|
(1) Вот этого: ab457e53-ba82-11db-83c1-000feaf35530
|
|||
7
Kom-off
16.08.11
✎
10:44
|
(6)+ или элемента с кодом "00000000000000060329"
|
|||
8
mikecool
16.08.11
✎
11:08
|
ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("Номенклатура"));
Для Каждого СтрокаВыборки Из Выборка Цикл СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СтрокаВыборки.Ссылка, "CatalogObject.Номенклатура", "http://v8.1c.ru/8.1/data-composition-system/result"); Для Каждого Колонка Из Выборка.Колонки Цикл ЗаписьXML.ЗаписатьАтрибут(Колонка.Имя, XMLСтрока(СтрокаВыборки[Колонка.Имя])); КонецЦикла; КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); ругается на ЗаписатьАтрибут - "Ошибочный порядок записи XML " Как тогда прицепить атрибуты? |
|||
9
mikecool
16.08.11
✎
11:09
|
или не париться и пихать сериализатору объекты справочника?
|
|||
10
Defender aka LINN
16.08.11
✎
11:10
|
(8) Реквизиты - у объекта, а не ссылки.
|
|||
11
mikecool
16.08.11
✎
11:13
|
(10) я не могу записать атрибутом произвольное значение?
|
|||
12
Defender aka LINN
16.08.11
✎
11:14
|
(11) Можешь. Но тогда и пиши весь XML так.
|
|||
13
mikecool
16.08.11
✎
11:14
|
+11 ибо мне не нада выгружать все реквизиты, а только определенные
|
|||
14
mikecool
16.08.11
✎
11:15
|
(12) ясно
|
|||
15
DmitrO
16.08.11
✎
11:23
|
Это XDTO сериализация объекта справочника усНоменклатура некой конфигурации.
Я так понял стоит задача выгрузить элемент из своей конфигурации в ту. Для этого надо: 1)выгрузить из той конфигурации схему http://v8.1c.ru/8.1/data/enterprise/current-config в файл xsd. 2)У себя создать фабрику. Новую, а не своей конфы. 3)Загрузить в нее схему из файла. 4)Используя эту фабрику создать объект XDTO соответствующий объекту справочника усНоменклатура той конфы, заполнить его данными из соответствующего объекта своей конфы. 5)Записать его в файл xml, используя сериализатор фабрики созданной в (2). |
|||
16
mikecool
16.08.11
✎
11:28
|
(15) оО, вротмненоги (((
такого еще не приходилось делать щас буду пробовать, спасибо тото думаю - че ха хсд мне в почте привалило |
|||
17
DmitrO
16.08.11
✎
11:33
|
а ты загляни в него, станет понятнее, там схема той конфы.
|
|||
18
mikecool
16.08.11
✎
11:40
|
(17) ага, уже понял ))
|
|||
19
mikecool
16.08.11
✎
11:42
|
я правильно понял - надо создавать хдто пакет в конфиге?
или достаточно Новый ФабрикаХДТО? |
|||
20
Scooter
16.08.11
✎
11:48
|
эта тема мне интересна
|
|||
21
mikecool
16.08.11
✎
11:48
|
(20) давно уже есть кнопка Закладка ))
|
|||
22
mikecool
16.08.11
✎
11:51
|
загрузил себе хсд в качестве пакета в конфигу
а как его указывать при создании фабрики? как обратиться к нему? |
|||
23
DmitrO
16.08.11
✎
11:51
|
нее, в свою конфигурацию ты эту схему не засовывай (пакет XDTO в дереве метаданных не создавай), это не нужно.
Чо щас от всех в свою конфу засовывать (?), аморально это. :) В рантайме все сделай. Да, Новый ФабрикаХДТО... |
|||
24
mikecool
16.08.11
✎
11:53
|
(23) а какой синтаксис конструктора по имени файла фабрики?
|
|||
25
mikecool
16.08.11
✎
11:53
|
да и в принципе - с этим клиентом работать будем плотно и долго, можно и загрузить
|
|||
26
mikecool
16.08.11
✎
11:57
|
ни одного примера в упп с фабрикой (
|
|||
27
DmitrO
16.08.11
✎
11:57
|
(25)дык, дело в том что http://v8.1c.ru/8.1/data/enterprise/current-config это пространство имен есть в каждой конфе(!) в твоей оно тоже есть, но там описаны объекты твоей конфы. Это описание объектов текущей конфигурации. Какбы конфликт получится.
Тут смысл обмена получается в том, что ты должен создать такой xml файл, чтобы он той конфой воспринимался как родной. |
|||
28
mikecool
16.08.11
✎
11:59
|
(27) такое пространство и в 8.2 есть?
дык я и хочу создавать фабрику на основе загруженного пакета неужели не получится? мне удобнее хранить хсд пакетом, что бы не шариться, не искать его по диску |
|||
29
DmitrO
16.08.11
✎
12:07
|
ааа, я немного не то сказал.. у них как-то странно сделано..
я забыл уже просто.. короче надо использовать СоздатьФабрикуXDTO (глобальный контекст) |
|||
30
DmitrO
16.08.11
✎
12:09
|
передавай в него путь к файлу схемы, и будет у тебя фабрика с типами объектов той конфы
|
|||
31
DmitrO
16.08.11
✎
12:10
|
вот, блин, выгребнулись, вместо конструктора, сделали метод глобального контекста..
|
|||
32
mikecool
16.08.11
✎
12:10
|
(30) а если таки я загружу в пакет, как тогда создавать?
|
|||
33
mikecool
16.08.11
✎
12:10
|
(31) да пипец )))
|
|||
34
mikecool
16.08.11
✎
12:12
|
что то не вижу создание фабрики по пакету (
|
|||
35
DmitrO
16.08.11
✎
12:14
|
а сериализатор создавай Новый СериализаторXDTO(<Фабрика>)
(32) тогда можно просто конструктором и указать пакет в который ты загрузил схему. Вторым параметром конструктора массив пакетов передается же. |
|||
36
mikecool
16.08.11
✎
12:15
|
(35) спс, пипец намутили )))
|
|||
37
mikecool
16.08.11
✎
12:16
|
а, я ж так и не вкурил, как создать КоллекцияПакетовXDTO по имеющимся (
через Метаданные? |
|||
38
DmitrO
16.08.11
✎
12:44
|
Вообще говоря, передача таких схем типа http://v8.1c.ru/8.1/data/enterprise/current-config и тем более добавление их в свои конфигурации это некошерно и не готично.
Это дает единственный плюс: удобно загружать. Просто читаешь объекты подряд из xml файла сериализатором в простом цикле и пишешь сразу, т.к. они создаются уже заполненные. А минусы: 1.Если они изменят состав или тип реквизитов этого справочника, они должны будут выслать тебе новую схему, и ты будешь переписывать свою выгрузку. 2.Если схему ты засунул в метаданные (пакет XDTO), то ты еще и попадаешь на изменение своей конфигурации. |
|||
39
mikecool
16.08.11
✎
12:45
|
"попадаешь на изменение своей конфигурации." не страшно
вот никак не получается считать созданный пакет как пакет ибо как объект метаданных он нафик не нужен |
|||
40
mikecool
16.08.11
✎
12:50
|
к созданному в конфиге пакету я пока добрался только через метаданные
неужели у них нет менеджера? |
|||
41
DmitrO
16.08.11
✎
12:55
|
возможно так:
В родной фабрике (атрибут глобального контекста ФабрикаXDTO) всегда есть все пакеты, добавленные в метаданные, и они доступны через свойство фабрики Пакеты. А вторым параметром можно передавать не коллекцию пакетов, а массив пакетов. |
|||
42
DmitrO
16.08.11
✎
13:07
|
Кстати да. :)
Такое пространство имен добавлять в метаданные вообще нельзя :) Т.к. добавить ты сможешь только одно(!). Все последующие добавления обновляют старое. Имена пространств имен должны быть уникальными. Я вообще удивляюсь почему оно добавляется.. Ведь всегда есть же еще и родное с тем же именем. |
|||
43
DmitrO
16.08.11
✎
13:36
|
Попробовал щас добавить пакет с таким именем пространства имен.
Получается фигня. Пакет есть, но содержит он в себе СВОЮ РОДНУЮ схему (текущей конфы), а не ту которая задана в метаданных пакетом. Т.о. родная всегда вытесняет добавленную. Если изменить имя пространства имен, тогда все нормально, два разных пакета, родной с этим именем и добавленный с измененным именем и своими объектами. При таком положении дел, добавляться вообще не должно. Считаю это багом. |
|||
44
mikecool
16.08.11
✎
13:46
|
(43) у мну 8.2, потому нормально добавилась
|
|||
45
DmitrO
16.08.11
✎
13:53
|
То что в 8.2 это тут непричем. В 8.2, вплоть до 14го релиза, СХЕМА С РОДНЫМИ МЕТАДАННЫМИ ИМЕЕТ ИМЕННО ТАКОЕ ИМЯ http://v8.1c.ru/8.1/data/enterprise/current-config. Там есть другие схемы начинающиеся так http://v8.1c.ru/8.2.... но там описываются объекты появившиеся в платформе именно в 8.2, и это не объекты метаданных (справочники, документы и т.п.).
По своему смыслу, это такая же операция как например создать предопределенный элемент справочника с именем ПустаяСсылка, или реквизит табличной части с именем НомерСтроки. |
|||
46
mikecool
16.08.11
✎
13:54
|
вроде как разобрался с фабрикой через
Фабрика = Новый ФабрикаXDTO(, ФабрикаXDTO.Пакеты.Получить("http://v8.1c.ru/8.1/data/enterprise/current-config")); |
|||
47
mikecool
16.08.11
✎
13:54
|
(45) т.е. проще таки создавать из файла?
тогда надо будет завести хранилище для хранения этого файла... |
|||
48
mikecool
16.08.11
✎
13:56
|
просмотрел щас пакет - ни одного типа из моей конфиги в нем нет
|
|||
49
DmitrO
16.08.11
✎
13:57
|
(46) а ты щас по-создавай типы из этой фабрики? есть там тип CatalogObject.усНоменклатура?
|
|||
50
mikecool
16.08.11
✎
14:00
|
(49) щас собираюсь попробовать
в пакете точно есть |
|||
51
DmitrO
16.08.11
✎
14:06
|
(47)ну это смотря на сколько широко он будет использоваться. Если только в обработке выгружающей файл, то я бы сложил ресурсом (макетом типа ДвоичныеДанные) в саму обработку да и все.
|
|||
52
mikecool
16.08.11
✎
14:20
|
Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура") - неопределено
видать не доступно (51) блин, а ведь это вариант! |
|||
53
mikecool
16.08.11
✎
14:28
|
+52 теперь не пойму ни разу - как создать фабрику из файла )))
|
|||
54
DmitrO
16.08.11
✎
14:29
|
Фабрика = СоздатьФабрикуXDTO(ИмяФайлаСхемы);
|
|||
55
mikecool
16.08.11
✎
14:31
|
(54) блин, я тормоз ))
это уже проходили спс |
|||
56
mikecool
16.08.11
✎
14:55
|
теперь остался вопрос - Используя эту фабрику создать объект XDTO соответствующий объекту справочника усНоменклатура той конфы, заполнить его данными из соответствующего объекта своей конфы.
как таки его заполнить? )) |
|||
57
mikecool
16.08.11
✎
14:57
|
Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура"), "CatalogRef.усНоменклатура")
получил ЗначениеXDTO, а никак не объект |
|||
58
mikecool
16.08.11
✎
14:59
|
это же значение как то надо заполнить?
|
|||
59
DmitrO
16.08.11
✎
15:15
|
(57)это ты ссылку создал.
ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.ОткрытьФайл(ИмяФайлаДанных); ЗаписьXML.ЗаписатьОбъявлениеXML(); Фабрика = СоздатьФабрикуXDTO(ИмяФайлаСхемы); Сериализатор = Новый СериализаторXDTO(Фабрика); //Создание ОбъектНоменклатура = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура")); //заполнение ОбъектНоменклатура.IsFolder = Выб.ЭтоГруппа; ОбъектНоменклатура.Ref = Выб.Ссылка; //или XMLСтрока(Выб.Ссылка) ОбъектНоменклатура.Description = Выб.Наименование; ... //Запись в файл Сериализатор.ЗаписатьXML(ЗаписьXML, ОбъектНоменклатура); ЗаписьXML.Закрыть(); |
|||
60
DmitrO
16.08.11
✎
15:21
|
тока странно как-то, целый файл с одним элементом :)
|
|||
61
DmitrO
16.08.11
✎
15:23
|
наверно ты че-то не договариваешь, там в файле наверно есть корневой элемент, в который уже вложены элементы "CatalogObject.усНоменклатура". Обычно так делается.
|
|||
62
mikecool
16.08.11
✎
15:33
|
(61) эээ, чета я уже не догоняю )
|
|||
63
mikecool
16.08.11
✎
15:34
|
(59) блин, думал автоматом как нить заполнить, типа ЗаполнитьЗначенияСвойств )))
|
|||
64
mikecool
16.08.11
✎
15:34
|
спс, щас буду пробовать
|
|||
65
DmitrO
16.08.11
✎
15:37
|
(63) ну пробуй, чо... если в выборке поля запроса назвать так как надо, может и получится.
|
|||
66
mikecool
16.08.11
✎
15:43
|
Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура"), "CatalogRef.усНоменклатура");
ЗаполнитьЗначенияСвойств(Объект, СтрокаВыборки.Ссылка); не работало - щас проверю название полей, может и взлетит |
|||
67
DmitrO
16.08.11
✎
15:49
|
ЗаполнитьЗначенияСвойств(Объект, СтрокаВыборки.Ссылка);
ну так конечно же не получится, названия полей же разные (в источнике Наименование, а в приемнике Description) |
|||
68
mikecool
16.08.11
✎
15:50
|
(67) у меня есть выборка запроса, так что алиасы прописать могу
|
|||
69
DmitrO
16.08.11
✎
15:51
|
давно пора
|
|||
70
mikecool
17.08.11
✎
11:56
|
а вот как бы нифига не получилось
В описании <xs:complexType name="CatalogObject.усНоменклатура"> <xs:sequence> <xs:element name="IsFolder" type="xs:boolean"/> <xs:element name="Ref" type="tns:CatalogRef.усНоменклатура"/> <xs:element name="DeletionMark" type="xs:boolean"/> <xs:element name="Parent" type="tns:CatalogRef.усНоменклатура"/> пытаюсь записать Объект.Ref = СтрокаВыборки.Ref; но - Поле объекта не обнаружено (Ref) и действиетльно у записи вообще ничего нет |
|||
71
mikecool
17.08.11
✎
12:03
|
+70 соотв-но и ЗаплнитьЗначенияСвойств не отрабатывает
|
|||
72
mikecool
17.08.11
✎
12:13
|
что получается в Объекте
Объект ЗначениеXDTO ЗначениеXDTO Значение "CatalogObject.усНоменклатура" Строка ЛексическоеЗначение "CatalogObject.усНоменклатура" Строка Список Неопределено а где же реквизиты объекта, где его свойства я спрашиваю? |
|||
73
Aprobator
17.08.11
✎
12:14
|
а чо КД не катит?
|
|||
74
Aprobator
17.08.11
✎
12:14
|
кстати и методику работы с xml можно глянуть в стандартных обработках выгрузки.
|
|||
75
mikecool
17.08.11
✎
12:15
|
(73) я ни разу ею не пользовался (
|
|||
76
Aprobator
17.08.11
✎
12:16
|
(75) ну так пора начинать.
|
|||
77
Aprobator
17.08.11
✎
12:17
|
тут спецов по КД больше, чем ваятелей xml напрямую.
|
|||
78
Aprobator
17.08.11
✎
12:18
|
конфа сама есть на ИТС. Есть там и демо и описание работы. Как на ИТС, так и сам хелп конфы очень неплохой.
|
|||
79
mikecool
17.08.11
✎
12:19
|
(76) рубить надо, точить некогда )
|
|||
80
mikecool
17.08.11
✎
12:19
|
надо сделать тупые выгрузки 4 справочников, может напрямую быстрее выйдет )
|
|||
81
Aprobator
17.08.11
✎
12:22
|
минут 30 в КД. А напрямую - тащи через mxl и не компосируй людям мозги.
|
|||
82
mikecool
17.08.11
✎
12:22
|
(81) люди эти прислали мне схему - приходится пользоваться (
|
|||
83
mikecool
17.08.11
✎
12:22
|
я с хмл-ем дружу плохо, не нравится как то он мне, вот и парюсь
|
|||
84
mikecool
17.08.11
✎
12:24
|
может заморочка в том, что
Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogRef.усНоменклатура"), "CatalogObject.усНоменклатура"); когда указывается тип - то ссылка используется(CatalogRef), а кгда объект - то объект(CatalogObject) ? |
|||
85
Aprobator
17.08.11
✎
12:26
|
(82) опиши задачу нормально. А то задал вопрос по решению неизвестно чего. Надо перегрузить справочники - так и скажи из конфы А в конфу Б надо перекинуть N справочников. Что посоветуете.
|
|||
86
Kom-off
17.08.11
✎
12:26
|
(80) Что-то я просмотрел или не было информации: тебе выгрузки -загрузки из идентичных баз нужны?
|
|||
87
mikecool
17.08.11
✎
12:27
|
(86) не, не идентичные, но у меня есть схема принимающей стороны
мне нужно получить выгрузку типа <?xml version="1.0"?> -<CatalogObject.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"> <IsFolder>true</IsFolder> <Ref>ab457e53-ba82-11db-83c1-000feaf35530</Ref> <DeletionMark>false</DeletionMark> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code>00000000000000060329</Code> <Description>@Активное оборудование</Description> <БазоваяЕдиницаХранения>00000000-0000-0000-0000-000000000000</БазоваяЕдиницаХранения> </CatalogObject.усНоменклатура> кагбе все сделаю просто хмл-ем, но как добавляются приписки типа "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"" и т.п.? |
|||
88
mikecool
17.08.11
✎
12:28
|
+87 у меня это получилось сделать с пом сериализатора и фабрики хдто
|
|||
89
mikecool
17.08.11
✎
12:29
|
щас тупо получилось
<CatalogRef.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config">CatalogRef.усНоменклатура</CatalogRef.усНоменклатура> <CatalogRef.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config">CatalogRef.усНоменклатура</CatalogRef.усНоменклатура> на CatalogRef не смотрите - это я ошибкой при создании объекта указал |
|||
90
Aprobator
17.08.11
✎
12:30
|
(87) запроси конфигурацию принимающей стороны и делай через КД. Сэкономишь время и нервы. Всяко быстрее, чем XML руками ковырять.
|
|||
91
mikecool
17.08.11
✎
12:31
|
(90) да с ковырянием руками проблем нет, нарисовал уже, но столкнулся с этими комментами из (87)
|
|||
92
mikecool
17.08.11
✎
12:33
|
конвертацию еще релиз найти надо ((
|
|||
93
Aprobator
17.08.11
✎
12:34
|
сайт поддержки юзверей тебе в помощь.
|
|||
94
ask76
17.08.11
✎
12:56
|
(87)
ЗаписьXML.ЗаписатьОбъявлениеXML(); Это? |
|||
95
mikecool
17.08.11
✎
13:26
|
(94) это припишется только в заголовке
а туточки требуется - в каждом элементе |
|||
96
mikecool
17.08.11
✎
13:32
|
ааааа, я тупой
говорили мне в (59) - делай правильно |
|||
97
DmitrO
17.08.11
✎
13:34
|
(84) ну конечно же проблема в том что ты создаешь объект не того типа
надо так: Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура"), "CatalogObject.усНоменклатура"); а проще вообще так: Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура")); |
|||
98
mikecool
17.08.11
✎
13:38
|
(97) на первый способ, на котором я бился, ругается на второй параметр в функции Тип - указание типа почему то только для Ссылки проходило(Ref), при указании "Object" - ругательство на второй параметр
второй способ создал объект, так что шас пробую его заполнять |
|||
99
DmitrO
17.08.11
✎
13:40
|
(95) Объявления пространств имен в каждом элементе писать не обязательно. Достаточно написать их один раз в родительском элементе xml.
На той стороне все загрузится отлично. Более того, их ЛУЧШЕ писать один раз в родительском элементе, т.к. файл получается меньше и понятнее. В каждом элементе их пишут от неграмотности. |
|||
100
Grusswelle
17.08.11
✎
13:46
|
Фто? Сто! :-)
|
|||
101
mikecool
17.08.11
✎
13:56
|
(99) я в них уперся - так как делаю от примера
уже столько раз упирался в принимающую сторону, где не могут обработать пустое значение, преобразовать тип числа и прочее |
|||
102
mikecool
17.08.11
✎
13:59
|
(99) при еще раз - как объявить пространство имен в родительском элементе?
ЗаписатьОбъявлениеXML дает только <?xml version="1.0"?> или я недосмотрел чегото? |
|||
103
mikecool
17.08.11
✎
14:01
|
+102 не про это
Вариант синтаксиса: Запись начала элемента с локальным именем и URI пространства имен Синтаксис: ЗаписатьНачалоЭлемента(<ЛокальноеИмя>, <URIПространстваИмен>) |
|||
104
Aprobator
17.08.11
✎
15:30
|
млин ну найди ты универсальную обработку переноса данных и посмотри как она работает. На живом, так сказать, примере.
|
|||
105
DmitrO
17.08.11
✎
15:31
|
(102) чтобы пространства имен не прописывались в каждом элементе надо делать так:
ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.ОткрытьФайл(ИмяФайлаДанных); ЗаписьXML.ЗаписатьОбъявлениеXML(); //задаем пространства имен, если этого не сделать они будут прописываться в каждом сериализуемом объекте ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); //пишем корневой элемент xml файла, он и будет родительским в котором и определяться все заданные пространства имен ЗаписьXML.ЗаписатьНачалоЭлемента("Данные"); //... тут цикл с записью всех элементов CatalogObject.усНоменклатура и/или каких либо других объектов данных ЗаписьXML.ЗаписатьКонецЭлемента(); //закрываем корневой элемент xml файла ЗаписьXML.Закрыть(); |
|||
106
mikecool
17.08.11
✎
15:32
|
(105) спс
(104) да ну тебя )) говорю же - некогда точить, пилить надо тут херачу сразу три дела одновременно, ибо все надо было сделать еще вчера )) |
|||
107
DmitrO
17.08.11
✎
15:34
|
ой, в (105) не правильно, надо сначало начало элемента записать, вобщем так:
ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.ОткрытьФайл(ИмяФайлаДанных); ЗаписьXML.ЗаписатьОбъявлениеXML(); //пишем корневой элемент xml файла, он и будет родительским в котором и определяться все заданные пространства имен ЗаписьXML.ЗаписатьНачалоЭлемента("Данные"); //задаем пространства имен, если этого не сделать они будут прописываться в каждом сериализуемом объекте ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); //... тут цикл с записью всех элементов CatalogObject.усНоменклатура и/или каких либо других объектов данных ЗаписьXML.ЗаписатьКонецЭлемента(); //закрываем корневой элемент xml файла ЗаписьXML.Закрыть(); |
|||
108
mikecool
17.08.11
✎
15:36
|
(107) у меня не получается
Сериализатор.Фабрика.ЗаписатьXML(ЗаписьXML, Объект); если нет открытого элемента т.е. должен так ЗаписатьНачалоЭлемента() цикл Сериализатор.Фабрика.ЗаписатьXML конеццикла ЗаписатьКонецЭлемента() без начала и конца никак не обойтись? |
|||
109
mikecool
17.08.11
✎
15:37
|
+108 одним циклом
|
|||
110
DmitrO
17.08.11
✎
15:38
|
(108) ну конечно, по спецификации xml корневой элемент в xml файле может быть только один.
|
|||
111
Aprobator
17.08.11
✎
15:39
|
(106) методом научного тыка без образца будет еще дольше. Впрочем дело хозяйское - точи.
|
|||
112
mikecool
17.08.11
✎
15:39
|
(110) опять же в присланном примере только один объект номенклатуры и нет корневого узла (
|
|||
113
Aprobator
17.08.11
✎
15:39
|
всего то 2 - й день пошел.
|
|||
114
mikecool
17.08.11
✎
15:40
|
пример такой
<?xml version="1.0"?> -<CatalogObject.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"> <IsFolder>true</IsFolder> <Ref>ab457e53-ba82-11db-83c1-000feaf35530</Ref> <DeletionMark>false</DeletionMark> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code>00000000000000060329</Code> <Description>@Активное оборудование</Description> <БазоваяЕдиницаХранения>00000000-0000-0000-0000-000000000000</БазоваяЕдиницаХранения> </CatalogObject.усНоменклатура> |
|||
115
mikecool
17.08.11
✎
15:40
|
(113) редиска )
|
|||
116
mikecool
17.08.11
✎
15:41
|
+114 такое ощущение, что это простая ЗаписьХМЛ
|
|||
117
mikecool
17.08.11
✎
15:44
|
имея код
получаю <?xml version="1.0" encoding="UTF-8"?> -<CatalogRef.усНоменклатура xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"> -<CatalogObject.усНоменклатура> <IsFolder>true</IsFolder> <Ref>a1ca969d-a7cb-11dc-a89f-003048796049</Ref> <DeletionMark>false</DeletionMark> <Parent>00000000-0000-0000-0000-000000000000</Parent> <Code>00000000492</Code> <Description>Наименование1</Description> <БазоваяЕдиницаХранения/> </CatalogObject.усНоменклатура> -<CatalogObject.усНоменклатура> <IsFolder>true</IsFolder> <Ref>b9e4b4d4-a7cf-11dc-a89f-003048796049</Ref> <DeletionMark>false</DeletionMark> <Parent>8944ab18-a7cf-11dc-a89f-003048796049</Parent> <Code>00000003605</Code> <Description>Наименование2</Description> <БазоваяЕдиницаХранения/> </CatalogObject.усНоменклатура> |
|||
118
Aprobator
17.08.11
✎
15:44
|
сам ты редиска. *полез конфигуратором в КД*
|
|||
119
DmitrO
17.08.11
✎
15:46
|
(112) дак вот я тоже удивлен этим. Я не знаю что они имели в виду присланным примером, но так не бывает. Можно подумать что им надо каждый элемент в отдельном файле присылать. :)
|
|||
120
mikecool
17.08.11
✎
15:47
|
(118) не надо, думаю остановиться на варианте (117)
|
|||
121
DmitrO
17.08.11
✎
15:49
|
(117)ЗаписьXML.ЗаписатьНачалоЭлемента("Данные"); //или придумай любое другое название корневого элемента
|
|||
122
mikecool
17.08.11
✎
15:49
|
(121) ага, я уже подумываю что "корнями" будут "разделы" - Номенклатура, единицы и т.п.
|
|||
123
DmitrO
17.08.11
✎
15:52
|
(122) да что ты будешь делать...
ты где нибудь видел xml файлы где бы было несколько корней? ТАКИХ НЕ БЫВАЕТ! Он может быть только один. |
|||
124
mikecool
17.08.11
✎
15:53
|
(123) ну ладно ))) не буду )))
|
|||
125
mikecool
17.08.11
✎
15:54
|
а ЗаполнитьЗначенияСвойств не проходил изза того, что значения подстановки надо было преобразовывать в хмлстроку
|
|||
126
DmitrO
17.08.11
✎
15:55
|
(125) ну там не для всех типов просто проходит видимо..
|
|||
127
mikecool
17.08.11
✎
15:57
|
это что курить надо было, чтобы назвать справочник усКлассыЕдиницХранения ?
|
|||
128
DmitrO
17.08.11
✎
16:00
|
(127) да они вообще присылая такой пример поступают как упоротые 1С-ники, а ты им пришлешь файл данных как грамотный спец. :)
|
|||
129
mikecool
17.08.11
✎
16:03
|
(128) уже запарилсо прогибаться под каждого клиента, но надо ((( такая у нас политика
накладные выгружаем в трех видах - дбф, текст, хмл выгрузку в дбф уже унифицировал, одна обработка на всех клиентов а вот с текстами и хмл пока затык - у каждого свои тараканы присутствуют ))) |
|||
130
DmitrO
17.08.11
✎
16:06
|
(129)да у нас тоже самое, тока слава богу я этой муйней не занимаюсь :)
|
|||
131
Aprobator
17.08.11
✎
16:08
|
на переносах данных во фране я в свое время неплохо заколачивал. Только пользовал стандартные механизмы по максимуму. Ковырять xml ручками - нет уж увольте!
|
|||
132
DmitrO
17.08.11
✎
16:09
|
Если честно, мне интересна их реакция на то что ты им пришлешь, т.к. ты сделал немного не то что у них в примере. Напиши потом сюда результаты.
|
|||
133
Aprobator
17.08.11
✎
16:10
|
фото в студию )
|
|||
134
mikecool
17.08.11
✎
16:13
|
(132) постараюсь не забыть )))
|
|||
135
mikecool
17.08.11
✎
16:16
|
работает и ЗаполнитьЗначенияСвойств
просто надо исключать ссылки и потом их отдельно приводить к хмл строке ) |
|||
136
mikecool
17.08.11
✎
16:17
|
ы, и про нулл не забывать ))
|
|||
137
DmitrO
17.08.11
✎
16:21
|
(135)вот бы в запросе такое преобразование делать (Ссылка).. проблем бы не было..
Ну на самом деле, там в случае составных типов, помню надо еще атрибутом как-то тип задавать, так что ЗаполнитьЗначенияСвойств не совсем подходит. |
|||
138
mikecool
17.08.11
✎
16:23
|
(137) буду по ходу пьесы отлавливать )
в запросе есть ПредставлениеСсылки(), но оказалось это основное представление из конфигуратора, код или наименование ( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |