Как правильно подойти к вопросу: 1c odata как выбрать поле в ссылке составного типа?

Ссылка скопирована
1 ответ

Есть запросhttps://domen/base/odata/standard.odata/Informatio...Сейчас ситуация такая:. Поле "Склад" разворачивается в огромную портянку, хотя мне от туда нужно 1 поле Description. Если делать по аналогии с номенклатурой "Склад/Description" запрос падает с ошибкой (поле склад - составной реквизит).

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Андрей PHP Ответ

В 1С OData составной тип нельзя разворачивать так же просто, как обычную ссылку. Если реквизит Склад имеет составной тип, сервер не знает заранее, на какой справочник или документ указывает конкретное значение, поэтому выражение Склад/Description может падать. Для обычной ссылки expand/select работает, для составной ссылки часто нужно сначала определить тип или работать через представление.

Самый простой вариант — запросить само поле и посмотреть, что реально возвращает OData: __metadata, Ref_Key, Type, Presentation или что-то похожее. В типовых конфигурациях часто есть поле представления, которое уже содержит читаемое имя объекта. Если нужно только название для вывода, ищите СкладPresentation, Склад_Type, Presentation или аналогичное поле в metadata.

Сначала откройте metadata:

https://domain/base/odata/standard.odata/$metadata

https://domain/base/odata/standard.odata/$metadata

Найдите entity, где расположен реквизит Склад, и посмотрите тип свойства. Если это Edm.String/Presentation — можно выбрать напрямую. Если это complex/navigation property с составным типом, прямой путь Склад/Description может быть невозможен.

Варианты решения:

  • использовать поле представления, если оно опубликовано;
  • сделать отдельный запрос по Ref_Key в нужный справочник после определения типа;
  • добавить на стороне 1С отдельный реквизит/расширение/HTTP-сервис, который возвращает нужное Description;
  • если тип склада фактически всегда один, привести запрос к конкретному справочнику отдельным вторым шагом.

Для интеграции я бы не пытался вытянуть все через один универсальный OData URL. Надежнее получить документ/строку с ключом склада, понять тип ссылки, затем вторым запросом обратиться к конкретному набору данных. Если таких запросов много, лучше сделать небольшой серверный метод в 1С, который сразу отдаёт плоский JSON: document_id, warehouse_key, warehouse_name. Это быстрее, понятнее и не зависит от особенностей публикации составных типов в standard.odata.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно