Количество в наличии на складе в Exact Online

Используя следующий запрос, я обнаружил, что для товаров, у которых есть складское местоположение, есть несколько строк, возвращаемых из StockLocations REST API Exact Online:

select spn.item_code_attr || '-' || spn.warehouse_code_attr || '-' || stn.code key 
,      itm.itemgroupcode
,      itm.itemgroupdescription
,      spn.item_code_attr
,      spn.item_description
,      spn.currentquantity
,      spn.planning_in
,      spn.planning_out
,      spn.currentquantity + spn.planning_in - spn.planning_out plannedquantity
,      -1 bestelniveau /* out of scope */
,      itm.costpricestandard costprijs
,      itm.costpricestandard * spn.currentquantity stockvalue
,      spn.warehouse_code_attr
,      stn.code locatie
,      itm.unitcode UOM
, itm.id
, whe.id
, sln.stock
, sln.itemid
, sln.warehouse
, stn.id
from   exactonlinexml..StockPositions spn
join   exactonlinerest..items itm
on     itm.code = spn.item_code_attr
and    itm.code = 'LE-10242'
and    itm.isstockitem = 1
join   exactonlinerest..warehouses whe
on     whe.code = spn.warehouse_code_attr
left 
outer
join   exactonlinerest..stocklocations sln
on     sln.itemid = itm.id
and    sln.stock != 0
and    sln.warehouse = whe.id
left
outer
join   storagelocations stn
on     stn.id        = sln.storagelocation
and    stn.warehouse = sln.warehouse
--
-- Filter out no stock nor planned.
--
where  ( spn.currentquantity !=0
         or     
         spn.planning_in != 0
         or     
         spn.planning_out != 0
       )
and    spn.item_code_attr = 'LE-10242'
order 
by     key

Например, для этого товара имеется 10 StockLocations. Когда я суммирую поле Stock, оно возвращает количество запасов, найденное в StockPositions. Однако кажется, что каждая транзакция создает дополнительную запись StockLocation.

Я ожидаю, что StockLocation будет содержать для каждого места на складе общую сумму, которую можно найти там.

РЕДАКТИРОВАТЬ

API StockLocations описан в https://start.exactonline.nl/api/v1/{division}/logistics/$metadata как:

<EntityType Name="StockLocation">
  <Key>
    <PropertyRef Name="ItemID"/>
  </Key>
  <Property Name="ItemID" Type="Edm.Guid" Nullable="false"/>
  <Property Name="Warehouse" Type="Edm.Guid" Nullable="true"/>
  <Property Name="WarehouseCode" Type="Edm.String" Nullable="true"/>
  <Property Name="WarehouseDescription" Type="Edm.String" Nullable="true"/>
  <Property Name="Stock" Type="Edm.Double" Nullable="true"/>
  <Property Name="StorageLocation" Type="Edm.Guid" Nullable="true"/>
  <Property Name="StorageLocationCode" Type="Edm.String" Nullable="true"/>
  <Property Name="StorageLocationDescription" Type="Edm.String" Nullable="true"/>
</EntityType>

Почему-то это не задокументировано в https://start.exactonline.nl/docs/HlpRestAPIResources.aspx

Что я делаю не так?


person Guido Leenders    schedule 07.11.2016    source источник


Ответы (1)


Обсудили вопрос на хакатоне с инженером. Это то, как работает API StockLocation; имя не оптимально отражает содержимое, но это предполагаемое поведение.

С помощью select field, sum(stock) from stocklocations group by field вы можете получить нужную информацию.

Чтобы повысить производительность соединения, рекомендуется использовать для этого встроенное представление, например select ... from table1 join table2 ... join ( select field, sum(stock) from stocklocations group by field).

person Guido Leenders    schedule 18.11.2016