Доброго времени суток! Создаю WSПрокси для работы с веб-сервисом, описанным в wsdl-файле. Объект создается, создаются объекты описанны[ типов объектом ФабрикаXDTO, все заполняется. Написано в руководстве, что запрос должен отправляться в форме SOAP-запроса. Я так поняла WSПрокси сам создает структуру этого запроса, остается только передать созданный объект как параметр метода. Но почему-то при попытке вызова метода ошибка вылазит. Вот код:
Определение = Новый WSОпределения(«file:///C:/Users/AUBashinskaya/Desktop/TLConnect.svc»);
Сервис = Определение.Сервисы[0];
Прокси = Новый WSПрокси(
Определение,
«https://www.travelline.ru/Api/TLConnect»;,
«TLConnectService»,
«BasicHttpBinding_ITLConnectService»
);
Прокси.Пароль = «PERc0IDUfbPTolsiDglM»;
Прокси.Пользователь = «pms1cbit»;
Фабрика = Прокси.ФабрикаXDTO;
//далее создание нужной структуры объекта, заполнение данными
…
ТипФ = Фабрика.Тип(«http://www.opentravel.org/OTA/2003/05»;, «OTA_HotelAvailRQ»);
Объект = Фабрика.Создать(ТипФ);
Объект.AvailRequestSegements = AvailRequestSegements;
Прокси.HotelAvailRQ(Объект); //тут возникает ошибка
Текст ошибки:
{Обработка.БИТ_Отель_TravelLine.МодульОбъекта(96)}: Ошибка при вызове метода контекста (HotelAvailRQ)
Прокси.HotelAvailRQ(Объект);
по причине:
Ошибка вызова операции сервиса: {https://www.travelline.ru/Api/TLConnect}:TLConnectService:HotelAvailRQ()
по причине:
Неизвестная ошибка. Ошибка работы с Интернет: Couldn’t resolve host name
по причине:
Ошибка работы с Интернет: Couldn’t resolve host name
Может быть надо указывать какие-то еще параметры? wsdl:
https://www.travelline.ru/Api/TLConnect.svc?singleWsdl
Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Введение
Для создания самого простого веб-сервиса необходимо:
-
создать в дереве метаданных объект Web-Сервис;
- указать его URI пространства имен;
- создать необходимую операцию, если нужно указать ее параметры и тип возвращаемого значения;
- написать обработчик вызываемой операции;
- опубликовать веб-сервис.
После этих действий веб-сервисом можно будет пользоваться. Таким образом будет создан веб-сервис, который сможет оперировать только простыми типами данных.
Итак начнем.
Откройте конфигурацию и в дереве метаданных найдите ветку «Общие — Web-сервисы». Нажмите правой кнопкой и добавьте новый элемент.
Введите имя создаваемого веб-сервиса.
Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов, ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку «Прочее» и укажите параметр «URI пространство имен».
Введите имя создаваемого веб-сервиса.
Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов, ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку «Прочее» и укажите параметр «URI пространство имен».
В документации об этом параметре написано чуть больше чем ничего, примерно то, что это поле служит для идентификации вашего веб-сервиса. Когда я делал свой первый веб-сервис, мне казалось что это ссылка на сайт, на котором я публикую свой веб-сервис и все наименования буду получаться через запрос к этому сайту. На самом деле «URI пространство имен» не что иное как строка определяющая название набора ваших имен (названий веб-сервиса, операций, параметров, типов данных и т.д.). То есть если вы объявите свой тип «integer» то xml-парсер не будет ругаться, так как этот тип принадлежит вашему пространству имен. Мало того если «URI пространство имен» будет содержать русские символы и не будет соответствовать стандарту как формат URI, платформа все равно опубликует такой веб-сервис, и он будет работать. Но по стандартам рекомендуется использовать URI ссылку. Я советую того же самого.
Простое и понятное объяснение пространства имен можно прочитать тут.
Поле «Пакеты XDTO» не обязательное. Оно определяет набор пакетов XDTO в которых вы можете оказать свои типы значений. Это не обязательное поле, по умолчанию вам всегда доступны типы пространства имен «http://www.w3.org/2001/XMLSchema». О пакетах XDTO я расскажу чуть позже.
«Имя файла публикации», это имя файла, в котором хранятся настройки веб-сервиса для Apache(путь к базе и другие) после публикации. Папка, в которой находится этот файл, определяется при публикации. О публикации на веб-сервере будет рассказано позже.
Веб-сервис создан, но еще нет ни одной функции которую он мог бы исполнить. Надо добавить операцию. Для этого добавьте в созданный веб-сервис операцию. Нажмите не веб-веб-сервис правой кнопкой и выберите «Добавить-Операция». Она будет к вашему операнду прибавлять 2 и возвращать значение. Давайте назовем ее «Plus2». Можно указать и русское название, многие клиенты его обработают, но все же могут возникнуть проблемы.
«Тип возвращаемого значения» это тип описанный в указанном вами пакете XDTO или же тип из пространства имен «http://www.w3.org/2001/XMLSchema». Именно в этом типе веб сервис будет возвращать значение.
«Возможно пустое значение» признак что ws-операция может не вернуть значение(nillable=»true«).
«В транзакции» указывает что код веб-сервиса будет выполняться в транзакции. А «Режим управления блокировкой данных» определяет тип блокировки данных при транзакции по умолчанию.
Установим тип возвращаемого значения в int. В поле «Имя метода» укажем имя «Plus2» для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.
Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции
Вы заметили что на входе функции у нас есть параметр «Параметр». Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите «Добавить-Параметр».
«Тип возвращаемого значения» это тип описанный в указанном вами пакете XDTO или же тип из пространства имен «http://www.w3.org/2001/XMLSchema». Именно в этом типе веб сервис будет возвращать значение.
«Возможно пустое значение» признак что ws-операция может не вернуть значение(nillable=»true«).
«В транзакции» указывает что код веб-сервиса будет выполняться в транзакции. А «Режим управления блокировкой данных» определяет тип блокировки данных при транзакции по умолчанию.
Установим тип возвращаемого значения в int. В поле «Имя метода» укажем имя «Plus2» для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.
Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции
Вы заметили что на входе функции у нас есть параметр «Параметр». Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите «Добавить-Параметр».
Давайте назовем его «Param». Названия параметров тоже можно указывать русскими, мало того класс SoapClient языка PHP работает с ними корректно, ведь параметры передаются через массив. Желательно использовать кодировку UTF-8.
Укажем «Тип значения» int из пространства имен «http://www.w3.org/2001/XMLSchema».
Свойство «Возможно пустое» указывает что можно передать значение null в веб-операцию.
«Направление передачи» указывает по значению или по «ссылке» передается операнд в ws-операцию. Возможные значение «Входной», «Выходной», «Входной-Выходной». Таким образом если вы для параметра укажете «Выходной» или «Входной-Выходной» то сможете менять значения операнда. В результате xml сообщение-ответ дополнится строкой с новым значением операнда. Я пока не сталкивался с задачами которые можно решить только используя Выходное направление операнда, потому не могу дать какие то комментарии по этому свойству.
Вот в принципе и всё! Веб сервис создан, но существует он пока что только как описание в вашей конфигурации. Для того что бы им воспользоваться надо его опубликовать на вашем веб-сервере. Как опубликовать вы можете прочитать в статье 1С:Предприятие 8. Веб-сервисы. Публикация и тестирование.
доброго времени суток всем! у меня возникла следующая проблема при создании WS-ссылки: в конфигураторе создается, но при проверке в режиме исполнения выдает ошибку: {Обработка.пример.Форма.Форма.Форма}: Ошибка при вызове метода контекста (СоздатьWSПрокси) ПроксиСервер = WSСсылки.WSСсылка2.СоздатьWSПрокси( «;, «WebService», » WebServiceSoap» ); по причине: Порт не найден. {: WebServiceSoap прочитала кучу статей на форумах, в том числе и здесь, проверила регистр, с ним все нормально. подскажите, пожалуйста,а то руководитель меня морально съест(
точка с запятой там точно надо?
«;, там нет точки с запятой ни в конфигураторе,ни в ошибке
видно, в сообщении при отправке автоматом прибавляется
в версии 8.3 синтаксис: СоздатьWSПрокси(<URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяПорта>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>)
первые три параметра являются обязательными
здравствуйте еще раз. в процессе создания WSпрокси возник следующий вопрос: {Обработка.пример.Форма.Форма.Форма}: Ошибка при вызове конструктора (WSОпределения) Определения = Новый WSОпределения(«;, «Системный администратор», «»); по причине: При создании описания сервиса произошла ошибка.
Сделай пользователя без пробела.
попробовала,выдает ту же ошибку
ну, про точку с запятой, уже говорили?
и кавычки внутри кавычек.
«WebServiceSoap», там пробел был лишний…извиняюсь за свой чудовищный затуп(( кстати,кавычки добавляются сами при копировании сюда кода
теперь сообщает,что {Обработка.пример.Форма.Форма.Форма}: Ошибка при вызове метода контекста (Обмен) РезультатыИмпорта = Прокси.Обмен; по причине: Ошибка вызова операции сервиса: {:Обмен по причине: Ошибка SOAP сервера: Обязательное возвращаемое значение не задано: :Обмен
Н так воспользовался бы ссылкой из 4. Так дай описании : :Обмен Проверь что возвращает функция например в SoapUI
в соапе при вводе ссылки просит атентификацию, при вводе данных выдает ошибку и не создает проект, пишет Error loading []: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected element: CDAT
WSDLException (at /html): faultCode=INVALID_WSDL: Expected element ‘{‘. — стабильно выдает соап после аутентификации
Ты бы хоть WSDL выложил. Тут ясновидцев мало
— проверяю эту вс-ссылку в соапе, выдает приведенную выше ошибку. в браузере сообщает: This XML file does not appear to have any style information associated with it. The document tree is shown below. <faultstring> Операция не найдена: {:Обмен </faultstring> по-видимому,косяк в функции Обмен , только непонятно,какой, код я сверяла со статьей,по которой делала
Ну так посмотри, что у тебя в отладчике. Проще вынести код в общий модуль, а из модуля вэб сервиса дергать эти методы А при отладке можно дернуть метод из толстого клиента
Посмотри в Оладчике, что тебе Прокси выдает. Какие методы.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
-
Доброго времени суток.
Пытаюсь подключиться к сервису, вызвать метод и обратно получить конечно же возвращаемое значение.Процедура ПолучитьДанныеСервер() Попытка ОпределениеWS = Новый WSОпределения("test.wsdl"); Исключение ОпределениеWS = Неопределено; Отказ = ИСТИНА; СообщениеОбОшибке = "Ошибка получения определения сервиса: " + ОписаниеОшибки(); КонецПопытки; WSПрокси = Неопределено; Если ОпределениеWS <> Неопределено Тогда Сервис = ОпределениеWS.Сервисы.Получить(0); ИмяСервиса = Сервис.Имя; ТочкаПодключения = Сервис.ТочкиПодключения.Получить(0).Имя; WSПрокси = Новый WSПрокси(ОпределениеWS, Сервис.URIПространстваИмен, ИмяСервиса, ТочкаПодключения); WSПрокси.Пользователь = "user"; WSПрокси.Пароль = "password"; ТипGetSignInfo = WSПрокси.ФабрикаXDTO.Тип(Сервис.URIПространстваИмен, "GetSignInfo"); ПараметрыМетода = WSПрокси.ФабрикаXDTO.Создать(ТипGetSignInfo); СтрокаBase64 = СоздатьСтрокуBase64(СокрЛП(Параметр)); //ПараметрыМетода.signature = Base64Значение(СтрокаBase64); Тут я уже всё перетыкал ПараметрыМетода.signature = СокрЛП(Параметр);//Base64Значение(СокрЛП(Параметр)); //ПараметрыМетода.content = ""; - необязательный параметр, не заполняем ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода); // Вот тут и вываливается ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода); КонецЕсли; КонецПроцедуры Функция СоздатьСтрокуBase64(Строка) Экспорт ВременныйФайл = ПолучитьИмяВременногоФайла(); ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, "CESU-8"); ЗаписьТекста.Записать(Строка); ЗаписьТекста.Закрыть(); ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл); СтрокаBase64 = Base64Строка(ДД_Файла); УдалитьФайлы(ВременныйФайл); Возврат СтрокаBase64; КонецФункции
Вылетает с ошибкой:
{Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (GetSignInfo)
ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
по причине:
Ошибка вызова операции сервиса: {urn:interface}:interfacePublicService:GetSignInfo()
по причине:
Неизвестная ошибка. Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.
по причине:
Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.Скриншот из дерева конфигурации:
Ветка «Web-сервисы» — http://gyazo.com/36d8eed9ba85d2cf4f941ee32f1da03d
Ветка «Типы объектов» модели данных — http://gyazo.com/df4b6fa8d1a63b1b2323a0457ada7199
У обоих параметров тип одинаковый, но content не обязателен для заполнения.Саму ссылку просили не сбрасывать, надеюсь удастся решить проблему без неё…
По такому же алгоритму пытаюсь подключиться к нацбанку — никаких проблем, всё отработало быстро и с первого раза…
В чём может быть проблема? Как правильно передавать/преобразовывать строку в формат «base64Binary (http://www.w3.org/2001/XMLSchema)«, вроде уже все варианты перекастовал, все танцы с бубном отплясал, а всё равно вылетает одна и та же ошибка.
Последнее редактирование: 24 мар 2016 -
Решил поиграться с : «Новый ЗаписьТекста(ВременныйФайл, «CESU-8»)«, перепробовал все кодировки, единственное чего удалось добиться — изменение ошибки на:
{Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (GetSignInfo)
ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
по причине:
Ошибка вызова операции сервиса: {urn:interface}:interfacePublicService:GetSignInfo()
по причине:
Ошибка SOAP сервера: Подпись не вернаP.S. В SoapUI всё отрабатывает правильно
-
Может кто-нибудь подскажет сервисы, где в качестве параметра нужно передавать тип base64Binary (http://www.w3.org/2001/XMLSchema) ?
Хочу понять это у меня руки из булок растут или просто сервис с 1С не дружит.Может быть есть какие-нибудь способы проверить правильность моей итоговой кодировки?
Последнее редактирование: 24 мар 2016 -
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
А если самому в 1С-ке создать пустую конфигурацию, сделать в ней веб-сервис и попробовать погонять данные?
-
Вообще не понял как таким образом можно проверить корректность преобразования строки в формат base64Binary.
Поясните плз -
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
На сколько понял суть проблемы:есть какие-то сложности с передачей значения типа Base64Binary во входной параметр функции удаленного веб-сервиса, так?
-
Видимо да… Ошибки выше указаны.
Или проблема с кодировкой, хоть как и указывал выше перепробовал, как мне кажется все. -
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
1С-ка умеет только Base64Значение и Base64Строка.
Так понимаю, в параметр функции веб-сервиса нужно пихать Base64Значение, т.е. передаваться должно значение типа ДвоичныеДанные, а не строка.
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
я пока не понимаю, к чему вся эта куча преобразований типов значений, почему нельзя сделать просто:
ЗначениеСтроквогоТипа = «hello, world!»;
WebService.Func.Parameter = base64Значение(ЗначениеСтроковогоТипа)
?
так мож проблемы не в этом, а в том, что нужно еще чего-то запихать в параметры функции удаленного Web-сервиса?
-
Есть ещё второй параметр, но он не обязательный, я его вообще не заполняю, либо заполняю как «» — пустая строка, а ошибки все равно те же
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
Какой тип значения этого параметра?
-
В самом верху всё уже расписал) — «У обоих параметров тип одинаковый, но content не обязателен для заполнения.»
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
Вот не нужно придумывать
Если тип значения определен, то в него и нужно пихать пустое значение этого типа. Это ж — SOAP, структура передаваемых данных — фиксированная. -
При перпедаче пустой строки параметр автоматом заполняется пустыми двоичными данными
Как иначе создать пустые двоичные данные? -
Создал пустые двоичные данные по тому же принципу — ПараметрыМетода.content = Base64Значение(СоздатьСтрокуBase64(«»));
Результат тот же. -
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.876
- Симпатии:
- 1.027
- Баллы:
- 204
Ну тада х.з.. Общайся с ТП удаленного Web-сервиса
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Хочу заметить, что 1С не совсем корректно работает с некоторыми web-сервисами
-
А как определить степень корректности если это вообще возможно?)))))
— Объединение сообщений, 24 мар 2016 —
Повторю вопрос: Может кто-нибудь подскажет сервисы, где в качестве параметра нужно передавать тип base64Binary (http://www.w3.org/2001/XMLSchema) ?
Тогда уже точно бы понимал что косяк мой/1с/сервиса))) -
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
1С недоразвита в плане общения как с новыми технологиями, так и со старыми
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.