Списание остатков в МойСклад из Rubitime

Содержание:


Для того, чтобы автоматизировать отслеживание расходных материалов, необходимых для оказания определенной услуги, настроим интеграцию сервисов Rubitime и МойСклад. Предположим, у нас парикмахерская, и при оказании услуги “стрижка” расходуется одноразовый воротничок и одноразовый пеньюар.


В данной интеграции мы будем получать из Rubitime:


  • статус записи;
  • ID услуги.

В системе МойСклад нам понадобится создать:


  • организацию (юр. лицо);
  • склад;
  • товар (или несколько), необходимый для оказания услуги.

Склад в данном контексте соответствует фактическому расположению запасов расходных материалов. Например, для салона на Ленина, 1 и салона на Фрунзе, 5 создаем два разных склада. Организация соответствует компании, оказывающей услугу.


1. Создание входящего вебхука в APInita


Создадим новый сценарий в APInita, назовем его "списание расходников по стрижке" и добавим модуль Webhook:


Списание остатков в МойСклад из Rubitime


Скопируем URL вебхука после создания шага, нажав на ссылку во всплывающем баннере:


Списание остатков в МойСклад из Rubitime


1.2. Настройка исходящего вебхука в Rubitime


В кабинете Rubitime в разделе “API” вставим скопированный на шаге 1 URL в соответствующее поле, сохраним настройки:


Списание остатков в МойСклад из Rubitime


Чтобы не расходовать лишние транзакции в APInita, из отправляемых событий можно оставить только “Обновление записи (event-update-record)”, остальные две галочки снять.


1.3. Проверка работы связи Rubitime и APInita


Включаем сценарий:


Списание остатков в МойСклад из Rubitime


В Rubitime создадим запись на нужную для интеграции услугу. Видим, что модуль сработал:


Списание остатков в МойСклад из Rubitime


Открываем просмотр модуля, выходные данные. Мы получили данные о записи, из которых нас интересуют ключи: status (статус записи) и service_id (номер услуги). Если мы в Rubitime изменим статус этой записи на “завершен”, то получим { “status”: 2 }.


Списание остатков в МойСклад из Rubitime


2. Обработка входящих данных из Rubitime


Выключаем сценарий для получения возможности редактирования. Следующим после модуля входящих данных поместим модуль IF:


Списание остатков в МойСклад из Rubitime


Назовем его “проверка услуги и статуса записи” и пропишем следующее условие:


{{ s1.body.data.service_id == 46761 and s1.body.data.status == 2}}

, где “46761” - это ID услуги, полученный на шаге 1.3 (подставьте свое значение), а “2” - это статус услуги “Завершен”.


Списание остатков в МойСклад из Rubitime


3. Настройка подключения к МойСклад


В настройках системы МойСклад создадим токен, скопируем его, желательно сразу вставить в блокнот, чтобы не потерять.


Списание остатков в МойСклад из Rubitime


Переходим в APInita в раздел “Подключения”. Создадим новое подключение с названием “МойСклад” (может быть любым), тип подключения: API ключ, Authorization: Bearer. Вставляем в поле ранее скопированный токен, сохраняем.


Списание остатков в МойСклад из Rubitime


Подключение после сохранения имеет статус “подключено”:


Списание остатков в МойСклад из Rubitime


3.2. Получение ID товаров, склада и организации в МойСклад


Чтобы в дальнейшем проводить списание конкретных товаров по конкретному складу и организации, нужно сначала узнать их ID в системе МойСклад.


Для этого отправим последовательно несколько запросов методом GET, тип (формат) данных application/json


В заголовке запроса передаем: "Accept-Encoding: gzip"


Подключение, созданное в пункте 3.


Далее нам нужно будет последовательно подставить в запрос следующие URL:


  • https://api.moysklad.ru/api/remap/1.2/entity/organization (получить список юр.лиц) Чтобы узнать id организации
  • https://api.moysklad.ru/api/remap/1.2/entity/store (получить список складов) Чтобы узнать id склада
  • https://api.moysklad.ru/api/remap/1.2/entity/product (получить список товаров) Чтобы узнать id товара)

Для удобства создадим отдельный сценарий в APInita, назовем его “получение сущностей”, добавим модуль HTTP (назовем его так же) и заполним необходимые поля:


Списание остатков в МойСклад из Rubitime


Списание остатков в МойСклад из Rubitime


3.2.1.


Вставляем первый URL: https://api.moysklad.ru/api/remap/1.2/entity/organization Сохраняем модуль. Однократно запускаем сценарий:


Списание остатков в МойСклад из Rubitime


Открываем модуль, смотрим на выходные данные:


Списание остатков в МойСклад из Rubitime


Здесь мы получаем метаданные о каждой организации в виде вложенных массивов. У нас в примере организация одна, поэтому мы сразу видим ее в первом элементе массива rows (0). Если организаций несколько, то находим нужный нам элемент массива, который содержит название нужной организации в ключе “name”. Выделяем и копируем в блокнот значение ключа “id”.


3.2.2.


Переходим снова на редактирование шага, вставляем второй URL: https://api.moysklad.ru/api/remap/1.2/entity/store Сохраняем модуль, однократно запускаем сценарий, смотрим на выходные данные:


Списание остатков в МойСклад из Rubitime


Находим элемент массива, который содержит название нужного склада в ключе “name”. Выделяем и копируем в блокнот значение ключа “id”.


3.2.3.


Переходим снова на редактирование шага, вставляем третий URL: https://api.moysklad.ru/api/remap/1.2/entity/product Сохраняем модуль, однократно запускаем сценарий, смотрим на выходные данные:


Списание остатков в МойСклад из Rubitime


Здесь последовательно находим нужные элементы массива, которые содержат название нужного товара в ключе “name”. Выделяем и копируем в блокнот значение ключа “id” - для каждого товара свой ID (в нашем примере при оказании услуги расходуется две товарных позиции, оба ID сохраняем в блокнот).


Записав в блокнот ID всех нужных сущностей, выходим из сценария “получение сущностей”.


4. Формирование HTTP-запроса на создание списания


Теперь, чтобы создать в системе МойСклад списание товаров, отправим HTTP-запрос на URL: https://api.moysklad.ru/api/remap/1.2/entity/loss методом POST, тип (формат) данных text/plain.


В заголовке запроса передаем:


  • Accept-Encoding: gzip;
  • Content-Type: application/json;
  • Подключение, созданное в пункте 3.1.

В теле запроса передаем следующий JSON-объект:


{
   "store":{
          "meta": {
               "href": "https://api.moysklad.ru/api/remap/1.2/entity/store/6d0d7175-045f-11ef-0a80-0f130003d3dc",
               "metadataHref": "https://api.moysklad.ru/api/remap/1.2/entity/store/metadata",
               "type": "store",
               "mediaType": "application/json"
          }
     },
     "organization": {
          "meta": {
               "href": "https://api.moysklad.ru/api/remap/1.2/entity/organization/09072925-03a3-11ef-0a80-08b60008fc32",
               "metadataHref": "https://api.moysklad.ru/api/remap/1.2/entity/organization/metadata",
               "type": "organization",
               "mediaType": "application/json"
          }
     },
     "positions": [
          {
               "quantity": 1,
               "reason": "расход",
               "assortment": {
                    "meta": {
                         "href": "https://api.moysklad.ru/api/remap/1.2/entity/product/5be5f354-046d-11ef-0a80-014d0006d236",
                         "metadataHref": "https://api.moysklad.ru/api/remap/1.2/entity/product/metadata",
                         "type": "product",
                         "mediaType": "application/json"
                    }
               }
          },
          {
               "quantity": 1,
               "reason": "расход",
               "assortment": {
                    "meta": {
                         "href": "https://api.moysklad.ru/api/remap/1.2/entity/product/9baa7362-0485-11ef-0a80-1433000be89d",
                         "metadataHref": "https://api.moysklad.ru/api/remap/1.2/entity/product/metadata",
                         "type": "product",
                         "mediaType": "application/json"
                   }
               }
          }
   ]
}

  • в значении “href” последняя часть URL https://api.moysklad.ru/api/remap/1.2/entity/store/6d0d7175-045f-11ef-0a80-0f130003d3dc - это ID склада, полученный на шаге 3.2.2.
  • последняя часть URL https://api.moysklad.ru/api/remap/1.2/entity/organization/09072925-03a3-11ef-0a80-08b60008fc32 - это ID организации, полученный на шаге 3.2.1.
  • значением ключа “quantity” в виде числа задаем количество товара, расходуемого при оказании услуги;
  • значением ключа “reason” в виде строки в кавычках прописываем причину списания (произвольное поле, можно прописать любое значение)
  • в значении “href” последняя часть URL https://api.moysklad.ru/api/remap/1.2/entity/product/5be5f354-046d-11ef-0a80-014d0006d236 - это ID товара, полученный на шаге 3.2.3.

В нашем примере товарных позиций две - соответственно, вложенный массив содержит два элемента.


Возвращаемся в сценарий “списание расходников по стрижке”. Следующим после модуля IF добавим модуль HTTP:


Списание остатков в МойСклад из Rubitime


Назовем его “создание списания”, заполним необходимые поля:


Списание остатков в МойСклад из Rubitime


Сохраняем модуль, включаем сценарий.


5. Интеграция в действии


Проверим работу интеграции. В Rubitime создадим запись на услугу “стрижка”, ID которой обрабатывается на шаге 2. Изменим статус записи на “Завершен”. Видим, что сценарий сработал (рядом с модулями загораются зеленые точки, сигнализирующие об успешной передаче данных).


В системе МойСклад создалось списание заданных товаров:


Списание остатков в МойСклад из Rubitime

Попробуйте бесплатно

При регистрации Вы бесплатно получаете 14 дней и 1.000 запусков сценариев:

Нажимая кнопку «Регистрация» Вы принимаете условия лицензионного соглашения и даете согласие на обработку своих персональных данных. Если у Вас уже есть аккаунт, войдите в систему. Сайт защищен технологией reCAPTCHA и к нему применяются Google политика конфиденциальности и условия использования.
  • Техподдержка

    Ответим на Ваши вопросы, подскажем по настройкам модулей.

  • Доступные тарифы

    От 1000р. в месяц за полный функционал без ограничений.

  • Безопасность

    Сервера расположены на территории РФ, а все подключения дополнительно шифруются.