Публикация

подписчиков: 3 Подписаться
0
Avatar

Как получить товары с обновлением остатков за последние Х дней?

Измененные товары за последние Х дней мы получаем через параметр "filter=updated>дата_здесь", но эта выборка не содержит товары чей остаток изменился и вообще товар не считается измененным при изменении остатков.

Как в выборку добавить эти товары, что бы и остатки обновлять?

Спасибо

Axel

Войдите в службу, чтобы оставить комментарий.

Комментариев: 19

0
Avatar

Сейчас такой возможности нет.

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

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Может имеет смысл в записи самого товара писать сумму кол-ва в наличии? Как я понимаю, то сейчас у вас это отдельная табличка со списком всех приходов/расходов сумма которых и есть кол-во.

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Не совсем понял, как это связано с проверкой обновления остатков. Такая возможно уже есть - остатки можно получать через запрос ассортимента. Используя параметр scope=product можно получать только товары.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Не совсем верно выразился, имел ввиду, что при изменении остатков изменить и дату последнего изменения товара, что бы через "filter=updated>дата_здесь" получить и товары чей остаток изменился с указанного времени.

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

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

updated относится к самому товару, поэтому не будет обновляться при изменении остатков. Предполагалось сделать дополнительный фильтр, позволяющий отобрать товары по времени изменения остатков. Но этого сделать пока не удалось.

Поэтому прямого решения пока нет.

Из вариантов.

 - Запрашивать периодически остатки.

 - На форуме было похожее обсуждение. В итоге пользователь использует веб-хуки на все документы, которые влияют на остатки, и запрашивает остатки для товаров, входящих в них.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

- Как запрашивать периодически остатки, если позиций тысячи, а максимальный лимит на запрос всего 100 + запрещено более 3 одновременных соединений, что для перебора всех позиций требует пол сотни запросов?

- Где можно почитать документацию про вебхуки МС?

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Т.е. создаем вебхук:

url - наш серверный обработчик события

action - "UPDATE"  - т.к. отслеживаем обновления остатков

entityType - ? какое отвечает за остатки товаров?

 

Спасибо

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Нет, не существует отдельной сущности для отслеживания остатков. Нужно отслеживать создание, обновление, удаление документов влияющих на остатки:

Заказы поставщикам, Приемки, Возвраты поставщикам
Заказы покупателей, Отгрузки, Возвраты покупателей
Оприходования, Списания, Перемещения, Заказы на производство, Тех. операции
Розничные продажи, Розничные возвраты


По поводу лимита - в следующей версии АПИ 1.2 лимит будет увеличен до 1000.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Т.е. если Вы перечислили все варианты, то в общей сложности получается требуется создать 39 вебхуков?.. чудно

Если не трудно, не могли бы также перечислить эти значения в формате "entityType" или где есть список всех типов сущностей с указанием что есть что.

 

Спасибо

P.S. Новый лимит от части решит проблему, а когда он планируется для введения?

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Соответствие типов можно найти в документации.

purchaseorder, supply, purchasereturn
customerorder, demand, salesreturn
enter, loss, move, processingorder, processing
retaildemand, retail
salesreturn

Версия 1.2 находится в разработке. Выпуск планируется в августе.

 

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Создал вебхуки, а что "ловить" скриптом?

Как я понимаю должен прийти POST запрос, но какой параметр содержит json?

Спасибо

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Веб-хуки в документации

В теле запроса приходит json с массивом events:

{
 "events":
  [
   {"meta":
     {
       "type":"product",
       "href":"https://online.moysklad.ru/api/remap/1.1/entity/product/c1557cfb-c2cc-11e6-7a31-d0fd000f0b00"
     },
    "action":"DELETE"
   }
  ]
}

В текущей версии как правило приходит только один объект в составе массива events. Исключение составляет массовое обновление цен товаров.
Каждый объект массива events содержит информацию об измененном объекте, включая ссылку на него. Для данной задачи Вам нужно будет запрашивать остатки по измененному документу.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Да, это я смотрел, спасибо, а сам json ведь должен быть в каком то параметре из какой глобальной переменной? $_POST?

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Насколько я понял, Вы спрашиваете о технической реализации уже на уровне скрипта. На это не могу ответить.

json приходит в теле запроса.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Понял, теперь момент... получается что хук присылает не по конкретному товару, а по заказe и еще нужно выдергивать из заказа список его позиций

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Остатки это не признак товара. Это значение, вычисляемое на основе документов. Поэтому оказалось сложным решить данную задачу.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Сделал в итоге так... получаем вебхук, вызываем его "/positions" и проходим в цикле товары указанные "assortment".

Оказывается, если запрашивать товар по отдельности, то он не содержит поля "stock" т.е. по сути остатка, в отличии от получении списка товаров.

В итоге каждом товару который нашли обновляем поле lastUpdated (вроде так, пишу по памяти) указывая текущее время.

В итоге в следующей выборке по фильтру "updated" товар должен попасть в выдачу.

Вопрос, нельзя ли проще, добавить в тело товара дополнительное поле типа "lastStockUpdate" и обновлять его при каждой проводке документа связанного с остатками, что бы по нему можно было также фильтровать?

Axel 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Товару можно добавить дополнительное поле типа дата и проводить фильтрацию по нему.

Dtrufanov 0 проголосовали
Действия с комментариями Постоянная ссылка