Ошибка при вызове метода контекста прочитатьxdto

Ошибка SOAP сервера
   PsyTech

20.07.15 — 11:46

Всем привет!

При обращении к методу сервиса 1с из 1с ошибка:

«Ошибка SOAP сервера:  Неизвестная ошибка. {WebСервис.NumerationSF.Модуль(7)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)

по причине:

{WebСервис.NumerationSF.Модуль(7)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)

по причине:

Несоответствие типов (параметр номер ‘1’)»

Обращаюсь вот так:

    Определения = Новый WSОпределения(«ссылка на сервис»);

    Прокси = Новый WSПрокси(Определения, «http://www.w3.org/2001/XMLSchema»;, «NumerationSF», «NumerationSFSoap»);

    
    WSПараметр = СериализаторXDTO.ЗаписатьXDTO(СтрокаXML);

    
    Ответ = Прокси.GetNumberSF(WSПараметр);

из SOAPUI тот-же запрос работает. В чем ошибка?

   PsyTech

1 — 20.07.15 — 11:47

Прокси тут лишний

   PsyTech

2 — 20.07.15 — 11:50

тип параметра anyType

   Остап Сулейманович

3 — 20.07.15 — 11:51

(0) Нужно смотреть в модуле вот этого вот : «NumerationSF» в строке (7).

Скорее всего неправильно с точки зрения сервиса выглядит содержимое вот этого вот : «СтрокаXML».

   PsyTech

4 — 20.07.15 — 11:57

(3) А при запросе из soapui этот же запрос срабатывает…

   Остап Сулейманович

5 — 20.07.15 — 11:58

(4) Ну так сравни «СтрокаXML» в 1С и тоже самое в soapui.

   PsyTech

6 — 20.07.15 — 12:05

(5) в soapui обертка только есть стандартно. Не мешала никогда.

почему-то на тип ругается: «Несоответствие типов (параметр номер ‘1’)»

   Остап Сулейманович

7 — 20.07.15 — 12:08

(6) «в soapui обертка только есть стандартно.» Это как понять? Метод вызывается вообще без параметра?

   Serginio1

8 — 20.07.15 — 12:12

Сразу несколько вопросов

NumerationSF и пространство имен http://www.w3.org/2001/XMLSchema

Если хочешь получить объект XDTO из строки то

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

    ЧтениеXML.УстановитьСтроку(СтрокаXML);

    ЧтениеXML.ПерейтиКСодержимому();

    WSПараметр =Прокси.Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));

   Serginio1

9 — 20.07.15 — 12:13

Фабрика=Прокси.ФабрикаXDTO;

WSПараметр =Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));

   PsyTech

10 — 20.07.15 — 12:23

(8) Ошибка преобразования данных XDTO:

НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

по причине:

   PsyTech

11 — 20.07.15 — 12:25

В базе сервиса тип параметра «string», а при создании ws-ссылки «anyType»

   Serginio1

12 — 20.07.15 — 12:27

(0)

используй динамическое подключение если не знаешь какое пространство имен используешь

ОпределениеТ=Новый WSОпределения(«http://домен_сайта/имя_публикации_базы/ws/имя_веб_сервиса?wsdl»;);

    WSСервис=ОпределениеТ.Сервисы[0];

    ПроксиWS=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);

    
    
    ПроксиWS.Пользователь = «ХХХ»;

    ПроксиWS.Пароль = «УУУУ»;

    ПроксиWS.ВызватьКакойтоМетод();

   PsyTech

13 — 20.07.15 — 12:34

Ошибка преобразования данных XDTO:

   PsyTech

14 — 20.07.15 — 12:36

в браузере string.

Не понимаю, почему anyType у меня

   PsyTech

15 — 20.07.15 — 12:45

(8)Ошибка преобразования данных XDTO:

НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: Body    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

   PsyTech

16 — 20.07.15 — 13:02

Определения = Новый WSОпределения(«»);

    Прокси = Новый WSПрокси(Определения, «http://www.w3.org/2001/XMLSchema»;, «NumerationSF», «NumerationSFSoap»);

    Фабрика=Прокси.ФабрикаXDTO;

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

    ЧтениеXML.УстановитьСтроку(СтрокаXML);

    ЧтениеXML.ПерейтиКСодержимому();

    ТипWSПараметра = Прокси.ФабрикаXDTO.Тип(«http://www.w3.org/2001/XMLSchema»;, «string»);

    
    WSПараметр =Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипWSПараметра);        

    
    Ответ = Прокси.GetNumberSF(WSПараметр);

{Форма.Форма.Форма(67)}: Ошибка при вызове метода контекста (ПрочитатьXML)

    WSПараметр =Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипWSПараметра);        

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: Body    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

   PsyTech

17 — 20.07.15 — 13:04

откуда anyType, если в браузере и в конфе сервиса string?

И что с этим делать?

   cw014

18 — 20.07.15 — 13:13

Если string, тогда зачем ты туда пихаешь ОбъектXDTO? Пихай стринг

   cw014

19 — 20.07.15 — 13:14

Определения = Новый WSОпределения(«ссылка на сервис»);

    Прокси = Новый WSПрокси(Определения, «http://www.w3.org/2001/XMLSchema»;;, «NumerationSF», «NumerationSFSoap»);

    
    //Это тут не нужно

    //WSПараметр = СериализаторXDTO.ЗаписатьXDTO(СтрокаXML);

    
    //Ответ = Прокси.GetNumberSF(WSПараметр);

    Ответ = Прокси.GetNumberSF(СтрокаXML);

    //Если взлетит — с тебя 500 р

   Serginio1

20 — 20.07.15 — 13:42

(17) Внимательно посмотри на 12. И посмотри какое пространство имен у WSСервис.URIПространстваИмен

   PsyTech

21 — 20.07.15 — 14:13

(20) WSСервис.URIПространстваИмен = «http://www.w3.org/2001/XMLSchema»;

   efim16rus

22 — 20.07.15 — 14:17

«СтрокаXML» у тебя какой тип имеет?

   PsyTech

23 — 20.07.15 — 14:18

(19)

{Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (GetNumberSF)

    Ответ = Прокси.GetNumberSF(СтрокаXML);    

по причине:

Несоответствие типов (параметр номер ‘1’)

   PsyTech

24 — 20.07.15 — 14:19

(22) Строка

   efim16rus

25 — 20.07.15 — 14:22

ТипWSПараметра = Прокси.ФабрикаXDTO.Тип(«http://www.w3.org/2001/XMLSchema»;;, «string»);    

Парам                    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);

    ВидДокумента.Key                = «Название_параметра»;

    ВидДокумента.Value                = СтрокаXML;

    ВидДокумента.ValueType            = «string»;

   efim16rus

26 — 20.07.15 — 14:22

ТипWSПараметра = Прокси.ФабрикаXDTO.Тип(«http://www.w3.org/2001/XMLSchema»;;;, «string»);    

Парам                    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);

    Парам.Key                = «Название_параметра»;

    Парам.Value                = СтрокаXML;

    Парам.ValueType            = «string»;

   efim16rus

27 — 20.07.15 — 14:23

Ответ = Прокси.GetNumberSF(Парам);

   efim16rus

28 — 20.07.15 — 14:23

Попробуй так

   Serginio1

29 — 20.07.15 — 14:41

Вообще то http://www.w3.org/2001/XMLSchema это стандартное пространство имен уже зашитое.

А кто задал такое имя пространства имен? Если это сервис 1С

   Serginio1

30 — 20.07.15 — 14:46

Ты бы хоть показал описание WSDL и типы используемые GetNumberSF

   Serginio1

31 — 20.07.15 — 14:46

Или выложи WSDL

   PsyTech

32 — 20.07.15 — 14:49

(28) Параметр = неопределено

   PsyTech

33 — 20.07.15 — 14:50

(30) тип 1 — string

   PsyTech

34 — 20.07.15 — 14:52

(30) вот фрагмент описания:

<definitions xmlns=»http://schemas.xmlsoap.org/wsdl/»; xmlns:soap12bind=»http://schemas.xmlsoap.org/wsdl/soap12/»; xmlns:soapbind=»http://schemas.xmlsoap.org/wsdl/soap/»; xmlns:tns=»http://www.w3.org/2001/XMLSchema»; xmlns:xsd=»http://www.w3.org/2001/XMLSchema»; xmlns:xsd1=»http://www.w3.org/2001/XMLSchema»; name=»NumerationSF» targetNamespace=»http://www.w3.org/2001/XMLSchema»>;

<types>

<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»; xmlns:xs1=»http://www.w3.org/2001/XMLSchema»; targetNamespace=»http://www.w3.org/2001/XMLSchema»; elementFormDefault=»qualified»>

<xs:element name=»GetNumberSF»>

<xs:complexType>

<xs:sequence>

<xs:element name=»RequestXML» type=»xs:string»/>

</xs:sequence>

</xs:complexType>

</xs:element>

   PsyTech

35 — 20.07.15 — 14:54

Если в 1с создать ws-ссылку —  тип у параметра будет: anyType (http://www.w3.org/2001/XMLSchema)

   efim16rus

36 — 20.07.15 — 14:57

Скинь wsdl целиком

   PsyTech

37 — 20.07.15 — 15:00

Вариант (0) работает, но на вход в процедуру сервиса приходит почему-то Строка, а не ОбъектXDTO. Из SOAPUI приходит ОбъектXDTO.

Как сделать, чтоб приходил ОбъектXDTO?

   cw014

38 — 20.07.15 — 15:04

Web-Service самописный? Где находится? Есть доступ к исходникам?

   efim16rus

39 — 20.07.15 — 15:09

СтрокаТип = WSПрокси.ФабрикаXDTO.Тип(«http://www.w3.org/2001/XMLSchema»,»string»;);

СтрокаЗначение = WSПрокси.ФабрикаXDTO.Создать(СтрокаТип,СтрокаXML);

Ответ = WSПрокси.GetNumberSF(СтрокаЗначение);

   efim16rus

40 — 20.07.15 — 15:13

Выдернул из обработки клиент банка. Если не поможет, скидывай wsdl целиком

   Serginio1

41 — 20.07.15 — 15:29

Измените пространство имен у Веб сервиса

Неправильно.

targetNamespace=»http://www.w3.org/2001/XMLSchema»>;;

Замените на какойнибудь

http://www.ИмяВашейКомпании.ru

Ну и раз параметр строка

Ответ = Прокси.GetNumberSF(СтрокаXML);

   PsyTech

42 — 20.07.15 — 15:34

(39) не, на входе получается Строка, а не ОбъектXDTO

   PsyTech

43 — 20.07.15 — 15:47

(8) на входе в сервисе все равно Строка получается

   Serginio1

44 — 20.07.15 — 15:54

(43) Еще раз задай нормальное пространство имен

Судя по описанию у тебя параметр строка.

   Serginio1

45 — 20.07.15 — 15:55

(42) С с чем сравниваешь?

Скачай Fiddler2 и смотри им какие запросы кто отправляет

   Serginio1

46 — 20.07.15 — 15:56

   PsyTech

47 — 20.07.15 — 16:14

(44) а какое нормальное?

   PsyTech

48 — 20.07.15 — 16:34

(45) В отладке сервиса — если из 1с запрос приходит — на входе Строка, из других систем — ОбъектXDTO

   Serginio1

49 — 20.07.15 — 16:49

(47) Ну ты читай, что я тебе пишу в 41

Например http://www.ИмяВашейКомпании.ru

(48) Так, а что у тебя реально представляет параметр в сервисе?

Фабрика=Прокси.ФабрикаXDTO;

Тип=Фабрика.Тип(ПространствоИмен,НазваниеТипа);

Парам=Фабрика.Создать(Тип);

   PsyTech

50 — 21.07.15 — 09:19

(49) Прошу прощения, немного напутал.

Если отправляю запрос из SOAPUI — на входе сервиса ОбъектXDTO и все отрабатывает без ошибки.

Если отправляю из 1С — на входе тоже ОбъектXDTO, но видимо другой и ошибка появляется при попытке прочитать ОбъектXDTO:

    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);

    СтрокаХМЛ = Сериализатор.ПрочитатьXDTO(RequestXML);

Разница в объектах:

от SOAPUI в отладке вижу просто ОбъектXDTO;

от 1с в отладке видны еще его поля, т.е. тэги xml, которую я передаю.

Видимо как-то не так отправляю?

   PsyTech

51 — 21.07.15 — 09:20

А отправляю вот так:

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

    ЧтениеXML.УстановитьСтроку(СтрокаXML);

    ЧтениеXML.ПерейтиКСодержимому();

    Определения = Новый WSОпределения(«http://10.6.0.47/b83Services/ws/NumerationSF.1cws?wsdl»;);

    WSПрокси    = Новый WSПрокси(Определения, «http://www.w3.org/2001/XMLSchema»;, «NumerationSF», «NumerationSFSoap»);    

    WSПараметр  = WSПрокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, WSПрокси.ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));    

    
    Ответ = WSПрокси.GetNumberSF(WSПараметр);

   PsyTech

52 — 21.07.15 — 09:35

Ваще не пойму — почему туда приходит ОбъектXDTO, а не строка?

В моей конфе в сервисы на вход приходит строка всегда, но тут платформа 8.3 (8.3.5.1186), а там 8.3 (8.3.6.1977). Может в платформе дело?

   PsyTech

53 — 21.07.15 — 09:39

(52) Нет не в платформа, а в способе отправки.

Вопрос — почему разные ОбъектXDTO приходят от SOAPUI и от 1с?

   efim16rus

54 — 21.07.15 — 09:48

Скорее всего у тебя URIПространстваИменСервиса не http://www.w3.org/2001/XMLSchema, а собственные. Посмотри в wsdl какие используются пространства имен.

   PsyTech

55 — 21.07.15 — 09:57

   efim16rus

56 — 21.07.15 — 10:09

Фидлером не смотрел какой запрос 1с формирует?

   efim16rus

57 — 21.07.15 — 10:11

Сделай как в(45)

  

Serginio1

58 — 21.07.15 — 11:18

(51) Так пространство имен и не стал переименовывать?

Грабли метода Прочитать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</Сумма>
</РасчетФБ>
</Документы>
...

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

В платформе 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С.

Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(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)

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове конструктора wsпрокси
  • Ошибка при вызове метода контекста прочитатьjson непредвиденный символ при чтении json
  • Ошибка при вызове метода контекста прочитатьjson недопустимое состояние потока записи json
  • Ошибка при вызове конструктора wsопределения при создании описания сервиса произошла ошибка
  • Ошибка при вызове метода контекста прочитать ошибка совместного доступа к файлу