Когда пользователь впервые устанавливает товароучётную систему (далее также ТУ) это может привести к нарушению количества или обнулению остатков товаров. Такое поведение ТУ можно объяснить неочевидным способом получения остатков, актуальных на момент установки приложения.
В основе получения актуальных остатков лежит обработка данных, указанных в поле initial_quantity
различных видов документов. В зависимости от значения поля и типа документа (например, продажа или возврат товара), следует выполнить определённую обработку остатков.
В этой статье приводится один из возможных способов обработки документов и получения актуальных остатков.
Чтобы получить актуальные остатки:
Узнайте список магазинов пользователя.
Одному магазину может соответствовать множество смарт-терминалов, поэтому товарная номенклатура и учёт остатков, ведутся в контексте магазина.
Получите номенклатуру каждого из магазинов пользователя с помощью метода GET /stores/{store-id}/products
.
Если пользователь впервые устанавливает ТУ, остатки всех товаров будут нулевыми.
Получите список всех документов магазина за выбранный вами период (например, шесть месяцев).
Максимальный период выборки документов зависит от версии API, которую вы используете: один год для API V1 или всё время с момента создания магазина для API V2. Дату создания магазина вы можете определить по первым восьми символам его идентификатора (id
).
INVENTORY
), который содержит актуальные остатки на определённую дату.Теперь, когда вы знаете идентификаторы всех товаров (поле uuid
в API V1 или id
в API V2) и документов, необходимо найти самый новый документ, соответствующий каждому из товаров. В зависимости от типа документа реализуйте следующую логику:
ACCEPT
), используйте указанные в нём остатки товара.SELL
), из указанных в нём остатков необходимо вычесть количество проданного товара.settlement_method.type
). Остаток товара изменяется только в тех случаях, когда это поле содержит одно из значений: CHECKOUT_FULL
, CHECKOUT_PARTIAL
, CREDIT_PASS
или CREDIT_CHECKOUT
.PAYBACK
), к указанным в нём остаткам необходимо добавить количество возвращённого товара.Полученные таким образом остатки запишите в поле quantity
соответствующих товаров.
Если за выбранный вами период документов по товару не обнаружено, оставьте товар без изменений и продолжайте в фоновом режиме запрашивать более старые документы.
В зависимости от версии API, которую вы используете:
POST /inventories/stores/{storeUuid}/products
.Остатки товаров обновлены. Теперь вы можете сообщить своим пользователям, что в Облаке Эвотор доступны новые данные, которые можно загрузить на смарт-терминалы.