HTTP сервис изменение объекта

1. Azgerd 15.05.25 14:37 Сейчас в теме
Здравствуйте! Есть обработка по изменению реквизита справочника с помощью http сервиса
&НаКлиенте
Асинх Процедура ИзменитьАртикулАсинх()

	ПараметрыЗаписи=Новый ПараметрыЗаписиJSON;
	Запись=Новый ЗаписьJSON;
	Запись.УстановитьСтроку(ПараметрыЗаписи);
	
	НовыйАртикул = Объект.НовыйАртикул;
	КодНоменклатуры = Объект.Номенклатура.Код;
	Стр=ИзменяемыеДанные(НовыйАртикул);
	
	
	ЗаписатьJSON(Запись,Стр);
	
	Данные=Запись.Закрыть();
	СерверИсточник = "localhost";
	//Адрес="/wstester/odata/standard.odata/Catalog_Номенклатура?$filter=Code eq '000000010'&$format=application/json;";
	Адрес="/wstester/odata/standard.odata/Catalog_Номенклатура(guid'cdcb0e84-ba65-11e7-88e8-742f6881dbd9')?$format=application/json;";

	НТТР = Новый HTTPСоединение(СерверИсточник);
	HTTPЗапрос=Новый HTTPЗапрос(Адрес);
	HTTPЗапрос.УстановитьТелоИзСтроки(Данные);
	Попытка
		Ответ = Ждать НТТР.ИзменитьАсинх(HTTPЗапрос);
	Исключение
		Сообщить("Сработало исключение");
	КонецПопытки;
	
	
	Если Ответ.КодСостояния=200 Тогда
		
		Сообщить("Артикул изменен!");
		
	Иначе
		
		Сообщить("Ошибка, код состояния:"+Ответ.КодСостояния);
		
	КонецЕсли;
	
	
КонецПроцедуры
Показать

Вопрос: когда отбор в URL по УУИД, (как сейчас установлено в коде), все отрабатывает нормально, Код состояния возвращается 200 и метод изменяет нужный реквизит справочника, но когда пытаюсь сделать фильтр по коду (закомментированная строка в коде), метод возвращает статус 405 (указанный метод не применим к данному ресурсу). Хотя когда пытаюсь набрать в браузере , то обе строки корректно отображают данные запрашиваемого элемента справочника, что с фильтром по коду (параметр ?$filter=Code eq '000000010'), что с отбором по УУИД (Catalog_Номенклатура(guid'cdcb0e84-ba65-11e7-88e8-742f6881dbd9')) ?
По теме из базы знаний
Найденные решения
7. spacecraft 15.05.25 22:23 Сейчас в теме
(5) обходим полученный результат и выполняем повторный запрос с уже известным guid ("Ref_Key")
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. anton13m 4 15.05.25 14:46 Сейчас в теме
(1)
Есть обработка

Круто, поделиться хочешь?
3. Sashares 33 15.05.25 14:56 Сейчас в теме
(1)
?$filter=Code eq '000000010')


Не должно быть пробелов в адресе. Кодируй строку.
4. Azgerd 15.05.25 15:34 Сейчас в теме
(3)
?$filter=Code eq '000000010')

А как её закодировать, пробовал вместо пробелов %20 поставить и + вместо пробела - не работает.
6. SlavaKron 15.05.25 16:57 Сейчас в теме
(4) КодироватьСтроку(Строка, СпособКодированияСтроки.КодировкаURL)
8. user1936660 16.05.25 08:28 Сейчас в теме
(1)
метод возвращает статус 405 (указанный метод не применим к данному ресурсу). Хотя когда пытаюсь набрать в браузере
Еще один персонаж без понимания основ того, как оно работает.

Когда ты "набираешь в браузере", ты всегда отправляешь GET, который возвращает тебе результат отбора. Когда вызываешь своё ИзменитьАсинх, то вызываешь PATCH, который должен изменить единственный объект.

Запрос с твоим фильтром по коду оперирует коллекцией, потому что в базе может существововать несколько объектов с таким кодом, это как раз твои "квадратные скобочки". Запрос с отбором по ссылке оперирует с единственным объектом. Метод PATCH не применим к коллекциям, про что тебе и сообщают ошибкой 405.

Делай, как в (7) написано.
5. Azgerd 15.05.25 16:04 Сейчас в теме
Наверное дело не в пробелах. Эти две URL строки выдают JSON с разной структурой: если указан параметр filtr то возвращает:
{
"odata.metadata": "http://localhost/wstester/odata/standard.odata/$metadata#Catalog_Номенклатура",
"value": [{
"Ref_Key": "cdcb0e84-ba65-11e7-88e8-742f6881dbd9",
"DataVersion": "AAAAGAAAAAA=",
"DeletionMark": false,
"Parent_Key": "00000000-0000-0000-0000-000000000000",
"IsFolder": false,
"Code": "000000010",
"Description": "Новенький",
"Артикул": "5456465454",
"Услуга": true,
"Картинка_Type": "application/xml+xdto",
"Картинка_Base64Data": "",
"ИмяФайла": "",
"Цена": 0,
"Комментарий": "Запись в обычном режиме",
"Predefined": false,
"PredefinedDataName": ""
}]
}
Показать

а если без параметра по УУИД, то JSON другой, здесь реквизиты элемента являются отдельными объектами JSON (нет квадратных скобок)
{
"odata.metadata": "http://localhost/wstester/odata/standard.odata/$metadata#Catalog_Номенклатура/@Element",
"Ref_Key": "cdcb0e84-ba65-11e7-88e8-742f6881dbd9",
"Predefined": false,
"IsFolder": false,
"Parent_Key": "00000000-0000-0000-0000-000000000000",
"DeletionMark": false,
"PredefinedDataName": "",
"DataVersion": "AAAAGAAAAAA=",
"Code": "000000010",
"Description": "Новенький",
"Цена": 0,
"ИмяФайла": "",
"Комментарий": "Запись в обычном режиме",
"Картинка_Type": "application/xml+xdto",
"Картинка_Base64Data": "",
"Артикул": "5456465454",
"Услуга": true
}
Показать
7. spacecraft 15.05.25 22:23 Сейчас в теме
(5) обходим полученный результат и выполняем повторный запрос с уже известным guid ("Ref_Key")
9. Azgerd 16.05.25 08:32 Сейчас в теме
(7) Спасибо, не сразу понял, в этом запросе получается коллекция.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот