Имя: Пароль:
1C
1С v8
обмен данными с использованием xtdo xsl и xml
,
0 slonelefant
 
18.07.18
10:24
не работает обмен данными из самописной конфы в бухгалтерию. обменять пытаюсь окоф. ошибка выскакивает " Не удалось десериализовать объект Справочник.ОбщероссийскийКлассификаторОсновныхФондов, возможно поменялась структура конфигурации: Ошибка при вызове метода контекста (ПрочитатьXML)". с структура пакета до преобразования и после вот такая

Пакет до преобразования:
<?xml version="1.0"?>
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
    <CatalogObject.ОбщероссийскийКлассификаторОсновныхФондов>
        <Ref>6528cb36-8983-11e8-840b-0025b3238bca</Ref>
        <IsFolder>true</IsFolder>
        <DeletionMark>false</DeletionMark>
        <Parent>00000000-0000-0000-0000-000000000000</Parent>
        <Code>ОК 013-2014     </Code>
        <Description>Принят и введен в действие Приказом Федерального агентства по техническому регулированию и метрологи</Description>
        <КонтрольноеЧисло>0</КонтрольноеЧисло>
        <НаименованиеГруппировки>Принят и введен в действие Приказом Федерального агентства по техническому регулированию и метрологии от 12 декабря 2014 г. N 2018-ст. (ред. от 04.07.2017 № 3)
</НаименованиеГруппировки>
        <АмортизационнаяГруппа/>
        <хлпКоэффициентУскорения>0</хлпКоэффициентУскорения>
    </CatalogObject.ОбщероссийскийКлассификаторОсновныхФондов>
Передаваемый пакет:
<?xml version="1.0"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"><CatalogObject.ОбщероссийскийКлассификаторОсновныхФондов NameOfSourceObject="Справочник.ОбщероссийскийКлассификаторОсновныхФондов">
<Ref>6528cb36-8983-11e8-840b-0025b3238bca</Ref>
<IsFolder>true</IsFolder>
<DeletionMark>false</DeletionMark>
<Parent>00000000-0000-0000-0000-000000000000</Parent>
<Code>ОК 013-2014     </Code>
<Description>Принят и введен в действие Приказом Федерального агентства по техническому регулированию и метрологи</Description>
<КонтрольноеЧисло>0</КонтрольноеЧисло>
<НаименованиеГруппировки>Принят и введен в действие Приказом Федерального агентства по техническому регулированию и метрологии от 12 декабря 2014 г. N 2018-ст. (ред. от 04.07.2017 № 3)
</НаименованиеГруппировки>
</CatalogObject.ОбщероссийскийКлассификаторОсновныхФондов>

с самим хмл сталкивался пару раз а вот с xtdo ни разу. сам обмен писался до меня
подскажите люди добрые где какой костыль вставить???
1 slonelefant
 
18.07.18
11:13
ап
2 slonelefant
 
18.07.18
12:11
апн
3 slonelefant
 
18.07.18
15:51
совсем никто в xtdo не шарит?
4 slonelefant
 
18.07.18
17:16
вверх
5 Insens
 
18.07.18
17:20
ПрочитатьXML используется глобальная или из фабрики XDTO? Можно кусок кода чтения? Очень похоже что в самописной добавили новое поле в XDTO-пакет, а в бухгалтерии - нет.
6 slonelefant
 
19.07.18
09:21
Функция ОтправитьПакетДанныхВСмежнуюБазу(СтруктураОтправкиПакета)

    СтруктураОтправкиПакета.НомерПакета = СтруктураОтправкиПакета.НомерПакета + 1;
    XML_Message = ПолучитьТекстСообщенияПакетаДанных(СтруктураОтправкиПакета.Пакет);
    
    //XML_Message_Recipient_Struckure = XML_Message;
    XML_Message_Recipient_Struckure = ПреобразоватьТекстВСтруктуруПриемника(XML_Message, СтруктураОтправкиПакета);
    Если XML_Message_Recipient_Struckure = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    //// тест
    //ТекстовыйДокумент = Новый ТекстовыйДокумент;
    //ТекстовыйДокумент.УстановитьТекст(ТекстПакетаДанных);
    //ТекстовыйДокумент.Показать("Пакет");
    //Возврат Истина;
    
    Если СтруктураОтправкиПакета.ЗаменятьУИДыПредопределенныхЭлементов Тогда
        ПодставитьВТекстСоответствующиеУИДы(XML_Message_Recipient_Struckure, СтруктураОтправкиПакета.ТаблицаСоответствияУИДовПредопределенныхЭлементов);
    КонецЕсли;
    
    ДобавитьСообщениеВЖурнал(СтруктураОтправкиПакета.СтруктураИдентификацииСообщения, хлОбменЛизинговымиДаннымиКлиентСервер.ПодставитьПараметрыВСтроку_(НСтр("ru = 'Отправка пакета данных %1 (Приоритет: %3; Количество объектов в пакете: %2)'"), Формат(СтруктураОтправкиПакета.НомерПакета, "ЧГ="), Формат(СтруктураОтправкиПакета.КоличествоОбъектовВПакете, "ЧГ="), Формат(СтруктураОтправкиПакета.Приоритет, "ЧН=0; ЧГ=")));
            
    Попытка
        РезультатЗагрузки = СтруктураОтправкиПакета.ПроксиWSСсылкиОбменаСоСмежнойБазой.uploadDataPackage(XML_Message_Recipient_Struckure, СтруктураОтправкиПакета.НомерПакета, СтруктураОтправкиПакета.Приоритет, СтруктураОтправкиПакета.СразуСтавитьВОчередь, СтруктураОтправкиПакета.СтруктураИдентификацииСообщения.Ид);
    Исключение
        ИнформацияПоОшибке = ИнформацияОбОшибке();
        ДобавитьСообщениеВЖурнал(СтруктураОтправкиПакета.СтруктураИдентификацииСообщения, хлОбменЛизинговымиДаннымиКлиентСервер.ПодставитьПараметрыВСтроку_(
            НСтр("ru = 'Не удалось обратиться к методу uploadDataPackage Web-сервиса: %1
                        |Передаваемый пакет:
                        |%2'")
            , ИнформацияПоОшибке.Описание, XML_Message_Recipient_Struckure)
            , 4);
        Возврат Ложь;
    КонецПопытки;
    
    Если РезультатЗагрузки.result_ID = 0 Тогда
        Если ПустаяСтрока(РезультатЗагрузки.result_description) Тогда
            ТекстСообщения = хлОбменЛизинговымиДаннымиКлиентСервер.ПодставитьПараметрыВСтроку_(НСтр("ru = 'Пакет данных %1 отправлен успешно'"), Формат(СтруктураОтправкиПакета.НомерПакета, "ЧГ="));
        Иначе
            ТекстСообщения = хлОбменЛизинговымиДаннымиКлиентСервер.ПодставитьПараметрыВСтроку_(НСтр("ru = 'Пакет данных %1 отправлен успешно. Описание результата: %2'"), Формат(СтруктураОтправкиПакета.НомерПакета, "ЧГ="), РезультатЗагрузки.result_description);
        КонецЕсли;
        ДобавитьСообщениеВЖурнал(СтруктураОтправкиПакета.СтруктураИдентификацииСообщения, ТекстСообщения);
        Возврат Истина;
    Иначе
        ДобавитьСообщениеВЖурнал(СтруктураОтправкиПакета.СтруктураИдентификацииСообщения, хлОбменЛизинговымиДаннымиКлиентСервер.ПодставитьПараметрыВСтроку_(
            НСтр("ru = 'Ошибка при отправке пакета %1 (id %2): %3
                        |Пакет до преобразования:
                        |%5
                        |Передаваемый пакет:
                        |%4'")
            , Формат(СтруктураОтправкиПакета.НомерПакета, "ЧГ="), РезультатЗагрузки.result_ID, РезультатЗагрузки.result_description, XML_Message_Recipient_Struckure, XML_Message)
            , 1);
        Возврат Ложь;
    КонецЕсли;

КонецФункции // ОтправитьПакетДанныхВСмежнуюБазу()

вот сдесь выдает 2 Если РезультатЗагрузки.result_ID = 0 Тогда
Если я вас правильно понял необходимо смотреть сооьтветствие xtdo самописки и буха? и копать на принимающей стороне процедуру чтения?
7 slonelefant
 
19.07.18
09:41
в конфигураторе структура xtdo выглядит одинаково и в бухе и в самописке . а как сама схема используется и читается?
8 slonelefant
 
19.07.18
10:04
если сделать экспорт схемы то в самописке пара "лишних" реквизитов которых нет в бухе
из самописки            
<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.ОбщероссийскийКлассификаторОсновныхФондов"/>
            <xs:element name="Code" type="xs:string"/>
            <xs:element name="Description" type="xs:string"/>
            <xs:element name="КонтрольноеЧисло" type="xs:string"/>
            <xs:element name="НаименованиеГруппировки" type="xs:string"/>
                        <xs:element name="АмортизационнаяГруппа" type="tns:EnumRef.АмортизационныеГруппы"/>
            <xs:element name="хлпНеобходимаРегистрация" type="xs:boolean" minOccurs="0"/>
            <xs:element name="хлпКоэффициентУскорения" type="xs:decimal"/>
                </xs:sequence>
    </xs:complexType>
из буха
<xs:complexType name="CatalogObject.ОбщероссийскийКлассификаторОсновныхФондов">
        <xs:sequence>
            <xs:element name="Ref" type="tns:CatalogRef.ОбщероссийскийКлассификаторОсновныхФондов"/>
            <xs:element name="DeletionMark" type="xs:boolean"/>
            <xs:element name="Parent" type="tns:CatalogRef.ОбщероссийскийКлассификаторОсновныхФондов"/>
            <xs:element name="Code" type="xs:string"/>
            <xs:element name="Description" type="xs:string"/>
            <xs:element name="PredefinedDataName" type="xs:string" minOccurs="0"/>
            <xs:element name="КонтрольноеЧисло" type="xs:string"/>
            <xs:element name="НаименованиеГруппировки" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
как загрузить подправленную схему? или как оно работает
9 Insens
 
19.07.18
10:08
(8) Можно руками в бухгалтерии добавить нужные поля.
10 slonelefant
 
19.07.18
10:44
(9) Обязательно попробую так сделать, но в передаваемом пакете
вроде нет этих лишних реквизитов, и другие объекты типа ПлПорВх вообще конвертируется в списание с р\с и норм работает
11 slonelefant
 
19.07.18
12:53
ап
12 slonelefant
 
19.07.18
14:19
при выполнении обмена я могу отладчиком посмотреть что и как передается. внимание вопрос как глянуть отладчико что пытается читать принимающая база ??