Ошибка при вызове метода контекста записатьобъявлениеxml

Есть такой XDTO пакет

bfdba24c07c642d4921c6e6ebdc51590.JPG

как по нему создать XML файл? Не могу понять как обратиться к элементу Контрагенты. Нашел в Интернете, что можно обратиться через Корневое свойство, но при сохранении файла выдает ошибку. Также не могу понять как создать элемент Руководитель.


  • Вопрос задан

    более трёх лет назад

  • 1693 просмотра


5

комментариев

Пригласить эксперта


Ответы на вопрос 2

Fragster

Там вся фишка во вложенных типах. Для более подробного анализа нужен XSD файл.


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

30 янв. 2023, в 12:59

15000 руб./за проект

30 янв. 2023, в 12:56

50000 руб./за проект

30 янв. 2023, в 12:52

5000 руб./за проект

Минуточку внимания

  1. Всем добрый день.
    То ли слепой, то ли чего то не понимаю.

    Есть простой до жути код.

    хмл = Новый ЗаписьXML();
             хмл.ОткрытьФайл(Файл);
            
             хмл.ЗаписатьОбъявлениеXML();
             //Блок клиента
             хмл.ЗаписатьНачалоЭлемента("Клиент");
            
                 хмл.ЗаписатьНачалоЭлемента("ФИО");
                хмл.записатьТекст(XMLСтрока(ФИО));
                хмл.ЗаписатьКонецЭлемента();
               
                хмл.ЗаписатьНачалоЭлемента("ID");
                хмл.записатьТекст(XMLСтрока(ID));
                хмл.ЗаписатьКонецЭлемента();
               
            хмл.ЗаписатьКонецЭлемента();
           
            //Блок товаров
            хмл.ЗаписатьНачалоЭлемента("ТоварыВЧеке");
           
            Для каждого стр из Товары Цикл
                хмл.ЗаписатьНачалоЭлемента("Товар");
               
                    хмл.ЗаписатьНачалоЭлемента("Артикул");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Артикул));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Наименование");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Номенклатура));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Цена");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Цена));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Количество");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Количество));
                    хмл.ЗаписатьКонецЭлемента();
                   
                хмл.ЗаписатьКонецЭлемента();
            КонецЦикла;
           
            хмл.ЗаписатьКонецЭлемента();
            хмл.Закрыть();

    Ругается на строчку

    {Документ.ЧекККМ.Форма.ФормаДокумента.Форма(1434)}: Ошибка при вызове метода контекста (ЗаписатьНачалоЭлемента)
    хмл.ЗаписатьНачалоЭлемента(«ТоварыВЧеке»);
    по причине:
    Ошибочный порядок записи XML

    Хотя до этого все элементы закрыты, и это начало нового элемента.

    В чем косяк ?

  2. Решено.

    Называется, учите други структуру =)
    2 корневых элемента не могло быть.
    Нужен был 1 общий.

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

#1

0

24.01.2014 17:12:23

При выгрузке товаров получаем вот такое окно:

Код
{Обработка.ОбменССайтом.МодульОбъекта(3481)}: Ошибка при вызове метода контекста (ЗаписатьКонецЭлемента)
   ЗаписьXML.ЗаписатьКонецЭлемента();
по причине:
Ошибочный порядок записи XML

Ошибка возникает в последнем дополнении Битрикса для «1С Управление торговлей» 10.3.26.2.

Ошибка возникает при выгрузке файла offers.xml, если ни у одного товара нет цен.

//////////////////////////

Зачем написал? Чтобы все знали.

Когда уже будет

публичный баг-трекер

, где можно увидеть все косяки той или иной версии? У нас 2 программиста 3 часа искали в 1С, почему такая ошибка.

Модуль «Продвинутый обмен с 1C» http://marketplace.1c-bitrix.ru/solutions/askaron.pro1c/, создание сайтов и интеграция с 1С http://askaron.ru,

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

#2

0

27.01.2014 16:48:46

Найден баг. Строка 2404.  Внутренняя обработка ОбменССайтом

Кто-то из старой версии не убрал важный фрагмент и сделал одно лишнее закрытие тега XML.

Код
Если РезультатЗапроса.Пустой() Тогда 
   ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента(); 
КонецЕсли;

Этот фрагмент следует убрать. Например так:

Исходный текст:

Код
   Если РезультатЗапроса.Пустой() Тогда
      ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента();
   КонецЕсли;

   Выборка = РезультатЗапроса.Выбрать();
   Всего = Выборка.Количество();
   ОбъектCMLПакетПредложений.ЗаписатьНачалоЭлемента("Предложения" ) ;
   
   Пока Выборка.Следующий() Цикл
      
      СписокЗначенийCML = Новый СписокЗначений;
      СтруктураВозврата.ВыгруженоПредложений = СтруктураВозврата.ВыгруженоПредложений + 1;
      
      #Если Клиент Тогда
      Если СтруктураВозврата.ВыгруженоПредложений % 100 = 0 Тогда
         
         ОтобразитьСостояние("Каталог """ + ПараметрыКаталога.Каталог + """: Выгружено объектов пакета предложений: " + СтруктураВозврата.ВыгруженоПредложений + " из " + Всего + ". Выгружается: " + Выборка.НоменклатураСсылка + " " + Выборка.ХарактеристикаСсылка);
         
      КонецЕсли;
      #КонецЕсли
      
      РИ_ЗаполнитьСписокЗначенийПредложения(СписокЗначенийCML, Выборка, МассивСкладов, ВыгрузкаКраткихИзменений);
      
      ОбъектCMLПакетПредложений.ЗаписатьНачалоЭлемента("Предложение" ) ;
      ЗаписатьCMLПоСпискуЗначений(ОбъектCMLПакетПредложений, СписокЗначенийCML);
      ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента();
      
   КонецЦикла;
   ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента();

Заменить на

Код
   Если РезультатЗапроса.Пустой() Тогда
      //   ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента(); 
   Иначе

      Выборка = РезультатЗапроса.Выбрать();
      Всего = Выборка.Количество();
      ОбъектCMLПакетПредложений.ЗаписатьНачалоЭлемента("Предложения" ) ;
      
      Пока Выборка.Следующий() Цикл
         
         СписокЗначенийCML = Новый СписокЗначений;
         СтруктураВозврата.ВыгруженоПредложений = СтруктураВозврата.ВыгруженоПредложений + 1;
         
         #Если Клиент Тогда
         Если СтруктураВозврата.ВыгруженоПредложений % 100 = 0 Тогда
            
            ОтобразитьСостояние("Каталог """ + ПараметрыКаталога.Каталог + """: Выгружено объектов пакета предложений: " + СтруктураВозврата.ВыгруженоПредложений + " из " + Всего + ". Выгружается: " + Выборка.НоменклатураСсылка + " " + Выборка.ХарактеристикаСсылка);
            
         КонецЕсли;
         #КонецЕсли
         
         РИ_ЗаполнитьСписокЗначенийПредложения(СписокЗначенийCML, Выборка, МассивСкладов, ВыгрузкаКраткихИзменений);
         
         ОбъектCMLПакетПредложений.ЗаписатьНачалоЭлемента("Предложение") ;
         ЗаписатьCMLПоСпискуЗначений(ОбъектCMLПакетПредложений, СписокЗначенийCML);
         ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента();
         
      КонецЦикла;
      
      ОбъектCMLПакетПредложений.ЗаписатьКонецЭлемента();
   
   КонецЕсли;

Модуль «Продвинутый обмен с 1C» http://marketplace.1c-bitrix.ru/solutions/askaron.pro1c/, создание сайтов и интеграция с 1С http://askaron.ru,

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

В ближайшей версии модуля обмена эта бага будет поправлена.

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

А можно тупо выложить дополнение-фикс для той же версии 1С?

Вот идея — исправлять критическе ошибки в тот же день

http://idea.1c-bitrix.ru/significantly-accelerate-product-updates-fix-critical-bugs/

Сколько еще ждать ближайшую версию модуля? Пол-года?

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

Я пересобрал версию модуля вчера. На днях должна обновиться на сайте. Я кста, тоже считаю, что критичные ошибки должны правиться очень оперативно. Другое дело с адаптациями… И да, много кто уже поставил последний модуль и только от вас пришло сообщение о ошибке, поэтому ошибка не столь критична. Она вылазит только при определенных условиях.

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

Спасибо. Я надеюсь ошибка с частями архива тоже будет исправлена:

http://dev.1c-bitrix.ru/community/forums/forum26/topic60094/

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

Она тоже. Но в тоже время для УПП, КА и продуктов стран СНГ пока обновлена.

 

Пользователь 238860

Заглянувший

Сообщений: 4
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.01.2014

#8

0

29.01.2014 11:12:24

Цитата
Александр Денисюк пишет:
много кто уже поставил последний модуль

Поставили, ошибку получили.
Использовали фикс из темы, все заработало. Но потом нас настиг шок: Выгрузка вместо 40 мегабайтов стала весить 400.

КА 1.1.42.2

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

В КА исправлено в модуле версии 1.1.42.4. Просто она еще не обновлена на сайте.  

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#10

0

29.01.2014 12:25:44

По поводу размера — нужно смотреть сами XML файлы.

 

Пользователь 238860

Заглянувший

Сообщений: 4
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.01.2014

#11

0

30.01.2014 14:10:45

Обновленный модуль для КА России выложен неправильно. Внутри модуль от УТ Беларуси

 

Александр Денисюк

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#12

0

30.01.2014 16:03:35

Цитата
Илья пишет:
Обновленный модуль для КА России выложен неправильно. Внутри модуль от УТ Беларуси

Сообщил людям. Сейчас должны поправить.

 

Пользователь 238860

Заглянувший

Сообщений: 4
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.01.2014

#13

0

30.01.2014 16:28:22

Что то как то не сложилось с этим обновлением. Пытаюсь удалить реализацию. Вылетает ошибка

Код
Ошибка при выполнении обработчика - 'ОбработкаУдаленияПроведения'
по причине:
{ОбщийМодуль.ПроцедурыОбменаССайтом.Модуль(272)}: Метод объекта не обнаружен (ЕстьТабЧастьДокумента) 

Если закоментировать

Код
Если ОбщегоНазначения.ЕстьТабЧастьДокумента("Товары", МетаданныеДокумента) Тогда
         Для каждого СтрокаТЧ Из Объект.Товары Цикл
            // РИ ++
            //ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, СтрокаТЧ.Номенклатура);
            Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
               ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, СтрокаТЧ.Номенклатура);
            КонецЕсли;
            // РИ --
         КонецЦикла;
      ИначеЕсли ОбщегоНазначения.ЕстьТабЧастьДокумента("Заказы", МетаданныеДокумента) Тогда
         Для каждого Заказ Из Объект.Заказы Цикл
            // РИ ++
            //Для каждого СтрокаТЧ Из Заказ.ЗаказПокупателя.Товары Цикл
            //   ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, СтрокаТЧ.Номенклатура);
            //КонецЦикла;
            Если МетаданныеДокумента.Имя = "ЗакрытиеВнутреннихЗаказов" Тогда
               ИмяРеквизитаТЧ = "ВнутреннийЗаказ";
            Иначе
               ИмяРеквизитаТЧ = "ЗаказПокупателя";
            КонецЕсли;
            Для каждого СтрокаТЧ Из Заказ[ИмяРеквизитаТЧ].Товары Цикл
               Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
                  ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, СтрокаТЧ.Номенклатура);
               КонецЕсли;
            КонецЦикла;
            // РИ --
         КонецЦикла;
      КонецЕсли;
 

То все удаляется, но опять с ошибками.

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#14

0

30.01.2014 21:21:45

Это все из за конфигурации. Модуль для КА делался на основе УТ. А конфигурации немного отличаются. Всех отличий не учтешь.  Посмотрю в чем дело. Оказалось, что в КА(да и скорее всего УПП), нет функции ОбщегоНазначения.ЕстьТабЧастьДокумента.  

 

Пользователь 238860

Заглянувший

Сообщений: 4
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.01.2014

#15

0

31.01.2014 11:02:18

Цитата
Александр Денисюк пишет:
Модуль для КА делался на основе УТ

И тут понеслось. Обмен заказами не обновляет заказы.

Код
{ОбщийМодуль.РИ_ПроцедурыОбменаССайтомБитрикс.Модуль(1786)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
   МассивРезультатов = Запрос.ВыполнитьПакет();
по причине:
Ошибка выполнения запроса
по причине:
В данной транзакции уже происходили ошибки!
 
 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#16

0

31.01.2014 11:17:47

Вполне вероятно — связано с предыдущей ошибкой. Посмотрю. Сегодня думаю поправлю.

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#17

0

31.01.2014 11:50:23

Тут можно скачать новую версию КА. На Сайте она обновится чуть позже. Проверил подписки на события + перезапись заказов.

http://yadi.sk/d/iZGB0A6fH47cC

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

#18

0

31.01.2014 16:28:37

исправленная версия для 10.3.26.4

http://1c.1c-bitrix.ru/ecommerce/download.php

Версия с ошибками версия была для 10.3.26.2.

Мы не смогли у 1С найти 10.3.26.4. Её не бывает. Следующая после 10.3.26.2 идет 10.3.27.1

Будет ли работать дополнение и оказываться техническая поддержка если мы поставим дополнение для 10.3.26.4 на  10.3.26.2?

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#19

0

31.01.2014 19:29:36

Эм. Это версия модуля. При запуске установщика пишется для какой она версии. Если память не изменяет 10.3.26.2.

 

Пользователь 25773

Эксперт

Сообщений: 848
Баллов: 150
Авторитет:

0

Рейтинг пользователя:

4

Регистрация: 16.06.2008

#20

0

31.01.2014 20:03:09

Да верно, в коде у вас 2.9.26.4 для УТ 10.3.26.2.

Исправьте на странице

http://1c.1c-bitrix.ru/ecommerce/download.php

 название версии. Это ошибка. Мы заставили заказчика искать несуществующую версию 1С.

Модуль «Продвинутый обмен с 1C» http://marketplace.1c-bitrix.ru/solutions/askaron.pro1c/, создание сайтов и интеграция с 1С http://askaron.ru,

{Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (ЗаписатьНачалоЭлемента)

        Запись.ЗаписатьНачалоЭлемента(«Подразделение»);

по причине:

Ошибочный порядок записи XML

Код элементарный ошибок не должно быть!!!! почему????

Запись = Новый ЗаписьXML;

    Запись.ОткрытьФайл(ПутьКФайлу, «UTF-8»);

    Запись.ЗаписатьОбъявлениеXML();

    Выборка1 = Справочники.Подразделения.ВыбратьИерархически();

    Пока Выборка1.Следующий()Цикл

        Запись.ЗаписатьНачалоЭлемента(«Подразделение»);

        Запись.ЗаписатьАтрибут(«Код»,Выборка1.Код);

        Запись.ЗаписатьАтрибут(«Наименование»,Выборка1.наименование);

        Запись.ЗаписатьКонецЭлемента();

    КонецЦикла;

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

Есть такой XDTO пакет

bfdba24c07c642d4921c6e6ebdc51590.JPG

как по нему создать XML файл? Не могу понять как обратиться к элементу Контрагенты. Нашел в Интернете, что можно обратиться через Корневое свойство, но при сохранении файла выдает ошибку. Также не могу понять как создать элемент Руководитель.


  • Вопрос задан

    более трёх лет назад

  • 1777 просмотров



5

комментариев

Пригласить эксперта


Ответы на вопрос 2

Fragster

Там вся фишка во вложенных типах. Для более подробного анализа нужен XSD файл.


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

25 июн. 2023, в 03:49

15000 руб./за проект

25 июн. 2023, в 03:19

4500 руб./за проект

25 июн. 2023, в 02:28

10000 руб./за проект

Минуточку внимания

  1. Всем добрый день.
    То ли слепой, то ли чего то не понимаю.

    Есть простой до жути код.

    хмл = Новый ЗаписьXML();
             хмл.ОткрытьФайл(Файл);
            
             хмл.ЗаписатьОбъявлениеXML();
             //Блок клиента
             хмл.ЗаписатьНачалоЭлемента("Клиент");
            
                 хмл.ЗаписатьНачалоЭлемента("ФИО");
                хмл.записатьТекст(XMLСтрока(ФИО));
                хмл.ЗаписатьКонецЭлемента();
               
                хмл.ЗаписатьНачалоЭлемента("ID");
                хмл.записатьТекст(XMLСтрока(ID));
                хмл.ЗаписатьКонецЭлемента();
               
            хмл.ЗаписатьКонецЭлемента();
           
            //Блок товаров
            хмл.ЗаписатьНачалоЭлемента("ТоварыВЧеке");
           
            Для каждого стр из Товары Цикл
                хмл.ЗаписатьНачалоЭлемента("Товар");
               
                    хмл.ЗаписатьНачалоЭлемента("Артикул");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Артикул));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Наименование");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Номенклатура));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Цена");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Цена));
                    хмл.ЗаписатьКонецЭлемента();
                   
                    хмл.ЗаписатьНачалоЭлемента("Количество");
                    хмл.ЗаписатьТекст(XMLСтрока(Стр.Количество));
                    хмл.ЗаписатьКонецЭлемента();
                   
                хмл.ЗаписатьКонецЭлемента();
            КонецЦикла;
           
            хмл.ЗаписатьКонецЭлемента();
            хмл.Закрыть();

    Ругается на строчку

    {Документ.ЧекККМ.Форма.ФормаДокумента.Форма(1434)}: Ошибка при вызове метода контекста (ЗаписатьНачалоЭлемента)
    хмл.ЗаписатьНачалоЭлемента(«ТоварыВЧеке»);
    по причине:
    Ошибочный порядок записи XML

    Хотя до этого все элементы закрыты, и это начало нового элемента.

    В чем косяк ?

  2. Решено.

    Называется, учите други структуру =)
    2 корневых элемента не могло быть.
    Нужен был 1 общий.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Грабли метода ПрочитатьXML() объекта ФабрикаXDTO

Что таит в себе окно редактирования XDTO-пакета

Фабрика XDTO — это библиотека типов, которая описывает определенные структуры XML. В языке программирования платформы 1С имеется объект ФабрикаXDTO, который содержит все пакеты XDTO, имеющиеся в конфигурации, а также предопределенные пакеты (например, пакет типов XML схемы). У данного объекта метод ПрочитатьXML(), позволяет читать элементы данных XDTO указанного типа из объекта чтения XML:


ФайлXML = Новый ЧтениеXML;
ФайлXML.УстановитьСтроку(СтрокаXML);

Пока ФайлXML.Прочитать() Цикл

Если ФайлXML.ЛокальноеИмя = "Message" И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML);
КонецЕсли;

КонецЦикла;

ФайлXML.Закрыть();

Первый параметр метода является обязательным, в который передается объект чтения XML. Второй параметр метода необязательный, в который передается тип элемента данных XDTO. Если тип не указан, то будет сделана попытка определить тип данных по текущему состоянию объекта ЧтениеXML.

Допустим, создадим тип в пакете XDTO  с пространством имен http://lk.1cps.ru, который будет описывать некую структуру XML:

1. Тип «Документы»

Кусок структуры XML:
...
<Документы>
<РасчетФБ>
<Культура>12122</Культура>
<ПосевнаяПлощадь>23</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>276</Сумма>
</РасчетФБ>
<РасчетФБ>
<Культура>232323</Культура>
<ПосевнаяПлощадь>34</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>408</Сумма>
</РасчетФБ>
</Документы>
...

Прочитаем эту структуру:

Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ЛокальноеИмя = "Документы" И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML, ФабрикаXDTO.Тип("http://lk.1cps.ru", "ДокументыТип"));
Прервать;
КонецЕсли;
КонецЦикла;

Приведенный код будет завершать ошибкой чтения XML, примерно такой:

Ошибка при вызове метода контекста (ПрочитатьXML)
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML, ФабрикаXDTO.Тип("http://lk.1cps.ru", "ДокументыТип"));
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://lk.1cps.ru}ДокументыТип - [126,19]
Проверка дополнительного свойства:
форма: Элемент
имя: {http://lk.1cps.ru}Культура
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://lk.1cps.ru}ДокументыТип

ПРОШЛО 4 ЧАСА :(

Так как выше приведенный кусок структуры XML не относится к пространству имен http://lk.1cps.ru, то и метод ПрочитатьXML() выкидывал ошибку, несмотря на то, что тип правильно описывает структуру XML! Поэтому XML должен выглядеть так:
...
<Документы xmlns="http://lk.1cps.ru">
<РасчетФБ>
<Культура>12122</Культура>
<ПосевнаяПлощадь>23</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>276</Сумма>
</РасчетФБ>
<РасчетФБ>
<Культура>232323</Культура>
<ПосевнаяПлощадь>34</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>408</Сумма>
</РасчетФБ>
</Документы>
...

Вот такие пироги.

Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(74)}: Ошибка при вызове метода контекста (ПрочитатьXML) ПрочитатьXML(ЧтениеXML);

Описание ошибки:
Ошибка при попытке загрузить описание структуры метаданных в базу конфигурации 1С: Конвертация данных 8, ред. 2.1. Версия платформы 1С: Предприятие 8.3.7.1845

Найденные решения:

Кажется, наверное, что вряд ли бы столкнулся с данной ошибкой, как оказалось не столь редкой. Мне была предоставлена база конфигурации 1С: Конвертация данных 8 ред. 2.0. В которой уже имелись правила обмена, которые нужно было доработать под требуемую задачу. Но для того, чтобы выполнить доработку, необходимо было обновить описание конфигураций посредством загрузки нового описания из файла-описания конфигурации базы-приемника и источника.

Как известо файл-описания конфигурации подготавливается с помощью поставляющегося с 1С: Конвертация данных 8 файла MD82Exp.epf. Традиционно выполнив создание файла-описания структуры конфигурации, перешел к процессу «загрузки метаданных структуры конфигурации» в базе конвертации. И неожиданно по истечении некоторого времени после, казалось бы, удачногостарта процесса загрузки получил ошибку: {Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(74)}: Ошибка при вызове метода контекста (ПрочитатьXML)
            ПрочитатьXML(ЧтениеXML);
по причине:
Ошибка преобразования данных XML: [sfile://C:/Базы 1С/А__/______.xml][171,22]

1с 8 Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(74)}: Ошибка при вызове метода контекста (ПрочитатьXML)    ПрочитатьXML(ЧтениеXML);

1C 8 конвертация ошибка при загрузке описания конфигурации {Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(74)}: Ошибка при вызове метода контекста (ПрочитатьXML)

Удивлению не было предела. Казалось бы столько раз выполнял подобную процедуру. Но такое в первый раз. Оценив шансы на то, что в интернете быстрее найду решение проблемы, чем в документации, оказался прав. На форуме сайта infostart была найдена подсказка о том, что спешка меня подвела.

Таким образом, оценив версию релиза предоставленной базы с версией папки шабонов, изкоторой был выбран файл обработки для формирования описания структуры метаданных конфигурации, стало ясно, что проблема в том, что обработка (точнее релиз, с которым она была предоставлена) не соответствует релизу базы.

1С 8 конвертация данных Ошибка разбора xml при загрузке описания структуры конфигурации, конфы

Соответственно, установка обновления 1С: Конвертация данных релиза 2.1.7.1 и использование файла MD82Exp.epf из папки шаблона релиза разрешило проблему. Ошибка больше не проявилась.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

14-12-2016

Журавлев А.С.
(Сайт www.azhur-c.ru)

Sergei
26.10.2011 13:13 Прочитано: 9559

При загрузке данных из файла возникает следующая ошибка: {Форма.Форма.Форма(99)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ПередачаОС = ПрочитатьXML(ЧтениеXML);
по причине:
Значения данного типа не могут быть представлены в XML

Вот код:

Код 1C v 8.х

 ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлам+"ПередачаОС.xml");
ПередачаОС = ПрочитатьXML(ЧтениеXML);
ДокументОбъект = Документы.ПередачаОС.СоздатьДокумент();
Документ = Документы.ПередачаОС.ПолучитьФормуНовогоДокумента();
Документ.Открыть();
ЧтениеXML.Закрыть()

Изменено 26.10.11 15:34:34 по причине: Разукрасил код

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
26.10.2011 14:50 Ответ № 1

(0) Sergei, а откуда у тебя файл? каким кодом его выгружал?

Sergei
26.10.2011 14:59 Ответ № 2

Делал следующую выгрузку:
Код 1C v 8.х

 Файл = Новый ЗаписьXML;
Файл.ОткрытьФайл(ПутьКФайлам+"ПередачаОС.xml");
Файл.ЗаписатьОбъявлениеXML();
Файл.ЗаписатьНачалоЭлемента("Корневой");
Файл.ЗаписатьАтрибут("Документ", "ПередачаОС");
Файл.ЗаписатьКомментарий("Формирование списка документов");
Выборка = Документы.ПередачаОС.Выбрать();
Пока Выборка.Следующий() Цикл
Файл.ЗаписатьНачалоЭлемента("Документ");
Файл.ЗаписатьАтрибут("Номер", Строка(Выборка.Номер));
Файл.ЗаписатьАтрибут("Дата", Строка(Выборка.Дата));
Файл.ЗаписатьАтрибут("Организация", Строка(Выборка.Организация));
Файл.ЗаписатьАтрибут("Контрагент", Строка(Выборка.Контрагент));
Файл.ЗаписатьАтрибут("ДоговорКонтрагента", Строка(Выборка.ДоговорКонтрагента));
Для Каждого НовСтрока Из Выборка.ОС Цикл
Файл.ЗаписатьНачалоЭлемента("Строка");
Файл.ЗаписатьАтрибут("ОсновноеСредство", Строка(НовСтрока.ОсновноеСредство));
Файл.ЗаписатьАтрибут("Сумма", Строка(НовСтрока.Сумма));
Файл.ЗаписатьАтрибут("СтавкаНДС", Строка(НовСтрока.СтавкаНДС));
Файл.ЗаписатьАтрибут("СуммаНДС", Строка(НовСтрока.СуммаНДС));
Файл.ЗаписатьТекст(НовСтрока.ОсновноеСредство.Наименование);
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
Файл.Закрыть();

Изменено 26.10.11 15:34:17 по причине: Разукрасил код

E_Migachev
26.10.2011 15:36 Ответ № 3

(2) Sergei, читай кодом, типо:
Код 1C v 8.х

 ЧтениеXML = Новый ЧтениеXML();

ЧтениеXML.ОткрытьФайл("c:doc.xml");
// Текущим становится элемент Root.
ЧтениеXML.Прочитать();

// Текущим становится элемент с документом.
ЧтениеXML.Прочитать();

// Проверить, сможет ли с данным значением "справиться" система сериализации в данной базе.
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
// Получить ДокументОбъект.РеализацияТоваровУслуг.
ЗагружаемыйОбъект = ПрочитатьXML(ЧтениеXML);
ЗагружаемыйОбъект.Записать();
КонецЕсли;

ЧтениеXML.Закрыть()

Подсказка: Вы получили ответ на свой вопрос — закройте вопрос!

  • Ошибка при вызове метода контекста записатьxml
  • Ошибка при вызове метода контекста записатьjson приемник данных json не открыт
  • Ошибка при вызове метода контекста записатьjson http сервис 1с
  • Ошибка при вызове метода контекста записать ошибка доступа к файлу
  • Ошибка при вызове метода контекста записать не удалось записать номенклатура