Различия

Здесь показаны различия между двумя версиями данной страницы.

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:dev:api:store [25.04.2015 16:50]
rlysov
doc:dev:api:store [23.10.2020 16:09] (текущий)
sshevchuk [Получение остатков в разрезе товаров]
Строка 1: Строка 1:
 ====== API :: Store. Получение данных об остатках товара ====== ====== API :: Store. Получение данных об остатках товара ======
  
-В системе реализован программный интерфейс для получения данных об остатках товаров в магазинах. Данные выгружаются по http протоколу. Формат на выбор - xml или json.+В системе реализован программный интерфейс для получения и обновления данных об остатках товаров в магазинах. Данные выгружаются по http протоколу. Формат на выбор - xml или json.
  
  
-===== Пример запроса =====+===== Пример запроса ​на получение данных ​=====
  
 Пример запроса на получение данных об остатках товаров:​ Пример запроса на получение данных об остатках товаров:​
Строка 10: Строка 10:
  ​http://​mycompany.virtpos.ru/​api/​store?​apikey=MySecret&​format=xml&​warehouseid=1&​fields=itemname:​article  ​http://​mycompany.virtpos.ru/​api/​store?​apikey=MySecret&​format=xml&​warehouseid=1&​fields=itemname:​article
  
-==== Параметры запроса ==== +==== Параметры запроса ​на получение данных ​==== 
 +Параметры,​ которые не отмечены как **get only**, могут быть переданы как get- или как post-параметры.
   * **apikey** - Секретный ключ для доступа к данным. Обязательный параметр.   * **apikey** - Секретный ключ для доступа к данным. Обязательный параметр.
  
-  * **format** - формат,​ в котором сервер отдаст данные. Может принимать значения "​xml"​ или "​json"​. Необязательный параметр.+  * **format** ​(get only) - формат,​ в котором сервер отдаст данные. Может принимать значения "​xml"​ или "​json"​. Необязательный параметр.
  
-  * **stockonly** - если "​1",​ то возвращает только те товары,​ которые есть в наличии (остаток больше нуля)+  * **stockonly** ​(get only) - если "​1",​ то возвращает только те товары,​ которые есть в наличии (остаток больше нуля)
  
-  * **warehouseid** - код магазина,​ для которого надо вернуть данные об остатках. Если не указан,​ то возвращаются данные обо всех магазинах.+  * **warehouseid** ​(get only) - код магазина,​ для которого надо вернуть данные об остатках. Если не указан,​ то возвращаются данные обо всех магазинах.
  
-  * **itemid** - код товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.+  * **itemid** ​(get only) - код товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.
  
-  * **article** - артикул товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.+  * **article** ​(get only) - артикул товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.
  
-  * **itemname** - название товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.+  * **itemname** ​(get only) - название товара,​ данные о котором надо вернуть. Если не задан, то будут отданы данные обо всех товарах.
  
   * **fields** - список дополнительных полей, которые будут добавлены в ответ сервера. Имена полей разделены символом ":"​. Необязательный параметр. Поддерживаются следующие поля: ​   * **fields** - список дополнительных полей, которые будут добавлены в ответ сервера. Имена полей разделены символом ":"​. Необязательный параметр. Поддерживаются следующие поля: ​
Строка 32: Строка 32:
     * price - цена продажи по основному прайслисту     * price - цена продажи по основному прайслисту
     * optionalprices - цены товара по дополнительным прайслистам ​     * optionalprices - цены товара по дополнительным прайслистам ​
 +    * turnovercalc - оборачиваемость товара,​ рассчитанная системой ​
  
  
Строка 38: Строка 39:
 В ответ получаем XML или JSON. В ответе обязательно присутствует поле success. Если success=1, то операция выполнена успешно. Если success=0, то произошла ошибка. Дополнительная информация об ошибке содержится в поле info В ответ получаем XML или JSON. В ответе обязательно присутствует поле success. Если success=1, то операция выполнена успешно. Если success=0, то произошла ошибка. Дополнительная информация об ошибке содержится в поле info
  
 +  * quantity - текущее количество товара 
 +  * available_quantity - количество товара с учетом резервов
  
 ==== Пример ответа сервера ==== ==== Пример ответа сервера ====
Строка 59: Строка 61:
                 <​item>​                 <​item>​
                     <​id>​17007</​id>​                     <​id>​17007</​id>​
-                    <​quantity>​1.000</​quantity>​+                    <​quantity>​2.000</​quantity
 +                    <​available_quantity>​1.000</​available_quantity>​ 
 +                    <​lot_number>​12345</​lot_number>
                     <​name>​63838 Корм для собак 2кг</​name>​                     <​name>​63838 Корм для собак 2кг</​name>​
                     <​article>​63838</​article>​                     <​article>​63838</​article>​
Строка 80: Строка 84:
 </​root>​ </​root>​
 </​file>​ </​file>​
 +
 +
 +
 +===== Получение остатков в разрезе товаров =====
 +
 +Альтернативный вариант запроса на получение остатков. В отличие от предыдущего варианта данные группируются не по точкам продаж,​ а по товарам. Это позволяет запросить остатки одного товара сразу во всех точках продаж:​
 +
 + ​http://​mycompany.myvirtualpos.ru/​api/​store/​byItem?​apikey=MySecret&​format=xml&​id=1&​from_id=0&​total=1&​limit=10
 +
 +==== Параметры запроса на получение данных ====
 +  * **apikey** - Секретный ключ для доступа к данным. Обязательный параметр.
 +
 +  * **format** (get only) - формат,​ в котором сервер отдаст данные. Может принимать значения "​xml"​ или "​json"​. Необязательный параметр.
 +
 +  * **id** - идентификатор товара. Если не указан,​ то возвращаются данные по всем товарам. Если указан,​ будут отданы остатки по всем точкам продаж для этого товара
 +  * **from_id** - идентификатор товара,​ начиная с которого надо вернуть данные. Если указан,​ то возвращаются только те товары,​ идентификатор которых больше указанного. Используется совместно с параметром limit и total для получения данных пачками
 +  * **total** - (bool). Если указано "​yes",​ "​true"​ или "​1",​ то в ответ будет добавлено поле "​total"​ с общим количеством строк данных,​ соответствующих запросу. Используется совместно с limit для получения общего количества строк
 +  * **limit** - максимальное число записей,​ которые можно вернуть.
 +
 +====== Изменение данных ======
 +
 +===== Пример запроса на изменение данных =====
 +
 +Пример запроса на изменение данных об остатках товаров:​
 +
 + ​http://​mycompany.virtpos.ru/​api/​store/​updateOnhand?​apikey=MySecret&​format=xml&​warehouseid=1&​itemid=1&​quantity=20
 +
 +==== Параметры запроса на изменение данных ====
 +Параметры,​ которые не отмечены как **get only**, могут быть переданы как get- или как post-параметры.
 +  * **apikey** - Секретный ключ для доступа к данным. Обязательный параметр.
 +
 +  * **format** (get only) - формат,​ в котором сервер отдаст данные. Может принимать значения "​xml"​ или "​json"​. Необязательный параметр.
 +
 +  * **warehouseid** (get only) - код магазина,​ в котором надо изменить данные об остатках. ​
 +
 +  * **itemid** (get only) - код товара,​ данные о котором надо изменить.
 +
 +  * **ext_warehouseid** (get only) - код магазина внешней системе (например,​ 1С), в котором надо изменить данные об остатках. Используется только если не указан warehouseid
 +
 +  * **ext_itemid** (get only) - код товара внешней системе (например,​ 1С), данные о котором надо изменить. . Используется только если не указан itemid
 +
 +  * Поля, которые можно изменить: ​
 +    * quantity - количество товара
 +    * manuf_date - дата изготовления товарного остатка
 +    * cogs - себестоимость товарного остатка
 +    * expir_date - срок годности товарного остатка
 +    * lot_number - серия или партия товарного остатка ​
 +
 +==== Ответ сервера ====
 +
 +В ответ получаем XML или JSON. В ответе обязательно присутствует поле success. Если success=1, то операция выполнена успешно. Если success=0, то произошла ошибка. Дополнительная информация об ошибке содержится в поле info. Также в ответе присутствуют:​
 +
 +  * itemid - внутренний идентификатор товара,​ данные о котором были обновлены
 +  * warehouseid - внутренний идентификатор магазина(склада),​ на котором был обновлен остаток товара
 +  * isnew - "​1"​ если остаток был впервые добавлен в систему. 0 - если остаток был обновлен
 +  * quantity_before - количество товара до обновления
 +
 +
 +==== Пример ответа сервера ====
 +
 +Ниже приведен пример ответа сервера в формате XML
 +
 +<file xml>
 +<?xml version="​1.0"​ encoding="​UTF-8"?>​
 +<​root>​
 +    <​success>​1</​success>​
 +    <​id>​3</​id>​
 +    <​itemid>​8</​itemid>​
 +    <​warehouseid>​1</​warehouseid>​
 +    <​isnew>​0</​isnew>​
 +    <​quantity_before>​1.700</​quantity_before>​
 +</​root>​
 +</​file>​
 +
 +
 +===== Механизм обнуления необновленных остатков =====
 +
 +Логика обновления:​
 +    - Получить текущую версию данных об остатках (getOnhandVersion)
 +    - Обновить товары с ненулевыми остатками (updateOnhand)
 +    - Для всех необновленных товаров (версия данных младше полученной) массово установить нулевой остаток (setZeroOnhand)
 +
 +==== Получение текущей версии:​ ====
 +
 + ​http://​mycompany.virtpos.ru/​api/​store/​getOnhandVersion?​apikey=MySecret&​format=xml&​ext_warehouseid=1
 +
 +Параметры,​ которые не отмечены как **get only**, могут быть переданы как get- или как post-параметры.
 +
 +Параметры:​
 +  * int **warehouseid** (get only) - ID склада в ВиП, для которого надо получить версию остатков
 +  * string **ext_warehouseid** (get only) - Внешний ID склада, ​ для которого надо получить версию остатков
 +
 +==== Обнуление необновленных остатков ====
 +
 + ​http://​mycompany.virtpos.ru/​api/​store/​setZeroOnhand?​apikey=MySecret&​format=xml&​ext_warehouseid=1
 +
 +Параметры,​ которые не отмечены как **get only**, могут быть переданы как get- или как post-параметры.
 +
 +Параметры:​
 +  * int **version** (get only) - версия,​ полученная с помощью функции getOnhandVersion
 +  * int **warehouseid** (get only) - ID склада в ВиП, для которого надо обнулить остатки
 +  * string **ext_warehouseid** (get only) - Внешний ID склада, ​ для которого надо обнулить остатки