Имя: Пароль:
1C
1С v8
Чем можно получить такую структуру 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 = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("c:\Номенклатура.xml");
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   
   ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("CatalogRef.усНоменклатура"));
   Запись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");
   
   Сериализатор = СтруктураПараметров.Сериализатор;
   
   Для Каждого СтрокаВыборки Из Выборка Цикл
       
       Объект = Сериализатор.Фабрика.Создать(Сериализатор.Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.усНоменклатура"));
       Объект.Ref = XMLСтрока(СтрокаВыборки.Ref);
       Объект.DeletionMark = XMLСтрока(СтрокаВыборки.DeletionMark);
       Объект.Parent = XMLСтрока(СтрокаВыборки.Parent);
       Объект.IsFolder = XMLСтрока(СтрокаВыборки.IsFolder);
       Объект.Code = XMLСтрока(СтрокаВыборки.Code);
       Объект.Description = XMLСтрока(СтрокаВыборки.Description);
       Объект.БазоваяЕдиницаХранения = XMLСтрока(СтрокаВыборки.БазоваяЕдиницаХранения);
       
       Сериализатор.Фабрика.ЗаписатьXML(ЗаписьXML, Объект);

   КонецЦикла;
   
   ЗаписьXML.ЗаписатьКонецЭлемента();
   
   ЗаписьXML.Закрыть();


получаю
<?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) буду по ходу пьесы отлавливать )
в запросе есть ПредставлениеСсылки(), но оказалось это основное представление из конфигуратора, код или наименование (
Программист всегда исправляет последнюю ошибку.