Имя: Пароль:
1C
1С v8
Помогите с базой. Ошибка в обмене данными
0 Fannasankh
 
10.08.13
16:15
Здравствуйте. Прохожу обучение по книге Радченко в 24 занятие вот такая ошибка при попытке сделать Обмен данными в разделе Предприятие.

{ПланОбмена.Филиалы.МодульОбъекта(77)}: Ошибка при вызове метода контекста (НачатьЧтение)
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);      
по причине:
Ошибка разбора XML:  - [1,37]
Фатальная ошибка:
Extra content at the end of the document
SystemId: file://C:/Users/Пользователь/AppData/Local/Temp/MessageФил_ЦБ.xml

Код модуля плана обмена Филиалы
Процедура ЗаписатьСообщениеСИзменениями() Экспорт
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "------Выгрузка в узел " + Строка(ЭтотОбъект) + "--------";
    Сообщение.Сообщить();
    Каталог = КаталогВременныхФайлов();
    
    //Сформировать имя временного файла.
    ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\") + "Message" + СокрЛП(Ссылка.Код)
                       + "_" + СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + ".xml";
                                                            
    //Создать объект записи XML.
    //***Запись XML-документов
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    //***Инфраструктура сообщений.
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Ссылка);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = " Номер сообщения: " + ЗаписьСообщения.НомерСообщения;
    Сообщение.Сообщить();
    
    //Получить выборку изменений данных.
    //***Механизм регистрации изменений.
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        //Записать данные в сообщение ***XML-сериализация.
        ЗаписатьXML(ЗаписьXML, ВыборкаИзменений.Получить());
    КонецЦикла;
    
    ЗаписьСообщения.ЗакончитьЗапись();
    ЗаписьXML.Закрыть();
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "------Конец выгрузки-------";
    Сообщение.Сообщить();
    
КонецПроцедуры

       Процедура ПрочитатьСообщениеСИзменениями() Экспорт
    
    Каталог = КаталогВременныхФайлов();
    
    //Сформировать имя файла.
    ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\") + "Message" + СокрЛП(Ссылка.Код)
                       + "_" + СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + ".xml";
    Файл = Новый Файл(ИмяФайла);
    Если Не Файл.Существует() Тогда
        Возврат;
    КонецЕсли;
    
    //***Чтение документов XML.
    //Попытаться открыть файл.
    ЧтениеXML = Новый ЧтениеXML;
    Попытка
        ЧтениеXML.ОткрытьФайл(ИмяФайла);
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Невозможно открыть файл обмена данными.";
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "-----Загрузка из " + Строка(ЭтотОбъект) + "-------";
    Сообщение.Сообщить();
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = " -Считывается файл " + ИмяФайла;
    Сообщение.Сообщить();
    
    //Загрузить из найденного файла.
    //***Инфраструктура сообщений.
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    
    //Читать заголовок сообщения обмена данными - файла XML.
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);      
    
    //Сообщение предназначено не для это узла.
    Если ЧтениеСообщения.Отправитель <> Ссылка Тогда ВызватьИсключение "Неверный узел";
    КонецЕсли;
    
    //Удаляем регистрацию изменений для узла отправителя сообщения.
    //***Служба регистрации изменений.
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
    
    //Читаем данные из сообщения ***XML-сериализация.
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
         //Читаем очередное значение.
         Данные = ПрочитатьXML(ЧтениеXML);
        
         //Не переносим изменения, полученные в главный из неглавного,
         //если есть регистрация изменения.
         Если Не ЧтениеСообщения.Отправитель.Главный И
             ПланыОбмена.ИзменениеЗарегистрировано(ЧтениеСообщения.Отправитель, Данные) Тогда
             Сообщение = Новый СообщениеПользователю;
             Сообщение.Текст = " - Изменения отклонены";
             Сообщение.Сообщить();
             Продолжить;
         КонецЕсли;
        
            
             //Записать полученные данные.
             Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
             Данные.ОбменДанными.Загрузка = Истина;
             Данные.Записать();
    КонецЦикла;
    
    
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
    
    УдалитьФайлы(ИмяФайла);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "------Конец загрузки--------";
    Сообщение.Сообщить();
    
КонецПроцедуры

Пожалуйста, помогите. Если нужно, вышлю выгрузку базы.
1 cons74
 
10.08.13
18:58
Extra content at the end of the document = дополнительные (лишние) данные в конце документа (т.е. после закрывающего тега, видимо). По мне, так файл обмена кривой. Попробуй прогляди его (например, в IE).
2 Fannasankh
 
11.08.13
08:40
<?xml version="1.0" encoding="UTF-8"?>

вот это находится в файле обмена. Я так понимаю, это не то, что должно?
3 dmpl
 
11.08.13
08:48
(2) Сделай пустую выгрузку (т.е. вообще без изменений) и выложи полностью, что формируется при этом.
4 Fannasankh
 
11.08.13
09:00
Не совсем понял, что значит без изменений...
Вот выгрузка базы http://rusfolder.com/37566488, после этой ошибки ничего не менял, ибо не знаю, что.
5 Fannasankh
 
11.08.13
09:04
(3) http://rusfolder.com/37566508

вот файл, который формируется
6 dmpl
 
11.08.13
09:20
(5) Файл вообще пустой, там нет ни заголовка сообщения, ни его тела.
7 Fannasankh
 
11.08.13
09:26
(6) А почему так получается? У меня же есть формирование файла. Выше код.
8 Fannasankh
 
11.08.13
09:28
(6) Я так понимаю, вот здесь файл формируется
    Пока ВыборкаИзменений.Следующий() Цикл
        //Записать данные в сообщение ***XML-сериализация.

        ЗаписатьXML(ЗаписьXML, ВыборкаИзменений.Получить());
    КонецЦикла;

Да?
9 shuhard
 
11.08.13
10:13
(0) у Радчено есть свой сайт, где он держит ответ за книжки:
http://devtrainingforum.v8.1c.ru/forum/
10 Fannasankh
 
11.08.13
10:17
(9) Я там написал, мне не отвечают. Есть похожая тема, там вопрос как-то решился, но я не понимаю как, у меня так не получается.
11 dmpl
 
11.08.13
20:46
(7) Есть подозрение что Ссылка - это предопределенный узел ИБ (т.к. если не ошибаюсь, выполнение этого модуля идет в контексте предопределенного узла), а надо передать ссылку не на предопределенный узел.
12 hhhh
 
12.08.13
01:44
(10) да, похоже вы пытаетесь узел сам с собой связать. Ничего не получится.
Независимо от того, куда вы едете — это в гору и против ветра!