Вопрос

Интеграция с 1С. OData не могу получить табилчную часть.

Коллеги, подскажите как получить табличную часть документа.

Я использую сервис 0/ServiceModel/EntityDataService.svc/DocumentCollection/ GET запросом я получаю коллекцию документов по своему дистрибьютору в XML формате.

А как мне получить информацию о товарах которые были проданы в этом документе и их количестве?

Нравится

8 комментариев
Лучший ответ

Вам нужно получить счет или заказ и пройтись по всем продуктам в них.

Вам нужно получить счет или заказ и пройтись по всем продуктам в них.

EntityDataService работает аналогично для объекта каждой детали. То есть для детали продуктов в счёте (объект InvoiceProduct) будет 0/ServiceModel/EntityDataService.svc/InvoiceProductCollection/. А наложить фильтр по Id счёта можно подобно тому, как фильтруют по контакту тут.

Григорий Чех,

 Григорий мне нужно получить заказ, который торговый представитель набил в КПК, чтобы перекинуть его в нашу учетную систему 1С.

Я нашел что коллекцию товаров можно получить из OfferingCollection.

Зверев Александр,

 Александр, вы не подскажите, как то можно наложить сложные фильтры на результаты нескольких коллекций. Грубо говоря мне нужно получить

OfferingCollection по документам из DocumentCollection по клиентам из AccountCollection у которых &filter=Distributor/Id eq мой Дистрибьтор/мEdm.Guid'e63ac989-9760-4453-b45f-943e906447e8'

Или здесь можно только последовательно бегать по коллекциям и внутри каждой получать значения других коллекций. Т.е. я получаю всех клиентов своего дистрибьютора, в цикле бегаю по ним и получаю документы этого клиента, внутри документа получаю OfferingCollection и бегаю по ней?

 

Видимо да, из одного запроса получать список Id результатов, затем поочерёдно с ними работать. Возможно, есть смысл создать в базе view по этим условиям, возвращающий плоскую таблицу со всей информацией, к нему объект в конфигурации с такими же колонками и затем работать по OData с ним, накладывая простые фильтры по Id или названию.

Способы построения запросов к OData с фильтрацией описаны тут и тут.

Зверев Александр,

 Спасибо! Еще вопрос:

Вы не в курсе, а можно ли сделать фильтр по массиву значений? Например я получил 100 документов (DocumentCollection), и хочу сразу в одном запросе получить все строки этих документов (DocumentOfferingCollection). Я могу как то в фильтр загнать все 100 Document/id и единым запросом получить все табличные части всех документов. А потом уже у себя циклом их перебирать и к каждому документу прибавлять его строки.

Если записей немного, можно написать условие с OR, как описано по ссылке выше. Но 100 записей, скорее всего, не влезет в длину строки запроса. В таком случае стоит пересмотреть логику и не получать список, а фильтровать сразу документы по условию.

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