8.х При перезаписи файла XML через фабрику XDTO тип изменяется на anyType

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Euronymous, 10 мар 2014.

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    http://gyazo.com/e29ea3dd461b93a9ac4d3aa7a3b446c6
    Всем добрый вечер. Имеется файл XML, через фабрику XDTO его необходимо получить, изменить и перезаписать. Всё делаю без проблем, но в момент повторной записи вылетает тип: например был "ORDERS", а становится "anyType", как это можно исправить или, может быть, указать программно?
    Скрин сделан из проги STDU XMLEditor.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    а код показать?
    похоже на незаданное имя корня
  3. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Код:
            ОбъектXML       = Новый ЧтениеXML;
            Попытка
                ОбъектXML.ОткрытьФайл(ИмяФайла);                      
                ЭД          = ФабрикаXDTO.ПрочитатьXML(ОбъектXML);
            Исключение
            КонецПопытки;                           
            Если ТипЗнч(ЭД) = Тип("ОбъектXDTO") Тогда
                ЭлементДанныхString = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
                ЭлементДанных = ФабрикаXDTO.Создать(ЭлементДанныхString, ПрисоединенныйФайл.ВладелецФайла.ДокументОснование.НомерЭД);
                ЭД.Добавить(ФормаXML.Атрибут, "","orderNumber", ЭлементДанных);//http://topby.by/edi/desadv
            
                ЭлементДанныхDate = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","dateTime");
                ЭлементДанных = ФабрикаXDTO.Создать(ЭлементДанныхDate, ЭлектронныеДокументыВнутренний.XMLДатаВремя(ПрисоединенныйФайл.ВладелецФайла.ДокументОснование.ДатаСоздания));
                ЭД.Добавить(ФормаXML.Атрибут, "","orderDate", ЭлементДанных);
            КонецЕсли;
            ОбъектXML.Закрыть();
            ЭД.Проверить();
            НоваяЗаписьXML = Новый ЗаписьXML;
            НоваяЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
            ФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML, ЭД, , "http://topby.by/edi/desadv");
            НоваяЗаписьXML.Закрыть();
    Как-то так... При создании, записи и чтении все отлично, при повторной записи слетает имя корня

    Если добавить пространство имен, все равно пишет 'anyType' и при этом к новым полям добавляет d1p1:
    Код:
    ЭД.Добавить(ФормаXML.Атрибут, "http://topby.by/edi/desadv","orderNumber", ЭлементДанных);
    Последнее редактирование: 11 мар 2014
  4. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Проблема в чтении, так как оно происходило без указания типа (второй параметр) - ЭД = ФабрикаXDTO.ПрочитатьXML(ОбъектXML)
    Если указать тип, то читает отлично, но получается большое кол-во пустых полей, что не есть хорошо
    Если оставить anyType, то я без проблем могу добавить 2 поля, которые мне нужны без появления тучи пустых полей, однако как в этом случае при записи указать необходимый мне тип?

    Вопрос остается актуальным, реально ли задать тип напрямую?
    P.S. Во время выгрузки файла в XML пустые поля автоматом срезаются
    Последнее редактирование: 11 мар 2014

Поделиться этой страницей