Имя: Пароль:
1C
1С v8
Xml создание файла
0 GStiv
 
15.06.17
16:24
Поступила задача организовать выгрузку и загрузку через xml файлы и дали пример, не могу сообразить через что можно создать такую структуру
<?xml version="1.0" encoding="windows-1251"?>
<AxaptaXMLExport xmlns:Table="urn:http://www.navision.com/Formats/Table"; version="1.0" xmlns="urn:http://www.navision.com/Formats/Table1">;
  <!--XML Data output generated on 27.02.2017 at 11:09:49 by ****-->
  <transaction version="1.0">
    <Table:Record name="VendReceiptExportDC" row="1">
      <Table:Field name="ItemId">*******</Table:Field>
итд
Через  ЗаписьXML = Новый ЗаписьXML;
как мне кажется не получится и разобрать на чтение не смогу. Подтолкните в нужном направление, или кто занимался написание выгрузки для Объединенный кондитер готов обсудить.
1 Dmitry1c
 
15.06.17
16:39
Если выгрузить из 1С в 1С, то можно сделать так:


ЗаписьXML = Новый ЗаписьXML(ПутьКТвоемуФайлу);

СериализаторXDTO.ЗаписатьXML(ТвоиДанные, ЗаписьXML);

ЗаписьXML.Закрыть();

Аналогично прочитать данные.

ТвоиДанные - здесь должна быть таблица значений, однотипная для приемника и для источника.

Все, больше ничего придумывать для данной задачи не надо.
2 mexanik_96
 
15.06.17
16:58
автору дали xsd, необходимо использовать фабрику xdto, путь в (2) так себе(по опыту). создаешь фабрику, описываешь типы, создаешь объекты, загоняешь в файл.
3 mexanik_96
 
15.06.17
16:59
через фабрику + типы по схеме прикинь да, даже читать сможешь!
4 GStiv
 
15.06.17
17:01
Не совсем 1с, я не знаю в какую программу будут грузить у меня есть только формат по которому должно быть выгружено.
xsd не давали
5 Живой Ископаемый
 
15.06.17
17:07
Я бы получал xml который создает например функция из типовых
ТиповыеОтчеты.СериалзоватьОбъектXDTO(Объект)

полученную ХМЛ-строку подвергал бы каким-то или элементарным строковым преобразованиям , или не сильно элементарным (регулярки), и уже получал бы структуру которая требуется в (0) и записывал бы просто в ЗаписьТекста, но файл бы называл с расширением хмл.

Но нужно смотреть, если этих приеобазований много, то может быть и пришлось бы перебирать коллекции объектов, и конструировать хмл вообще вручную
6 mexanik_96
 
15.06.17
18:48
(4) ну дак скачай схему она у тебя в описании
7 GStiv
 
15.06.17
19:44
В описание вордовский файл с таблицей
Строка файла .xml    Описание поля    Формат данных
<Table:Record name="VendTableExportDC" row="1">        
    <Table:Field name="CustVendID">00001</Table:Field>    Код поставщика    text
8 GStiv
 
18.06.17
20:03
Продолжим
сделал так
XMLDOM = новый COMОбъект("Microsoft.XMLDOM");
    XMLDOM = новый COMОбъект("MSXML.DOMDocument");
    XMLDOM.async = 0;
    XMLDOM.validateOnParse = 0;
    XMLDOM.resolveExternals = 0;
    XMLDOM.appendChild(XMLDOM.createProcessingInstruction("xml", "version='1.0' encoding='windows-1251'"));
    
    КорневойЭлемент = XMLDOM.createElement("AxaptaXMLExport");
    КорневойЭлемент.setAttribute("xmlns:Table", "urn:http://www.navision.com/Formats/Table";);
    КорневойЭлемент.setAttribute("version", "1.0");
    XMLDOM.appendChild(КорневойЭлемент);
    
    Транзакция = XMLDOM.createElement("transaction");
    Транзакция.setAttribute("version","1.0");
    КорневойЭлемент.appendChild(Транзакция);

    
    Для а=1 по 10 цикл
        
    Строчка1 = XMLDOM.createElement("Table:Record");
    Строчка1.setAttribute("name","InventTableExportDC");
    Строчка1.text ="row="""+а+"""";
    Транзакция.appendChild(Строчка1);

    Строчка = XMLDOM.createElement("Table:Field");
    Строчка.setAttribute("name","ManDate");
    Строчка.text = 123;
    Строчка1.appendChild(Строчка);
    
    Строчка = XMLDOM.createElement("Table:Field");
    Строчка.setAttribute("name","ManDate2");
    Строчка.text = 123;
    Строчка1.appendChild(Строчка);
конеццикла;
XMLDOM.Save("c:\222.xml");    

получается правильно но есть один косяк
должно быть
<Table:Record name="InventTableExportDC" row="1">
а получаеться
<Table:Record name="InventTableExportDC">row="2"
понимаю что косяк  
Строчка1 = XMLDOM.createElement("Table:Record");
    Строчка1.setAttribute("name","InventTableExportDC");
    Строчка1.text ="row="""+а+"""";
    Транзакция.appendChild(Строчка1);
как сделать XMLDOM.createElement с двумя параметрами
9 Genayo
 
18.06.17
20:58
(8) Тебе читать или писать надо, или и то и другое?
10 Genayo
 
18.06.17
21:05
(8) Да, кстати платформа 1С 8?
11 GStiv
 
18.06.17
21:24
ДА прошу прощения сейчас писать а завтра и читать
1с8
12 youalex
 
18.06.17
22:03
(8) у тебя здесь row="1" - это еще один атрибут (еще один setAttribute), а ты его пихаешь как текст.
13 GStiv
 
18.06.17
22:10
сделал
Строчка1 = XMLDOM.createElement("Table:Record");
    Строчка1.setAttribute("name","InventTableExportDC");
    Строчка1.setAttribute("raw",а);
    Транзакция.appendChild(Строчка1);

вроде получилось, спасибо
14 Genayo
 
18.06.17
22:25
(11) Отправил на почту в профиле.
15 GStiv
 
18.06.17
22:47
Спасибо увидел, ответил
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший